Unity3D碰撞檢測的方法

2021-10-04 20:29:39 字數 1699 閱讀 9724

1.需要在碰撞物體上加collider,如果將collider的istrigger打上勾的話就可以使用如下方法:

private void ontriggerenter(collider other) //檢測函式,並將檢測的結果放入other變數中.

}離開碰撞區域的函式如下:

private void ontriggerexit(collider other1)

}如果沒有勾選istrigger的話使用oncollisionenter方法

注意:

oncollisionenter方法必須是在兩個碰撞物體都不勾選istrigger的前提下才能進入,反之只要勾選乙個istrigger那麼就能進入ontriggerenter方法。

oncollisionenter方法要求碰撞的發起方必須擁有剛體,而被碰撞方有沒有剛體並不重要。ontriggerenter方法則對此沒有要求,只需要碰撞雙方有乙個具有剛體即可觸發。即剛體是乙個判斷是否實現碰撞的是與否的標誌。

2.射線檢測

①滑鼠發出射線

ray ray = camera.main.screenpointtoray(input.mouseposition);

raycasthit hit;

if (physics.raycast(ray,out hit))

②物體發出射線

ray myray = new ray(transform.position, (transform.position + transform.forward * 3));

raycasthit hit; //建立raycasthit型變數,用於存放射線碰撞資訊

//發設一條射線,myray距離3長,碰撞到的物體資訊存放在hit中,放在下面進行判斷。

if (physics.raycast(myray,out hit,3))}}

3.使用physics.overlapbox來判斷碰撞

exp:

vector3 modelorgin1 = model.transform.position;

vector3 modelorigin2 = modelorgin1 + new vector3(0, 1, 0);

vector3 boxcenter = modelorigin2 + model.transform.forward * 5.0f;

collider cols = physics.overlapbox(boxcenter, new vector3(0.5f, 0.5f, 5f), model.transform.rotation, layermask.getmask(isai?「player」:「enemy」));

if (cols.length == 0)

else

foreach (var col in cols)

lockprocessa(new locktarget(col.gameobject, col.bounds.extents.y),true,true,isai);

= camera.main.worldtoscreenpoint(locktarget.transform.position);

break;}}

備註:見官方文件

4.取得遊戲物件上 charactercontroller元件的控制權,再利用碰撞語句檢測是否發生碰撞.**如下:

bool grounded=false;

void upda()

unity3d碰撞檢測

具體的一些,可以看 unity3d的 manual refrernce的東西,有幾個 在後面可以參考 幾個型別碰撞器 1.靜態碰撞器 就是只有碰撞器,但沒有剛體的 2.剛體碰撞器 帶rigidbody的碰撞器,這個是最基本的碰撞器 3.運動學剛體碰撞器 帶rigidbody,而且rigidbody的...

Unity3d 碰撞檢測

unity3d 主要由trigger和collison 兩種碰撞檢測 1 檢測trigger 雙方都有collider。雙方至少有乙個rigidbody 任意一方都可以 有乙個trigger 任意一方都可以 若只有乙個rigidbody,則碰撞時,該rigidbody一定要是運動的。碰撞後發出的on...

Unity 3D碰撞檢測

被呼叫的函式 碰撞器與觸發器 被呼叫的函式 以上兩個碰撞不能將各自的函式或引數改變,否則將出現以下錯誤 在unity3d中節點加入某某collider 2d元件則這個節點就是碰撞器 碰撞器分類 1.box collider 2d 矩形碰撞器 2.circle collider 2d 圓形碰撞器 3....