我們將探索如何透過Unity遊戲引擎來實現遊戲角色的基本移動。承上一篇的內容,2D遊戲中的角色移動是一個核心概念,玩家會用第三身的角度去觀察角色並操作進行移動。
要做到角色能夠移動,首先我們要了解如何讀取玩家輸入按鈕,除了鍵盤上的箭頭鍵,還是W、A、S、D鍵,甚至是其他你設計的按鍵以及控制器上的按鈕,在 Unity 中都能夠使用,但讀取需要使用我們自己編程製作的部件 Component。所以我們可以先在場景中選擇人物,並在檢查器中輸入 Component 的命名,例如是PlayerMovement,注意名字只能有英文數字以及底線,再點選新建腳本。
建立後,雙擊腳本檔案,即可使用 Vistual Studio 開啟並進行編輯。
打開後,會發現 Unity 已經為我們建立一些基本的程式碼:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
}
}
簡單一點的理解,Start()是當這個遊戲物件以及這個部件在遊戲中被激活時會第一時間執行,之後的每一幀遊戲幀都會執行 Update() 。所以,要檢查玩家有沒有進行輸入,我們需要每一幀都進行檢查,程式碼亦需在在 Update() 中編寫。
而檢查的方法,我們主要有 GetKey() 與 GetButton() 兩個方法。GetKey() 是直接使用 KeyCode,即直接檢查某個按鍵是否有被按下,我們可以利用以下的程式碼進行嘗試:
void Update()
{
if (Input.GetKey("space"))
Debug.Log("空白鍵測試");
}
儲存程式碼後,在 Unity 我們嘗試播放遊戲,並在打開控制台頁面後在遊戲中點擊空白鍵,應該能看到會有訊息跳出。
Debug.Log() 的內容都會顯示在控制台中讓我們進行除錯,然後各位亦會發現即使只按了一次空白鍵,訊息也會跳出不只一條,那是因為 GetKey() 是只要按鍵被按住時就會觸發,如果只要單次被按下或者鬆開時觸發,我們可以利用 GetKeyDown() 以及 GetKeyUp():
void FixedUpdate()
{
if (Input.GetKey("space"))
Debug.Log("空白鍵測試");
if (Input.GetKeyDown("a"))
Debug.Log("A鍵按下測試");
if (Input.GetKeyUp("d"))
Debug.Log("D鍵鬆開測試");
}
如果程式觸發多於一次,可以嘗試把 Update() 改成 FixedUpdate()。
而另一個 GetButton() 則是一般更為推薦使用,在 Unity 專案中我們可以設定多於一個按鈕或者方法去進行同一種的輸入,例如 ASDW 和方向鍵同時可以作為角色移動使用,或者手把上的搖桿也可以同樣進行操作等。我們可以先在 Unity 打開編輯 > 專案設定。
在輸入管理器中,我們可以看見我們有大量按鈕類型可以選擇,或者再自行增加。我們點開 Fire1,可以看見他的肯定按鈕有左Ctrl以及滑鼠左鍵兩個。
我們回到 PlayerMovement 嘗試改變 Update() 的程式碼:
void Update()
{
if (Input.GetButton("Fire1")
Debug.Log("Fire1測試");
}
你會發現,在遊戲中點擊左Ctrl以及滑鼠左鍵,均會出現訊息。