(本篇文章網誌版:http://shineright.blogspot.tw/2016/12/day-9-animation.html)
今天要繼續做其他裝備的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);
}
}
}
先為這個類別宣告一個初始值為null
的static
變數,以記錄當下主角穿戴的裝備,若主角沒有穿戴裝備,則設定為null
。
接著,在if (col.gameObject.tag == “Player”)
判斷式中,加入移除先前裝備的程式碼:Destroy(currEquippedWeapon)
。但在這之前,必須先檢查主角是否已穿戴裝備,即currEquippedWeapon != null
,若不檢查,則有可能Destroy
到不存在的Game Object (即null
)。
最後,在Destroy(gameObject)
前加入currEquippedWeapon = weapon
,使現在接到的裝備存入currEquippedWeapon
變數中,之後接到新裝備就可輕易移除了。
存檔,回到Unity Editor,進入Play Mode,現在可以順利接取、穿戴並替換掉落的裝備了。
畫一點UI和……應該會拿來當背景的太陽和月亮。
待續。