iT邦幫忙

2023 iThome 鐵人賽

DAY 17
0
自我挑戰組

2D像素遊戲設計經驗分享系列 第 20

2D像素遊戲開發經驗分享 - Unity 玩家輸入讀取方法

  • 分享至 

  • xImage
  •  

我們將探索如何透過Unity遊戲引擎來實現遊戲角色的基本移動。承上一篇的內容,2D遊戲中的角色移動是一個核心概念,玩家會用第三身的角度去觀察角色並操作進行移動。

要做到角色能夠移動,首先我們要了解如何讀取玩家輸入按鈕,除了鍵盤上的箭頭鍵,還是W、A、S、D鍵,甚至是其他你設計的按鍵以及控制器上的按鈕,在 Unity 中都能夠使用,但讀取需要使用我們自己編程製作的部件 Component。所以我們可以先在場景中選擇人物,並在檢查器中輸入 Component 的命名,例如是PlayerMovement,注意名字只能有英文數字以及底線,再點選新建腳本。
https://ithelp.ithome.com.tw/upload/images/20231005/201631466h5zDeRZnW.png
https://ithelp.ithome.com.tw/upload/images/20231005/20163146ASxHKQlfoD.png

建立後,雙擊腳本檔案,即可使用 Vistual Studio 開啟並進行編輯。
https://ithelp.ithome.com.tw/upload/images/20231005/201631463HD8qdmHos.png

打開後,會發現 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 我們嘗試播放遊戲,並在打開控制台頁面後在遊戲中點擊空白鍵,應該能看到會有訊息跳出。
https://ithelp.ithome.com.tw/upload/images/20231005/201631468SGOQlmK1A.png

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 打開編輯 > 專案設定。
https://ithelp.ithome.com.tw/upload/images/20231005/20163146AdgVWofsv0.png

在輸入管理器中,我們可以看見我們有大量按鈕類型可以選擇,或者再自行增加。我們點開 Fire1,可以看見他的肯定按鈕有左Ctrl以及滑鼠左鍵兩個。
https://ithelp.ithome.com.tw/upload/images/20231005/20163146Qbt3Bo0quZ.png

我們回到 PlayerMovement 嘗試改變 Update() 的程式碼:

void Update()
    {
        if (Input.GetButton("Fire1")
            Debug.Log("Fire1測試");
    }

你會發現,在遊戲中點擊左Ctrl以及滑鼠左鍵,均會出現訊息。
https://ithelp.ithome.com.tw/upload/images/20231005/20163146EoSlCYHRV7.png


上一篇
2D像素遊戲設計經驗分享 - 橫向卷軸遊戲的基本移動設計
下一篇
2D像素遊戲開發經驗分享 - Unity 橫向遊戲的基本移動編寫(1)
系列文
2D像素遊戲設計經驗分享30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言