- Unity 教程
- Unity - 首頁
- Unity - 簡介
- Unity - 安裝和設定
- Unity - 建立精靈
- Unity - 修改精靈
- 變換和物件父子關係
- Unity - 內部資源
- Unity - 儲存和載入場景
- Unity - 基礎移動指令碼
- Unity - 理解碰撞
- Unity - 剛體和物理
- Unity - 自定義碰撞邊界
- 理解預製體和例項化
- Unity - 遊戲物件銷燬
- Unity - 協程
- Unity - 控制檯
- Unity - 音訊入門
- Unity - UI入門
- Unity - 按鈕
- Unity - 文字元素
- Unity - 滑塊
- Unity - 材質和著色器
- Unity - 粒子系統
- Unity - 使用資源商店
- Unity 有用資源
- Unity - 快速指南
- Unity - 有用資源
- Unity - 討論
Unity - 基礎移動指令碼
在本課中,我們將編寫程式碼,使遊戲物件根據使用者的輸入上下左右移動。這應該有助於我們更容易地理解 Unity 指令碼的工作流程。
記住,每個 GameObject 至少有一個元件——Transform。特別之處在於,gameObject 的 Transform 也顯示為 Unity 指令碼端的變數,因此我們可以透過程式碼修改它。但這並不侷限於 Transform;Unity 中的所有元件都具有屬性,這些屬性可以透過指令碼中的變數訪問。
讓我們從我們的移動指令碼開始。建立一個新的指令碼,並將其命名為“Movement”。
現在,開啟指令碼,你應該會看到與上一課中相同的內容。
讓我們建立一個名為speed的公共浮點型變數。在 Unity 中將變數設為public具有很大的優勢——
該變數顯示為編輯器內的可修改欄位,因此您無需手動調整程式碼中的值。
public class Movement : MonoBehaviour {
public float speed;
}
如果我們在不修改其他方法的情況下儲存此指令碼,它應該會在 Unity 中編譯。
(你可以透過右下角的
圖示看到它何時正在編譯。)
接下來,將指令碼從 Assets 拖放到 GameObject 上。如果操作正確,你應該在 GameObject 的屬性中看到以下內容——
由於速度值是可以調整的,並且不需要一直更改程式碼,我們可以使用 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。這很重要,因為較高的值會使玩家移動過快。
現在,點選播放並檢視你的第一個小遊戲!
嘗試按下箭頭鍵並四處移動。要停止遊戲,只需再次點選播放。你甚至可以即時調整速度,因此不必一直停止和啟動它。
在下一課中,我們將學習剛體和碰撞。