A、基本概念
要產生碰撞必須為游戲對象添加剛體(Rigidbody)和碰撞器,剛體可以讓物體在物理影響下運動。碰撞體是物理組件的一類,它要與剛體一起添加到游戲對象上才能觸發碰撞。如果兩個剛體相互撞在一起,除非兩個對象有碰撞體時物理引擎才會計算碰撞,在物理模擬中,沒有碰撞體的剛體會彼此相互穿過。

下面就是我做的測試情況,都是A物體去撞B物體。
一、A(碰撞體),B(沒有碰撞體,無論有沒有剛體),沒有觸發事件。
二、A(碰撞體),B(碰撞體),沒有觸發事件。
二、A(碰撞體和剛體,開啟IsTrigger),B(碰撞體,關閉IsTrigger),雙方都能收到觸發事件。
三、A(碰撞體和剛體,關閉IsTrigger),B(碰撞體,開啟IsTrigger),雙方都能收到觸發事件。
四、A (碰撞體,關閉IsTrigger),B(碰撞體和剛體,開啟IsTrigger),沒有觸發事件。
五、A (碰撞體,開啟IsTrigger),B(碰撞體和剛體,關閉IsTrigger),沒有觸發事件。
額外實驗:
六、A(碰撞體和剛體,開啟IsTrigger)自由下落,B(碰撞體)撞擊A,雙方都能收到觸發事件。
根據上面的實驗得出,如果要收到觸發事件,必須滿足如下三個條件:
1、必須都要有碰撞器組件(Collider),其實上面的碰撞事件同樣也需要這個前提條件。
2、必須有一個物體帶剛體組件,並且處於運動狀體中(包括主動運動去撞擊別人和在運動過程中被別人撞擊)。
3、兩個碰撞器中至少有一個開啟了IsTrigger。
此外還有兩點:
一、產生觸發事件的兩個物體會相互穿越,准確的說是因為開啟IsTrigger那個物體會被物理引擎鎖忽略掉,所以會產生兩個物體穿越的情況。
二、兩個對象要么都收到碰撞事件,要么都收到觸發事件,不會出現一個收到觸發事件,一個收到碰撞事件的情況。
還有一個經驗點就是,在控制一個物體A去撞另一個物體B時,不要直接去修改物體A的Transform的position屬性,因為你會發現如果即使兩者發生了碰撞也還是會穿越的,原因就在於我們是直接設置的坐標,如果物體A有剛體組件的話,應該用AddForce,給物體添加一個力,然后讓物理引擎去讓物體動,此時如果發生了碰撞的話,就不會穿越了。
碰撞的效果:
移動的剛體碰撞器VS靜止的靜態碰撞器
移動的剛體碰撞器VS靜止的剛體碰撞器
移動的靜態碰撞器VS靜止的運動學剛體碰撞器
移動的運動學剛體碰撞器VS靜止的靜態碰撞器
移動的運動學剛體碰撞器VS靜止的剛體碰撞器
移動的剛體碰撞器VS靜止的運動學剛體碰撞器
移動的運動學剛體碰撞器VS靜止的運動學剛體碰撞器
碰撞信息和觸發信息
Collision detection occurs and messages are sent upon collision 碰撞后有碰撞檢測並有碰撞信息發出 |
||||||
Static Collider 靜態碰撞器 |
Rigidbody Collider 剛體碰撞器 |
Kinematic Rigidbody Collider 運動學剛體碰撞器 |
Static Trigger Collider 靜態觸發碰撞器 |
Rigidbody Trigger Collider 剛體觸發碰撞器 |
Kinematic Rigidbody Trigger Collider 運動學剛體觸發碰撞器 |
|
Static Collider 靜態碰撞器 | Y | |||||
Rigidbody Collider 剛體碰撞器 | Y | Y | Y | |||
Kinematic Rigidbody Collider 運動學剛體碰撞器 |
Y | |||||
Static Trigger Collider 靜態觸發碰撞器 |
||||||
Rigidbody Trigger Collider 剛體觸發碰撞器 |
||||||
Kinematic Rigidbody Trigger Collider 運動學剛體觸發碰撞器 |
Trigger messages are sent upon collision 碰撞后有觸發信息 |
||||||
Static Collider 靜態碰撞器 |
Rigidbody Collider 剛體碰撞器 |
Kinematic Rigidbody Collider 運動學剛體碰撞器 |
Static Trigger Collider 靜態觸發碰撞器 |
Rigidbody Trigger Collider 剛體觸發碰撞器 |
Kinematic Rigidbody Trigger Collider 運動學剛體觸發碰撞器 |
|
Static Collider 靜態碰撞器 | Y | Y | ||||
Rigidbody Collider 剛體碰撞器 | Y | Y | Y | |||
Kinematic Rigidbody Collider 運動學剛體碰撞器 |
Y | Y | Y | |||
Static Trigger Collider 靜態觸發碰撞器 | Y | Y | Y | Y | ||
Rigidbody Trigger Collider 剛體觸發碰撞器 |
Y | Y | Y | Y | Y | Y |
Kinematic Rigidbody Trigger Collider 運動學剛體觸發碰撞器 |
Y | Y | Y | Y | Y | Y |