Когда два объекта сталкиваются, движок передает сообщения всем компонентам обоих объектов:
Сообщение "collision_response"
посылается всем объектам столкновения. У него имеются следующий набор полей:
other_id
hash
)other_position
vector3
)other_group
hash
)Само по себе сообщение collision_response
имеет смысл только для принятия решений по столкновениям, в которых вы не хотите знать деталей о реальном пересечении объектов, например, если вы хотите определить, поразила ли пуля врага. В каждом кадре только по одному сообщению такого вида посылается для каждой пары столкнувшихся объектов.
function on_message(self, message_id, message, sender)
-- проверка сообщения
if message_id == hash("collision_response") then
-- предпринимаем действие
print("I collided with", message.other_id)
end
end
Сообщение "contact_point_response"
посылается, когда одна из групп столкновения динамическая или кинематическая. В нем содержится следующий набор полей:
position
vector3
).normal
vector3
).relative_velocity
vector3
).distance
number
).applied_impulse
number
).life_time
number
).mass
number
).other_mass
number
).other_id
hash
).other_position
vector3
).group
hash
).Для игры или приложения, где необходимо идеально отделить объекты, сообщение "contact_point_response"
дает всю необходимую для этого информацию. Однако, стоит заметить, что для любой пары столкновения, каждый кадр могут присылаться несколько сообщений "contact_point_response"
, в зависимости от природы столкновения. За подробностями обращайтесь к руководству по разрешению столкновений.
function on_message(self, message_id, message, sender)
-- проверка сообщения
if message_id == hash("contact_point_response") then
-- предпринимаем действие
if message.other_mass > 10 then
print("I collided with something weighing more than 10 kilos!")
end
end
end
Сообщение "trigger_response"
посылается, когда столкнувшийся объект имеет тип “trigger”.
В столкновении с триггером посылаются сообщения "collision_response"
. Дополнительно, триггеры также посылают специальные сообщения "trigger_response"
, когда коллизия начинается и заканчивается. Сообщение содержит следующие поля:
other_id
hash
).enter
true
— если взаимодействие было вхождением в триггер, false
— если это был выход из него (boolean
).function on_message(self, message_id, message, sender)
-- проверка сообщения
if message_id == hash("trigger_response") then
if message.enter then
-- предпринимаем действие для входа
print("I am now inside", message.other_id)
else
-- предпринимаем действие для выхода
print("I am now outside", message.other_id)
end
end
end
Did you spot an error or do you have a suggestion? Please let us know on GitHub!
GITHUB