檢測碰撞有兩種方式,一種是利用碰撞器,另外一種就是觸發器。
碰撞器的種類:
1.Static Collider 靜態碰撞器
指的是相互碰撞的兩個物體沒有附加剛體而只附加了Collider的游戲對象。這類對象在碰撞時會保持靜止,發生碰撞時不會觸發任何的方法函數。
2.Rigidbody Collider 剛體碰撞器
在靜態碰撞器的基礎上,處於運動狀態的物體必須要附加剛體組件和帶有碰撞檢測函數的腳本,被撞的物體可以沒有剛體組件或碰撞檢測腳本。當兩個物體發生碰撞時,帶有剛體組件的物體會發生物理特性,如被撞飛,或有摩擦力的影響下移動一段距離。
3.Kinematic Rigidbody Collider 運動學剛體碰撞器
在第2點得基礎上勾選了剛體組件中的IsKinematic屬性,在發生碰撞時能檢測到碰撞,但是勾選ISkinematic屬性的物體不會因為撞擊而發生位移,它任待在原地不動,若要想讓它發生移動,只能用transform.translate的方法。(如果要移動這類對象,就只能修改它的Transform,而不是用力)
觸發器:
這三種碰撞器如果被撞擊的物體的Collider勾選了IsTrigger復選框,就變成了相應的觸發器了,若此時該物體被撞擊,撞擊該物體的對象會穿進被撞的物體中,同時觸發void OnTriggerEnter(Collider other)方法。
碰撞器的檢測函數:(只有帶剛體的碰撞才能觸發檢測函數,而且處於運動中的物體必須帶檢測函數的腳本,other.gameObject為撞擊中的對方物體)
void OnCollisionEnter(Collision other);
void OnCollisionStay(Collision other);
void OnCollisionExit(Collision other);
觸發器的檢測函數:(任何帶有觸發器的碰撞都能觸發檢測函數)
void OnTriggerEnter(Collider other);
void OnTriggerStay(Collider other);
void OnTriggerExit(Collider other);