unity CharactorController下Move()官方示例下跳跃时主角无法移动操作问题。
Posted m_f_s
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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); }
以上是关于unity CharactorController下Move()官方示例下跳跃时主角无法移动操作问题。的主要内容,如果未能解决你的问题,请参考以下文章
Unity3D资源文件 ③ ( Unity 资源包简介 | 导出 Unity 资源包 | 导出资源包的包含依赖选项 | 导入 Unity 资源包 | Unity 资源商店 )