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
Cuando dos objetos colisionan, el motor enviará un evento al callback de eventos o transmitirá mensajes a ambos objetos.
Los tipos de eventos generados se pueden controlar mediante los indicadores de cada objeto:
Todos son true de forma predeterminada.
Cuando dos objetos de colisión interactúan, se comprueba si se debe enviar un mensaje al usuario, según estas casillas.
Por ejemplo, dadas las casillas “Generate Contact Events”:
Al usar physics.set_event_listener():
| Componente A | Componente B | Enviar mensaje |
|---|---|---|
| ✅︎ | ✅︎ | Sí |
| ❌ | ✅︎ | Sí |
| ✅︎ | ❌ | Sí |
| ❌ | ❌ | No |
Al usar el manejador de mensajes predeterminado:
| Componente A | Componente B | Enviar mensaje(s) |
|---|---|---|
| ✅︎ | ✅︎ | Sí (A,B) + (B,A) |
| ❌ | ✅︎ | Sí (B,A) |
| ✅︎ | ❌ | Sí (A,B) |
| ❌ | ❌ | No |
El mensaje "collision_response" se envía cuando uno de los objetos que colisionan es de tipo “dynamic”, “kinematic” o “static”. Tiene definidos los siguientes campos:
other_idhash)other_positionvector3)other_grouphash)own_grouphash)El mensaje "collision_response" solo es adecuado para resolver colisiones donde no necesitas detalles sobre la intersección real de los objetos, por ejemplo si quieres detectar si una bala golpea a un enemigo. Solo se envía uno de estos mensajes por cada par de objetos que colisionan en cada frame.
function on_message(self, message_id, message, sender)
-- comprobar el mensaje
if message_id == hash("collision_response") then
-- realizar una acción
print("I collided with", message.other_id)
end
end
El mensaje "contact_point_response" se envía cuando uno de los objetos que colisionan es de tipo “dynamic” o “kinematic” y el otro es de tipo “dynamic”, “kinematic” o “static”. Tiene definidos los siguientes campos:
positionvector3).normalvector3).relative_velocityvector3).distancenumber).applied_impulsenumber).life_timenumber).massnumber).other_massnumber).other_idhash).other_positionvector3).other_grouphash).own_grouphash).Para un juego o aplicación donde necesitas separar objetos perfectamente, el mensaje "contact_point_response" te da toda la información que necesitas. Sin embargo, ten en cuenta que para cualquier par de colisión dado, se pueden recibir varios mensajes "contact_point_response" en cada frame, según la naturaleza de la colisión. Consulta Resolver colisiones para más información.
function on_message(self, message_id, message, sender)
-- comprobar el mensaje
if message_id == hash("contact_point_response") then
-- realizar una acción
if message.other_mass > 10 then
print("I collided with something weighing more than 10 kilos!")
end
end
end
El mensaje "trigger_response" se envía cuando uno de los objetos que colisionan es de tipo “trigger”. El mensaje se enviará una vez cuando la colisión se detecte por primera vez y otra vez cuando los objetos ya no estén colisionando. Tiene los siguientes campos:
other_idhash).entertrue si la interacción fue una entrada en el trigger, false si fue una salida. (boolean).other_grouphash).own_grouphash).function on_message(self, message_id, message, sender)
-- comprobar el mensaje
if message_id == hash("trigger_response") then
if message.enter then
-- realizar una acción para la entrada
print("I am now inside", message.other_id)
else
-- realizar una acción para la salida
print("I am now outside", message.other_id)
end
end
end