自己剛剛接觸Unity,覺得很有意思,了解了幾種觸發(fā)方式,記錄一下方便以后查閱
1.光線投射
簡單來說就是用眼神殺死你
public static bool Raycast(Vector3 origin, Vector3 direction,out RaycastHit hitInfo, float maxDistance, int layerMask = DefaultRaycastLayers, QueryTriggerInteraction queryTriggerInteraction = QueryTriggerInteraction.UseGlobal);
origin 是光源點
direction 是發(fā)出的方向
maxDistance 是光線的距離
hitInfo 如果返回值是true,它會回調(diào)出被碰撞物體的信息
layerMask 是選定當前層內(nèi)碰撞器,忽略其他層
queryTriggerInteraction 指定查詢指令是否撞擊觸發(fā)器
返回值判斷光線是否與其他物體交互
void Update () {
RaycastHit hit;
if(Physics.Raycast(transform.position,transform.forward,out hit,3.0f)){
// hit.collider.gameObject 獲取到碰撞的物體進行操作
}
}
2.角色控制器
void OnControllerColliderHit(ControllerColliderHit hit){}
只有添加角色控制器組件才會觸發(fā)這個方法, hit為碰撞的對象,例子如下
void OnControllerColliderHit(ControllerColliderHit hit){
if (hit.gameObject.tag == "playerDoor" ) { //碰撞物體的標簽
AudioSource source = hit.gameObject.GetComponent<AudioSource> ();
if(!source.isPlaying){
source.PlayOneShot (door_open_sound); //只執(zhí)行一次的音頻
}
hit.gameObject.transform.parent.GetComponent<Animator> ().Play ("dooropen");
hit.gameObject.transform.Rotate(0,90,0);
InvokeRepeating ("close", 3.0f, 3.0f); //計時器
}
}
3.OnTriggerEnter
只要兩者有一個勾選Is Trigger 選項, 在碰撞范圍內(nèi)并且有一個有剛體組件就會觸發(fā) OnTriggerEnter方法,
可以調(diào)節(jié)觸發(fā)范圍的大小,來達到你想要的碰撞范圍
void OnTriggerEnter(Collider col){
if (col.gameObject.tag == "Player") {
col.gameObject.SendMessage ("cellPickup");//觸發(fā)col.gameObject的方法
Destroy (gameObject);//銷毀
}
}
4.OnCollisionEnter
只有都沒有勾選Is Trigger 選項,并且發(fā)起的碰撞的一方要有剛體,就會觸發(fā)此方法
void OnCollisionEnter(Collision collision){
// print (GetComponent<wupin>().count);
print ("剛體碰撞");
}
如果想實現(xiàn)兩個剛體物理的實際碰撞效果時候用OnCollisionEnter,Unity引擎會自動處理剛體碰撞的效果脊髓。
如果想在兩個物體碰撞后自己處理碰撞事件用OnTriggerEnter赘被。
以上是自己學習了解到的 ,如有不對請大神們指出來