Unity中控制人物角色的移动和旋转
发表于2018-05-22
在游戏中我们通常要控制人物角色的移动和旋转,下面就来看看人物角色的移动和旋转是怎么被分别实现出来的。
一、移动
移动的本质就是在Update()或LateUpdate()中不断修改物体的position来实现移动,移动的方法有4中:
1、transform.Translate()第一种方法与直接修改transform.position是一样的,缺点就是在有碰撞器组件的物体上时它会穿体而过
2、Rigidbody.MovePosition()第二种用于模拟物体的物理状态,比如物体受重力影响,物体被碰撞后的击飞等等。对于运动学刚体,它基于刚体的运动应用摩擦力。这个让你模拟刚体位于移动平台之上的情况
3、CharacterController.Move()模拟更复杂的运动,重力需要通过代码实现,返回值表示角色与周围的碰撞信息。
4、Rigidbody.AddForce()但这种方法力的大小需要直接不断的调整。
二、旋转
1、transform.Rotation()当然这个方法也是通过修改物体的rotation来实现
2、Rigidbody.MoveRotation()对于运动学刚体,它基于刚体的运动应用摩擦力。这个让你模拟刚体位于移动平台之上的情况
下面我只是展示了用Rigidbody.MovePosition()与Rigidbody.MoveRotation()来实现
private int Speed = 2; void Update () { float h = Input.GetAxis("Horizontal"); float v = Input.GetAxis("Vertical"); rigBody.MovePosition(this.transform.position+new Vector3(h,0,v)*Speed*Time.deltaTime); if(Input.GetAxis("Horizontal")!=0|| Input.GetAxis("Vertical")!=0) { Rotating(h,v); } } void Rotating(float horizontal, float vertical) { // 创建角色目标方向的向量 Vector3 targetDirection = new Vector3(horizontal, 0f, vertical); // 创建目标旋转值 并假设Y轴正方向为"上"方向 Quaternion targetRotation = Quaternion.LookRotation(targetDirection, Vector3.up); //函数参数解释: LookRotation(目标方向为"前方向", 定义声明"上方向") // 创建新旋转值 并根据转向速度平滑转至目标旋转值 //函数参数解释: Lerp(角色刚体当前旋转值, 目标旋转值, 根据旋转速度平滑转向) Quaternion newRotation = Quaternion.Lerp(rigBody.rotation, targetRotation, Speed * Time.deltaTime); // 更新刚体旋转值为 新旋转值 rigBody.MoveRotation(newRotation); }
如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引