This translation is community contributed and may not be up to date. We only maintain the English version of the documentation. Read this manual in English
Lorsque deux objets entrent en collision, le moteur envoie un événement à la fonction de rappel (callback) d’événement ou diffuse des messages aux deux objets.
Vous pouvez contrôler les types d’événements générés à l’aide des options de chaque objet :
Elles valent toutes true par défaut.
Lorsque deux objets de collision interagissent, nous vérifions si nous devons envoyer un message à l’utilisateur en fonction de ces cases à cocher.
Par exemple, avec les cases à cocher “Generate Contact Events” :
Avec physics.set_event_listener() :
| Composant A | Composant B | Envoi d’un message |
|---|---|---|
| ✅︎ | ✅︎ | Oui |
| ❌ | ✅︎ | Oui |
| ✅︎ | ❌ | Oui |
| ❌ | ❌ | Non |
Avec le gestionnaire de messages par défaut :
| Composant A | Composant B | Envoi de message(s) |
|---|---|---|
| ✅︎ | ✅︎ | Oui (A,B) + (B,A) |
| ❌ | ✅︎ | Oui (B,A) |
| ✅︎ | ❌ | Oui (A,B) |
| ❌ | ❌ | Non |
Le message "collision_response" est envoyé lorsque l’un des objets en collision est de type “dynamic”, “kinematic” ou “static”. Les champs suivants sont renseignés :
other_idhash)other_positionvector3)other_grouphash)own_grouphash)Le message collision_response ne convient que pour résoudre les collisions qui ne nécessitent aucun détail sur l’intersection réelle des objets, par exemple pour détecter si une balle touche un ennemi. Un seul de ces messages est envoyé par image pour chaque paire d’objets en collision.
function on_message(self, message_id, message, sender)
-- check for the message
if message_id == hash("collision_response") then
-- take action
print("I collided with", message.other_id)
end
end
Le message "contact_point_response" est envoyé lorsque l’un des objets en collision est de type “dynamic” ou “kinematic” et que l’autre est de type “dynamic”, “kinematic” ou “static”. Les champs suivants sont renseignés :
positionvector3).normalvector3).relative_velocityvector3).distancenumber).applied_impulsenumber).life_timenumber).massnumber).other_massnumber).other_idhash).other_positionvector3).other_grouphash).own_grouphash).Pour un jeu ou une application où vous devez séparer parfaitement les objets, le message "contact_point_response" vous fournit toutes les informations nécessaires. Cependant, pour une paire d’objets en collision donnée, plusieurs messages "contact_point_response" peuvent être reçus à chaque image, selon la nature de la collision. Consultez le manuel sur la résolution des collisions pour en savoir plus.
function on_message(self, message_id, message, sender)
-- check for the message
if message_id == hash("contact_point_response") then
-- take action
if message.other_mass > 10 then
print("I collided with something weighing more than 10 kilos!")
end
end
end
Le message "trigger_response" est envoyé lorsque l’un des objets en collision est de type “trigger”. Il est envoyé une première fois lorsque la collision est détectée, puis une seconde fois lorsque les objets ne sont plus en collision. Il comporte les champs suivants :
other_idhash).entertrue si l’interaction correspond à une entrée dans le déclencheur, false s’il s’agit d’une sortie. (boolean).other_grouphash).own_grouphash).function on_message(self, message_id, message, sender)
-- check for the message
if message_id == hash("trigger_response") then
if message.enter then
-- take action for entry
print("I am now inside", message.other_id)
else
-- take action for exit
print("I am now outside", message.other_id)
end
end
end