(原創)unity CharactorController下Move()官方示例下跳躍時主角無法移動操作問題。


轉載注明出處   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);
    }

 


原創:http://www.cnblogs.com/m-f-s/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM