Unity3D——學習分享(九)碰撞檢測
阿新 • • 發佈:2018-12-01
在我們遊戲開發過程中,碰撞檢測函式的使用十分頻繁,比如射擊遊戲檢測子彈是否碰撞到敵人觸發敵人掉血、受傷等狀態,生存類遊戲中常見的走到門前,通過碰撞檢測來控制自動開關門等。
碰撞檢測函式
在unity的中有兩個用於碰撞檢測的函式
1. OnTriggerEnter(Collider other){
}
2. OnCollisionEnter(Collision collision){.
}
OnTriggerEnter的使用:
- 當A和B有一個物體上新增有Rigidbody元件時,只有帶Rigidbody的物體上的isTrigger被勾選後才能觸發
- 當A和B都有Rigidbody元件時,有其中一個勾選isTrigger就能觸發
OnCollisionEnter的使用:
- 當A和B有一個物體上新增有Rigidbody元件時,且有Rigidbody元件的物體去碰撞另一個物體才能觸發;
- 當A和B都有Rigidbody元件時發生碰撞時,無論是誰碰撞的誰,兩者都能觸發該方法,前提是兩者都沒有勾選isTrigger。
碰撞檢測的共同點
兩個碰撞體A和B的身上都要有碰撞體Collider(碰撞體其中的任意一種)。
注意:兩個檢測函式不能同時存在
檢測碰撞常用的的方法
-
通過碰撞器檢測碰撞
指定一個處於觸發器狀態的碰撞器,將實際檢測碰撞的物件包含進該觸發器中,即角色與觸發器之間的碰撞檢測。 -
.通過射線檢測碰撞
通過一條射線射到物體上進行觸發檢測,即從一個方向投射出一條射線,在光線長度範圍內檢測被光線射到的物體從而觸發碰撞。射線檢測程式碼如下:
private void OnTriggerEnter(Collider other){
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);//將點到地面的點轉化為射線
RaycastHit hitInfo; //碰撞資訊
bool isCollider = Physics.Raycast(ray, out hitInfo);
if (isCollider ) { //判斷是否發生碰撞
//檢測碰撞後要執行的程式碼新增在此處
}
}
下面通過碰撞器檢測方法來簡單實現一個例子。
例項的內容:一個從空中墜落的物體,在接觸到地面時進行碰撞檢測,並摧毀該物體。
實現過程:
-
建立一個球體,為其加上Rigidbody元件,並勾選Sphere Collider上的isTrigger屬性
-
建立指令碼,新增程式碼,將指令碼賦給小球
private void OnTriggerEnter(UnityEngine.Collider other)
{
Destroy(this.gameObject);
}
- 檢視執行結果