iT邦幫忙

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

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

Day 9: 製作其他裝備、避免重複穿戴裝備、Animation

(本篇文章網誌版:http://shineright.blogspot.tw/2016/12/day-9-animation.html)

今天要繼續做其他裝備的Prefab。但在這之前,先來介紹各項裝備:

非射擊狀態:戴在頭上的狀態(每隔幾秒會進入射擊狀態)
射擊狀態:進入狀態並發射子彈(發射完回到非射擊狀態)
(動畫):由前面幾張圖片組成的動畫,而非靜態圖片
http://ithelp.ithome.com.tw/upload/images/20161209/20103149POyeP8fmJC.pnghttp://ithelp.ithome.com.tw/upload/images/20161209/20103149YAGzUG2skR.pnghttp://ithelp.ithome.com.tw/upload/images/20161209/20103149jNS3JK538O.pnghttp://ithelp.ithome.com.tw/upload/images/20161209/201031491zj8jJwVal.pnghttp://ithelp.ithome.com.tw/upload/images/20161209/20103149C4j7x69BKi.pnghttp://ithelp.ithome.com.tw/upload/images/20161209/20103149Tm0AVcNgz0.pnghttp://ithelp.ithome.com.tw/upload/images/20161209/20103149sl0uX9Qxl0.png

其中比較特別的是「綠帽」、「爆炸頭」和「少林功夫好」。爆炸頭和綠帽的子彈會隨著主角左右移動而跟著移動,不像其他子彈會沿著射出方向前進。而「少林功夫好」有一半的機率可以得到免疫十次傷害的防護罩(鐵頭功),另外一半的機率得到無用的金鋼腿。

昨天,我已完成穿戴死亡之帽的機制了。除了「竹蜻蜓」和「少林功夫好」之外,製作其他裝備的方式一模一樣,這裡不贅述。

http://ithelp.ithome.com.tw/upload/images/20161209/20103149fPL4oHYXnV.png

竹蜻蜓不一樣之處在於它是個動畫,而非單一圖片。在Unity製作動畫非常簡單,把要製作成動畫的其中一張Sprite從Project欄中拉到Scene上,再到Unity Editor最上方的Windows選單,選Animation,把Animation視窗打開並拖至Scene或Game視窗旁邊,成為固定視窗。按Create (確定在Hierarchy或Scene中要選取先前拉出來的sprite),Unity Editor會跳出一個選擇動畫儲存位置的選單,在Assets資料夾底下新建一個Animations資料夾來來儲存動畫。

儲存完成後,Animation視窗會出現一格一格的影格。直接在Project欄把組成動畫中的每一張圖片拉到Animation視窗的影格上,並調整時間長短。

http://ithelp.ithome.com.tw/upload/images/20161209/20103149yw7LkpeiBH.png

進入Play Mode測試一下,竹蜻蜓會轉動了!用同樣的方式把竹蜻蜓的降落傘做好。

http://ithelp.ithome.com.tw/upload/images/20161209/20103149zDO3A6F9u1.png

「少林功夫好」比較特別,當主角接到頭巾時,穿戴在頭上的頭巾有兩種可能,分別是「鐵頭功」或「金鋼腿」。不過,其實製作方法也和前面所有裝備一模一樣,因為可以在產戴生裝備那一刻再以Script決定裝備的行為與顯示的Sprite。之後的文章會詳細說明如何完成「少林功夫好」。今天就先讓戴上的頭巾也顯示「少林功夫好」,用之前的方法完成降落傘和戴到頭上的Prefab。以下為製作完成的Prefab:

http://ithelp.ithome.com.tw/upload/images/20161209/201031498nyIGVHs0w.png

進入Play Mode測試一下,會發現一個非常大的問題:如果主角已經戴上一個裝備,當他接到下一個裝備,新的裝備會疊在前一個裝備上方,使他同時擁有兩個裝備。

http://ithelp.ithome.com.tw/upload/images/20161209/20103149cjCVz0m4gz.png

打開FallingWeapon.cs,修改程式碼以解決這個問題,註解處為新增的程式碼。

public class FallingWeapon : MonoBehaviour 
{
	//新增static變數,儲存現在主角戴有的裝備
    static GameObject currEquippedWeapon = null;
    
    public GameObject weaponPrefab;
    void OnTriggerEnter2D(Collider2D col)
    {
        if (col.gameObject.tag == "Player") {
			//新增if條件式,若主角已戴有裝備,將其移除
            if (currEquippedWeapon != null)
                Destroy (currEquippedWeapon);
                
            GameObject weapon = (Instantiate (weaponPrefab, new Vector3(col.gameObject.transform.position.x, col.gameObject.transform.position.y, -0.1f), Quaternion.identity) as GameObject);
            weapon.transform.parent = col.gameObject.transform;
            
			//新增。把接到的裝備存至currEquippedWeapon,供下次接到裝備時Destroy
			currEquippedWeapon = weapon;
            
            Destroy (gameObject);
        }
    }
}

先為這個類別宣告一個初始值為nullstatic變數,以記錄當下主角穿戴的裝備,若主角沒有穿戴裝備,則設定為null

接著,在if (col.gameObject.tag == “Player”)判斷式中,加入移除先前裝備的程式碼:Destroy(currEquippedWeapon)。但在這之前,必須先檢查主角是否已穿戴裝備,即currEquippedWeapon != null,若不檢查,則有可能Destroy到不存在的Game Object (即null)。

最後,在Destroy(gameObject)前加入currEquippedWeapon = weapon,使現在接到的裝備存入currEquippedWeapon變數中,之後接到新裝備就可輕易移除了。

存檔,回到Unity Editor,進入Play Mode,現在可以順利接取、穿戴並替換掉落的裝備了。

繪圖進度

畫一點UI和……應該會拿來當背景的太陽和月亮。
http://ithelp.ithome.com.tw/upload/images/20161209/20103149aNRWKyiCYu.png

待續。


上一篇
Day 8: 穿戴裝備——Prefab & Instantiate
下一篇
Day 10: 隨機掉落裝備——Coroutine
系列文
我要和天一樣高!!!(Unity 2D手機小遊戲開發日誌)30

尚未有邦友留言

立即登入留言