轉載注明出處 m_f_s
public float speed = 6.0F; public float jumpSpeed = 8.0F; public float gravity = 20.0F; public float verVel = 0; //vertical velocity private Vector3 moveDirection = Vector3.zero; void Update() { CharacterController controller = GetComponent<CharacterController>(); moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")); moveDirection = transform.TransformDirection(moveDirection); moveDirection *= speed; if (controller.isGrounded) { if (Input.GetButton("Jump")) moveDirection.y = jumpSpeed; } verVel = -= gravity * Time.deltaTime; moveDirection.y = verVel; controller.Move(moveDirection * Time.deltaTime); }
上面是官方給出的例子,由於檢測移動是只能在地面上才能用,所以要將檢測移動的代碼移出至判定外。 但是將判定位移移出后Y軸將會一直為0,所以需要定義一個變量用來計算當前Y軸方向速度。
修改后代碼:
public float speed = 6.0F; public float jumpSpeed = 8.0F; public float gravity = 20.0F; private Vector3 moveDirection = Vector3.zero; void Update() { CharacterController controller = GetComponent<CharacterController>(); if (controller.isGrounded) { moveDirection = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")); moveDirection = transform.TransformDirection(moveDirection); moveDirection *= speed; if (Input.GetButton("Jump")) moveDirection.y = jumpSpeed; } moveDirection.y -= gravity * Time.deltaTime; controller.Move(moveDirection * Time.deltaTime); }