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
Quando due oggetti entrano in collisione, il motore invia un evento alla callback degli eventi o messaggi a entrambi gli oggetti.
Puoi controllare i tipi di eventi generati tramite le opzioni di ciascun oggetto:
Per impostazione predefinita, sono tutte impostate su true.
Quando due oggetti di collisione interagiscono, il motore controlla queste caselle per determinare se inviare un messaggio all’utente.
Ad esempio, considerando le caselle “Generate Contact Events”:
Quando usi physics.set_event_listener():
| Componente A | Componente B | Invio messaggio |
|---|---|---|
| ✅︎ | ✅︎ | Sì |
| ❌ | ✅︎ | Sì |
| ✅︎ | ❌ | Sì |
| ❌ | ❌ | No |
Quando usi il gestore di messaggi predefinito:
| Componente A | Componente B | Invio messaggi |
|---|---|---|
| ✅︎ | ✅︎ | Sì (A,B) + (B,A) |
| ❌ | ✅︎ | Sì (B,A) |
| ✅︎ | ❌ | Sì (A,B) |
| ❌ | ❌ | No |
Il messaggio "collision_response" viene inviato quando uno degli oggetti in collisione è di tipo “dynamic”, “kinematic” o “static”. Contiene i seguenti campi:
other_idhash)other_positionvector3)other_grouphash)own_grouphash)Il messaggio collision_response è adatto a gestire solo le collisioni per cui non servono dettagli sull’effettiva intersezione degli oggetti, ad esempio se vuoi rilevare se un proiettile colpisce un nemico. Per ogni coppia di oggetti in collisione viene inviato un solo messaggio di questo tipo per fotogramma.
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
Il messaggio "contact_point_response" viene inviato quando uno degli oggetti in collisione è di tipo “dynamic” o “kinematic” e l’altro è di tipo “dynamic”, “kinematic” o “static”. Contiene i seguenti campi:
positionvector3).normalvector3).relative_velocityvector3).distancenumber).applied_impulsenumber).life_timenumber).massnumber).other_massnumber).other_idhash).other_positionvector3).other_grouphash).own_grouphash).In un gioco o un’applicazione in cui devi separare perfettamente gli oggetti, il messaggio "contact_point_response" fornisce tutte le informazioni necessarie. Tuttavia, tieni presente che, per ogni coppia di oggetti in collisione, puoi ricevere diversi messaggi "contact_point_response" per fotogramma, a seconda della natura della collisione. Consulta Risoluzione delle collisioni per ulteriori informazioni.
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
Il messaggio "trigger_response" viene inviato quando uno degli oggetti in collisione è di tipo “trigger”. Il messaggio viene inviato una volta quando viene rilevata la collisione e poi una seconda volta quando gli oggetti non sono più in collisione. Contiene i seguenti campi:
other_idhash).entertrue se l’interazione è stata un ingresso nel trigger, false se è stata un’uscita. (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