2019年6月29日 星期六

[Unity] Collision碰撞 與 Trigger 觸發

當有了Rigidbogy 剛體與Collider 碰撞體這些觸發條件後,接著就要來設定接收各種的碰撞及觸發狀況,這時候就需要Collision 碰撞與Trigger 觸發了。
物體之間的碰撞,像是一顆球撞到牆壁後球被彈回來牆壁也倒了,碰撞是這樣的概念。

當碰撞發生時有三種碰撞函式 OnCollisionEnter()、OnCollisionStay()及OnCollisionExit(),而且在使用時要記得OnCollisionEnter()要加入OnCollisionEnter(Collision collision)來接收與本身物件發生碰撞的物件。Enter是當物件碰撞的瞬間,Stay是正在碰撞狀況,Exit則是離開碰撞。

使用方法:
void OnCollisionEnter(Collision collision)
{
        Destroy(collision.gameObject); //這段的用法是當發生碰撞後摧毀對方物件
}

而觸發的概念就像Mario 馬力歐過關時穿過旗子卻不被物理影響時的狀況。
Trigger 也有三種函式,OnTriggerEnter()、OnTriggerStay()及OnTriggerExit(),也要給它接收對方物件OnTriggerEnter(Collider other),

使用方法:
void OnTriggerEnter(Collider other)
{
        Destroy(other.gameObject);
}


當然,碰撞與觸發有很多狀況,以下來說明:
ColliderRigidbodyIs TriggerIs Kinematic特性
A無任何物理性質
B靜態物體,可被其他物體碰撞但本身不會被物理影響
C靜態物體,可被其他物體碰撞且會被物理影響
D
靜態觸發器,物體本身不動,動態物體會直接穿透
E
動態觸發器,物體本身有物理影響,不會有碰撞反應,但可觸發Trigger
F剛體物件,物體不受物理影響,只能透過程式改變Transform
G剛體觸發器,行為與D相同,但需要Rigidbody時使用

而他們互相之間有各種會碰撞及觸發的組合
觸發Collision的組合

BCF
B

C
F


觸發Trigger的組合

BCDEFG
B



C


D


E
F

G



如果您喜歡我的文章,請在文章最末按5下Like!
我將得到LikeCoin的回饋:)

回饋由LikeCoin基金會出資,您只要註冊/登入帳號(FB、Google帳號都可以註冊,流程超快),按L五次左鍵,可以贊助我的文章且完全不會花到錢!
支持創作,正向交流:)

2 則留言: