在Unity3D中實現簡單的碰撞檢測
要求:
當立方體Cube碰撞到地面Plane的時候,輸出碰撞物體的名稱,則表述檢測到立方體碰撞了地面。
過程:
1、搭建一個簡單的場景
a. 在新建的工程中選擇File->newScene來建立新的場景。
b. 然後在該場景中新增平面地板:GameObject->CreateOther->Plane,以及正方體:GameObject->CreateOther->Cube。
c. 給Cube新增剛體:Component->Physics->Rigidbody。新增後可以設定剛體屬性。
d. 在Project處右擊,選擇Import Package->Physic Materials。引入完成後可以直接把材質拖動到Hierarchy視窗的元件中。
有如下幾種材質:
bouncy:彈力十足的蹦蹦跳跳型。
ice:像冰塊一樣碰撞。
metal:像金屬一樣碰撞。
rubber:像橡膠一樣碰撞。
wood:像木頭一樣碰撞。
e. 然後在“Hierarchy”面板中單擊表示地板的元件。然後在Inspector中給它命名為“Ground”。然後調整他們的位置,如下:
2、建立指令碼檔案新增監聽
選擇Assets->Create->Javascript,建立JS檔案並且重新命名為“CollisionTest”。
在Project視窗中雙擊它,Unity會啟動Monodevelop來編輯js檔案。
清除裡面預設建立的程式碼。寫上。
// 函式OnCollisionEnter表示碰撞器碰撞檢測,
// 這個函式是在被繫結的物體與其他物體發生碰撞的時候被呼叫.
function OnCollisionEnter(obj:Collision)
{
Debug.Log("Collider:"+obj.collider.name+" gameObject:"+obj.gameObject.name);
}
onCollisionEnter函式:這個函式是在被繫結的物體與其他物體發生碰撞的時候被呼叫。
obj引數解釋:被撞的物體引數,型別是Collision,在本例中就是“Ground”。攜帶變數gameObject,是我們碰撞的物體。
注:指令碼檔名不能使關鍵字Collision,否則類名Collision 和Unity的內建名稱衝突。
產生錯誤資訊:Script error:OnCollisionEnter
This message parameter has to be of type:Collision
The message will be ignored.
3、將指令碼檔案拖到立方體上實現繫結
在"Project"面板中選中collisionTest.js指令碼,按住滑鼠左鍵不放,直接拖入“Hierarchy”面板中,放到Ground上,鬆開滑鼠即完成繫結。可以在右邊的Inspector面板檢視相關內容。
現在可以執行該程式了。
執行後在介面左下角會輸出:
至此一個簡單的碰撞檢測便完成了。