iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 6
0
自我挑戰組

我要和天一樣高!!!(Unity 2D手機小遊戲開發日誌)系列 第 6

Day 6: 接取掉落的裝備——OnTriggerEnter2D & Tag

接續昨日,來完成主角接取掉落裝備的機制。

把降落傘和巫師帽拖到Scene,然後在Hierarchy欄新增一個空的Game Object (Create→Create Empty)。在Scene視窗把空的Game Object拖到降落傘和帽子的中央,再到Hierarchy欄把降落傘和帽子拉到新的Game Object上,成為新的Game Object的子物件(調整降落傘或帽子Transform Component中的Z座標可以設定他們在前方或後方,-Z是向前,+Z是向後)。如此一來,帽子和降落傘就可被視為一個整體,使他們一起往下落、一起偵測是否碰到主色身上的Box Collider 2D。

http://ithelp.ithome.com.tw/upload/images/20161206/20103149LY4lLmBW7D.png

當然,要偵測自身是否碰到另一個Collider 2D,Game Object自己也要有Collider 2D Component。替剛剛新建的Game Object (包含降落傘和帽子的Game Object)加上一個Box Collider 2D Component。和之前一樣,用「Edit Collider」鈕調整Collider的範圍,並勾選「Is Trigger」欄。

現在,當遊戲的主角和掉落的裝備都有Collider 2D Component,就可以在Script中輕易地偵測兩個Collider 2D是否相互碰觸了。

在Script資料夾新建一個名為「FallingWeapon.cs」的C# Script。在類別中加入下面的函數,並在掉落裝備的Game Object新增FallingWeapon (Script) Component:

void OnTriggerEnter2D(Collider2D col) 
{
    if (col.gameObject.tag == "Player") {
        print ("接到了!");
    }
}

這個void OnTriggerEnter2D(Collider2D col)也是眾多Unity Event Function的其中一個。每當有其他Collider 2D (不論是否為Trigger)進入該Game Object的Trigger(勾有Is Trigger的Collider 2D Component)時,便會呼叫該函數,並傳入接觸Trigger的Collider 2D Component為參數。

col.gameObject可以得到擁有該Collider 2D Component的Game Object,而col.gameObject.tag則可獲知該Game Object的Tag為何。上面的程式碼以if判斷式來檢查進入Trigger的Game Object是否被tag為”Player”,如果是,則在Console中印出「接到了」,表示偵測成功(實際穿戴裝備留到之後再做)。

但究竟什麼是Tag呢?在Unity,每個Game Object都可以擁有一個標籤,也就是tag。使用者可以自行增加tag的名稱,或使用Unity內建的Tag名稱。而Tag的用處是方便使用者在Script中檢查Game Object是不是他要的目標,或是在擁有眾多Game Object的場景裡找尋他所要的Game Object (呼叫GameObject.FindWithTag()函數,之後會用到)。

回到Unity的Hierarchy欄,點擊主角,然後在Inspector的Tag選單中選「Player」,如此遊戲的主角就被標籤為「Player」了。

http://ithelp.ithome.com.tw/upload/images/20161206/20103149hEDC1WoaHX.png

在進入Play Mode測試之前,還有件相當重要的事情:要使OnTriggerEnter2D()生效,定義這個函數的Game Object必須擁有Rigidbody 2D Component。回到「掉落裝備」Game Object的Inspector欄,按Add Component→Physics 2D→Rigidbody 2D。在Rigidbody 2D Component勾選「Is Kinematic」欄。

http://ithelp.ithome.com.tw/upload/images/20161206/20103149BJlVTuAouz.png

增加Rigidbody 2D Component通常是為了使Game Object受到物理作用力(如地心引力)的影響,然而我新增Rigidbody 2D Component存粹是為了使OnTriggerEnter2D這個函數生效。勾選「Is Kinematic」欄,使該Game Object忽略所有的作用力。

設定完Rigidbody 2D後,進入Play Mode。把掉落裝備拉至主角身上,Console便會成功顯示「接到了!」的訊息。

http://ithelp.ithome.com.tw/upload/images/20161206/2010314945171fZ3WT.png

繪圖進度

終於把開場動畫做完了(雖然不是很滿意),並畫了一些攻擊主角的敵人。

http://ithelp.ithome.com.tw/upload/images/20161206/20103149zny9ABUoV4.png

待續。


上一篇
Day 5: Game Object & Component
下一篇
Day 7:裝備掉落——Random & Destroy
系列文
我要和天一樣高!!!(Unity 2D手機小遊戲開發日誌)30

尚未有邦友留言

立即登入留言