[Unity] 3D 角色移動鍵盤控制腳本

發表於

Unity

一般來說,要控制角色移動的話我們通常都會使用 transform.position 加減換算或 rigidbody.MovePosition。而今天我在 Unity 官方提供的遊戲範本中找到了一個還蠻好用的鍵盤控制腳本,特此紀錄一下。

操作紀錄

第一步 先建一個 PlayerInputHandler.cs,加入 GetMoveInput 函式。

public Vector3 GetMoveInput() {
    Vector3 move = new Vector3(Input.GetAxisRaw("Horizontal"), 0f, Input.GetAxisRaw("Vertical"));
    move = Vector3.ClampMagnitude(move, 1);
    return move;
}

第二步 再建一個 PlayerController.cs,加入以下程式碼。

public float moveSpeed;
CharacterController m_Controller;
PlayerInputHandler m_InputHandler;
Vector3 characterVelocity;
private void Start() {
    m_Controller = GetComponent<CharacterController>();
    m_InputHandler = GetComponent<PlayerInputHandler>();
}
private void Update() {
    HandleMovement();
}
private void HandleMovement() {
    Vector3 worldspaceMoveInput = transform.TransformVector(m_InputHandler.GetMoveInput());
    Vector3 targetVelocity = worldspaceMoveInput * moveSpeed;
    characterVelocity = Vector3.Lerp(characterVelocity, targetVelocity, 0.5f);
    m_Controller.Move(characterVelocity * Time.deltaTime);
}

最後將這兩個腳本帶入遊戲角色物件,Move Speed 填入 10,並加入一個 Character Controller Component,完成。

相關文檔:


遊戲開發這系列的文章,依據我個人的學習進度隨時有可能會進行修正,如果有相關話題也歡迎留言討論。