物體之間的碰撞,像是一顆球撞到牆壁後球被彈回來牆壁也倒了,碰撞是這樣的概念。
當碰撞發生時有三種碰撞函式 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);
}
當然,碰撞與觸發有很多狀況,以下來說明:
Collider | Rigidbody | Is Trigger | Is Kinematic | 特性 | |
A | 無任何物理性質 | ||||
B | 有 | 靜態物體,可被其他物體碰撞但本身不會被物理影響 | |||
C | 有 | 有 | 靜態物體,可被其他物體碰撞且會被物理影響 | ||
D | 有 | 有 | 靜態觸發器,物體本身不動,動態物體會直接穿透 | ||
E | 有 | 有 | 有 | 動態觸發器,物體本身有物理影響,不會有碰撞反應,但可觸發Trigger | |
F | 有 | 有 | 有 | 剛體物件,物體不受物理影響,只能透過程式改變Transform | |
G | 有 | 有 | 有 | 有 | 剛體觸發器,行為與D相同,但需要Rigidbody時使用 |
而他們互相之間有各種會碰撞及觸發的組合
觸發Collision的組合
B | C | F | |
B | 有 | ||
C | 有 | 有 | 有 |
F | 有 |
觸發Trigger的組合
B | C | D | E | F | G | |
B | 有 | 有 | ||||
C | 有 | 有 | 有 | |||
D | 有 | 有 | 有 | |||
E | 有 | 有 | 有 | 有 | 有 | 有 |
F | 有 | 有 | 有 | 有 | ||
G | 有 | 有 | 有 | 有 | 有 | 有 |
如果您喜歡我的文章,請在文章最末按5下Like!
我將得到LikeCoin的回饋:)
回饋由LikeCoin基金會出資,您只要註冊/登入帳號(FB、Google帳號都可以註冊,流程超快),按L五次左鍵,可以贊助我的文章且完全不會花到錢!
支持創作,正向交流:)
HI
回覆刪除HI~
刪除