Unity - 基礎移動指令碼



在本課中,我們將編寫程式碼,使遊戲物件根據使用者的輸入上下左右移動。這應該有助於我們更容易地理解 Unity 指令碼的工作流程。

記住,每個 GameObject 至少有一個元件——Transform。特別之處在於,gameObject 的 Transform 也顯示為 Unity 指令碼端的變數,因此我們可以透過程式碼修改它。但這並不侷限於 Transform;Unity 中的所有元件都具有屬性,這些屬性可以透過指令碼中的變數訪問。

讓我們從我們的移動指令碼開始。建立一個新的指令碼,並將其命名為“Movement”。

現在,開啟指令碼,你應該會看到與上一課中相同的內容。

讓我們建立一個名為speed的公共浮點型變數。在 Unity 中將變數設為public具有很大的優勢——

  • 該變數顯示為編輯器內的可修改欄位,因此您無需手動調整程式碼中的值。

public class Movement : MonoBehaviour {
   public float speed;
}

如果我們在不修改其他方法的情況下儲存此指令碼,它應該會在 Unity 中編譯。

(你可以透過右下角的緩衝圖示看到它何時正在編譯。)

接下來,將指令碼從 Assets 拖放到 GameObject 上。如果操作正確,你應該在 GameObject 的屬性中看到以下內容——

Drag and Drop

由於速度值是可以調整的,並且不需要一直更改程式碼,我們可以使用 update() 方法而不是 start() 方法。

現在讓我們考慮 Update 方法的目標——

  • 檢查使用者輸入。

  • 如果有使用者輸入,讀取輸入方向。

  • 根據物件的速度和方向更改物件變換的位置值。為此,我們將新增以下程式碼——

void Update() {
   float h = Input.GetAxisRaw(“Horizontal”);
   float v = Input.GetAxisRaw(“Vertical”);
   
   gameObject.transform.position = new Vector2 (transform.position.x + (h * speed), 
      transform.position.y + (v * speed));

讓我們簡要討論一下這段程式碼。

首先,我們建立一個名為h(代表水平)的浮點型變數,其值由Input.GetAxisRaw方法給出。此方法根據玩家按下上/下/左/右箭頭鍵返回 -1、0 或 1。

Input 類負責以按鍵、滑鼠輸入、控制器輸入等形式獲取使用者的輸入。GetAxisRaw 方法稍微難以理解,稍後我們將詳細介紹。

接下來,我們正在更新gameObject 的位置到一個新位置,該位置透過建立一個新的Vector2來定義。Vector2 接受 2 個引數,分別是它的x 和 y值。對於 x 值,我們提供物件當前位置及其速度的總和,有效地在按下按鍵的每一幀都向其位置新增一定數量。

儲存此指令碼並返回 Unity。Unity 成功編譯後會自動更新所有指令碼,因此您無需反覆重新附加指令碼。

現在你完成了,將 GameObject 屬性中的speed值更改為例如 0.8。這很重要,因為較高的值會使玩家移動過快。

Speed Value

現在,點選播放並檢視你的第一個小遊戲!

Play

嘗試按下箭頭鍵並四處移動。要停止遊戲,只需再次點選播放。你甚至可以即時調整速度,因此不必一直停止和啟動它。

在下一課中,我們將學習剛體和碰撞。

廣告
© . All rights reserved.