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
Gdy dwa obiekty się zderzają, silnik wyśle zdarzenie do funkcji zwrotnej zdarzeń albo rozgłosi komunikaty do obu obiektów.
Typy generowanych zdarzeń można kontrolować za pomocą przełączników dla każdego obiektu:
Wszystkie są domyślnie ustawione na true.
Gdy dwa obiekty kolizji wchodzą w interakcję, sprawdzamy, czy na podstawie tych pól wyboru należy wysłać wiadomość do użytkownika.
Na przykład dla pola “Generate Contact Events”:
Gdy używasz physics.set_event_listener():
| Komponent A | Komponent B | Wyślij wiadomość |
|---|---|---|
| ✅︎ | ✅︎ | Tak |
| ❌ | ✅︎ | Tak |
| ✅︎ | ❌ | Tak |
| ❌ | ❌ | Nie |
Gdy używasz domyślnego handlera wiadomości:
| Komponent A | Komponent B | Wyślij wiadomości |
|---|---|---|
| ✅︎ | ✅︎ | Tak (A,B) + (B,A) |
| ❌ | ✅︎ | Tak (B,A) |
| ✅︎ | ❌ | Tak (A,B) |
| ❌ | ❌ | Nie |
Wiadomość "collision_response" jest wysyłana, gdy jeden z obiektów biorących udział w zderzeniu ma typ “dynamic”, “kinematic” lub “static”. Zawiera następujące pola:
other_idhash)other_positionvector3)other_grouphash)own_grouphash)Wiadomość collision_response wystarcza do obsługi kolizji, jeśli nie potrzebujesz żadnych szczegółów dotyczących rzeczywistego przecięcia obiektów, na przykład gdy chcesz wykryć, czy pocisk trafił wroga. Dla każdej pary obiektów, które się zderzają, w jednej klatce wysyłana jest tylko jedna taka wiadomość.
function on_message(self, message_id, message, sender)
-- sprawdź wiadomość
if message_id == hash("collision_response") then
-- wykonaj działanie
print("I collided with", message.other_id)
end
end
Wiadomość "contact_point_response" jest wysyłana, gdy jeden z obiektów biorących udział w zderzeniu ma typ “dynamic” lub “kinematic”, a drugi ma typ “dynamic”, “kinematic” lub “static”. Zawiera następujące pola:
positionvector3).normalvector3).relative_velocityvector3).distancenumber).applied_impulsenumber).life_timenumber).massnumber).other_massnumber).other_idhash).other_positionvector3).other_grouphash).own_grouphash).Jeśli tworzysz grę albo aplikację, w której obiekty muszą być rozdzielane z dużą dokładnością, wiadomość "contact_point_response" dostarcza wszystkich potrzebnych informacji. Zwróć jednak uwagę, że dla danej pary kolizji w jednej klatce możesz otrzymać kilka takich wiadomości "contact_point_response", zależnie od charakteru zderzenia. Zobacz Rozwiązywanie kolizji, aby poznać więcej szczegółów.
function on_message(self, message_id, message, sender)
-- sprawdź wiadomość
if message_id == hash("contact_point_response") then
-- wykonaj działanie
if message.other_mass > 10 then
print("I collided with something weighing more than 10 kilos!")
end
end
end
Wiadomość "trigger_response" jest wysyłana, gdy jeden z obiektów biorących udział w zderzeniu ma typ “trigger”. Jest wysyłana raz, gdy kolizja zostanie wykryta po raz pierwszy, a potem jeszcze raz, gdy obiekty przestają ze sobą kolidować. Zawiera następujące pola:
other_idhash).entertrue, jeśli interakcja oznaczała wejście do wyzwalacza, false, jeśli oznaczała wyjście (boolean).other_grouphash).own_grouphash).function on_message(self, message_id, message, sender)
-- sprawdź wiadomość
if message_id == hash("trigger_response") then
if message.enter then
-- wykonaj działanie przy wejściu
print("I am now inside", message.other_id)
else
-- wykonaj działanie przy wyjściu
print("I am now outside", message.other_id)
end
end
end