首页 > 代码库 > unity CharactorController下Move()官方示例下跳跃时主角无法移动操作问题。
unity CharactorController下Move()官方示例下跳跃时主角无法移动操作问题。
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()官方示例下跳跃时主角无法移动操作问题。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。