標籤:input direct control getc new style har 檢測 log
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); }
上面是官方給出的例子,由於檢測移動是只能在地面上才能用,所以要將檢測移動的代碼移出至判定外。 但是將判定位移移出後Y軸將會一直為0,所以需要定義一個變數用來計算當前Y軸方向速度。
修改後代碼:
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); }
原創:http://www.cnblogs.com/m-f-s/
unity CharactorController下Move()官方樣本下跳躍時主角無法移動操作問題。