Unity學習筆記(二) 碰撞檢測與觸發檢測
- 正好看到了Roll a ball這個遊戲,於是就溫故一下碰撞檢測和觸發檢測
1.前期準備
中間省去建造一些基礎的物體的過程,最後呈現如下圖 我們的主角就是中間的球體 其GameObject名為player,我們在其身上添上剛體元件(Rigidbody)使其可以進行物理移動
其次,我們再建立一個Move指令碼用來控制球體的移動
private Rigidbody rgd;
public float speed = 5;
void Start () {
rgd = GetComponent<Rigidbody>(); //獲取球體上的剛體元件
}
void Update () {
float h = Input.GetAxis("Horizontal");//水平方向 對應← →
float v = Input.GetAxis("Vertical"); //垂直方向 對應↑ ↓
rgd.AddForce(new Vector3(h, 0, v) * speed);//給剛體施加一個力就可以運動了,新增一個方向即可
}
最後,我們還要給要給那些Cube附上標籤以便我們訪問它們
2.碰撞檢測
- 關於碰撞檢測,我們主要用到以下三個函式(Unity自帶)
OnCollisionEnter、OnCollisionExit、OnCollisionStay 其解釋我們參考官網API
我們這邊主要用到OnCollisionEnter 將以下程式碼加入到Move指令碼中
private void OnCollisionEnter(Collision collision)
{
if(collision.collider.tag=="pick up")
{
Destroy(collision.collider.gameObject);
}
}
這邊很容易理解,collision.collider可以獲取球體碰撞到的物體碰撞元件,只要其標籤和我們之前設定的”pick up”一樣即為我們所要碰撞檢測的,當我們碰到後就消失物體
結果如下圖: 不難看出,當我們球體撞到Cube上時雖然Cube消失了,但是還是有物理碰撞減速的影子,這就是碰撞機的缺點,無法使物理效果刪除,所以為了更好的實現,我們接下來使用觸發檢測去完美解決
3.觸發檢測
- 觸發檢測和碰撞檢測類似有三個功能函式
OnTriggerEnter、OnTriggerExit、OnTriggerStay 其定義和Collider類似 我們在使用觸發檢測的時候,需要將需要被觸發檢測的物體上勾選上Is Trigger,這裡就是Cube物體 我們此時可以先執行一下看一下觸發器效果 可以很明顯看到球體直接穿過Cube物體了,此時不會引起物理碰撞,然後我們再新增如下程式碼即可彌補之前的一點瑕疵
private void OnTriggerEnter(Collider other)
{
if(other.tag=="pick up")
{
Destroy(other.gameObject);
}
}
我們將其執行可以得到如下圖 是不是一點生硬的感覺都沒有了!
4.總結
個人認為觸發檢測更多的是用來觸發類似機關這類時使用,不需要物理碰撞,比如某個人走到一扇門前面此時就可以用觸發檢測來觸發某些事件。而碰撞檢測Emmmmm感覺實用性不是特別大吧…有什麼其他問題歡迎評論和我討論,新手初學,一起進步!