1. 程式人生 > >在Unity3D中實現簡單的碰撞檢測

在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面板檢視相關內容。


現在可以執行該程式了。

執行後在介面左下角會輸出:


至此一個簡單的碰撞檢測便完成了。