2016年12月8日 星期四

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

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

非射擊狀態:戴在頭上的狀態(每隔幾秒會進入射擊狀態)
射擊狀態:進入狀態並發射子彈(發射完回到非射擊狀態)

(動畫):由前面幾張圖片組成的動畫,而非靜態圖片


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

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


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

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


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


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


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


打開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和……應該會拿來當背景的太陽和月亮。



待續。

沒有留言 :

張貼留言