iT邦幫忙

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

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

Day 19: 主角表情

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

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

http://ithelp.ithome.com.tw/upload/images/20161219/20103149RMuHwYdyYm.png

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

http://ithelp.ithome.com.tw/upload/images/20161219/201031499FKelsz40b.png

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

http://ithelp.ithome.com.tw/upload/images/20161219/20103149dLJY6ZoZfh.png

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

http://ithelp.ithome.com.tw/upload/images/20161219/20103149fNrYjWWtFu.png

設定好動畫轉換條件就可以寫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,並把轉換裝備和更換表情寫在一起是比較好的作法。因為我沒有事先規劃程式架構,想到哪就寫到哪,也不便修改之前的文章,所以寫出這種亂七八糟的程式碼……)

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

待續。


上一篇
Day 18: 少林功夫好 II
下一篇
Day 20: 生命值—UI
系列文
我要和天一樣高!!!(Unity 2D手機小遊戲開發日誌)30

尚未有邦友留言

立即登入留言