Kiedy dwa obiekty kolizji kolidują ze sobą, silnik wysyła wiadomości do wszystkich komponentów w obu tych obiektach:
Odpowiedź na kolizję "collision_response"
to wiadomość wysyłana do wszystkich obiektów w przypadku ich kolizji. Zawiera ona następujące pola:
other_id
hash
).other_position
vector3
).other_group
hash
).Wiadomość "collision_response"
jest odpowiednia do rozwiązywania kolizji, gdzie nie potrzebujesz szczegółów dotyczących rzeczywistego przecięcia (intersection) obiektów, na przykład, jeśli chcesz wykryć tylko czy pocisk trafia wroga. W ciągu jednej klatki jest wysyłana tylko jedna z tych wiadomości dla każdej pary obiektów kolidujących ze sobą.
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
Odpowiedź punktu kontaktu "contact_point_response"
to wiadomość wysyłana, gdy jeden z kolidujących obiektów jest dynamiczny lub kinematyczny. Zawiera ona następujące pola:
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
).Dla gry lub aplikacji, w których potrzebujesz idealnie rozdzielać obiekty, wiadomość "contact_point_response"
dostarcza wszystkie informacje, których potrzebujesz. Należy jednak zauważyć, że w przypadku danej pary kolizji, w zależności od charakteru kolizji, można otrzymać wiele wiadomości "contact_point_response"
w jednej klatce. Zobacz szczegóły w instrukcji do rozwiązywania kolizji.
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
Odpowiedź na wyzwalacz "trigger_response"
to wiadomość wysyłana, gdy obiekt kolidujący ma typ "trigger"
(wyzwalacz).
W kolizji typu “trigger” są wysyłane wiadomości "collision_response"
. Dodatkowo, wyzwalacze wysyłają również specjalną wiadomość "trigger_response"
na początku i na końcu kolizji. Wiadomość ta zawiera następujące pola:
other_id
hash
).enter
true
jeśli interakcja była wejściem do wyzwalacza, false
, jeśli była wyjściem (typ boolean
).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
Did you spot an error or do you have a suggestion? Please let us know on GitHub!
GITHUB