2016年12月18日 星期日

Day 19: 主角表情

今天要來做主角的表情變化:主角受到傷害會轉成哭臉,接到武器會變為笑臉。不論是哭臉或笑臉都會在一秒後變回原本的表情。


表情變換其實和Day 14做的動畫大同小異。先為主角建立一個Animator,新增三個動畫片段,並把表情的Sprite拖到Animation視窗(因為哭臉和笑臉都要持續一秒鐘,所以要在Animation的0:00和1:00都拉一個sprite)。


到Animator視窗把每個狀態的Loop Time都取消掉,並新增動畫狀態轉換的箭頭。


由Any State延伸出的箭頭表示從任何動畫狀態都可以轉換成箭頭指向的狀態。當然,這必須設定左方的Parameter並用Script控制。新增兩個分別名為「Sad」和「Happy」的Trigger型態Parameter。並把從Any State連到Sad和Happy狀態的Conditions分別設為「Sad」和「Happy」。


設定好動畫轉換條件就可以寫Script了。新增一個名為「Character.cs」的Script:


public class Character : MonoBehaviour

{


    void OnTriggerEnter2D(Collider2D col)
    {

        if (col.gameObject.tag == "Enemy" || col.gameObject.tag == "Enemy Bullet") {

            GetComponent< Animator > ().SetTrigger (“Sad");
            Destroy (col.gameObject);

        }

    }

    public void GetWeapon()

    {

        GetComponent< Animator > ().SetTrigger ("Happy");

    }




}

這段程式碼非常簡單。如果主角碰到敵人或敵人子彈,就觸發Animator的「Sad」Trigger,使表情轉為傷心,並以Destroy刪除碰觸到的敵人/敵人子彈。當然,碰觸到子彈後應損失生命,但這留到之後再做,這篇著重於主角的表情轉換。


下面的public void GetWeapon(){}是給FallingWeapon.cs呼叫的。畢竟FallingWeapon.cs才是控制主角接到武器的程式碼。打開FallingWeapon.cs,在if (col.gameObject.tag == “Player”){}中新增一行

GameObject.FindGameObjectWithTag ("Player").GetComponent< Character > ().GetWeapon ();

else if (…){}中的GameObject player = …下方也新增一行

player.GetComponent< Character > ().GetWeapon ();


如此,在接到武器時,FallingWeapon.cs就會呼叫主角Game Object中Character.cs的GetWeapon()函數而轉換表情。(其實使用C#的Event和Delegate,並把轉換裝備和更換表情寫在一起是比較好的作法。因為我沒有事先規劃程式架構,想到哪就寫到哪,也不便修改之前的文章,所以寫出這種亂七八糟的程式碼……)


這幾天都沒貼繪圖進度,因為圖都畫完了,現在在想辦法弄音樂……


待續。

沒有留言 :

張貼留言