(3)实现人物行走与转向
首先实现信号量控制状态机的变化
forward为0到1的变量,Dup和Dright都为-1到1的变量,根据直角坐标系的变化,组合出控制状态机forward值的变量Dmag,这里有一个问题Dmag的值范围为【0,根号2】,这个问题放在以后解决
其次是人物的转向,利用信号量与向量结合,就可以很简单地实现转向
//PlayerInput.cs
Dmag = Mathf.Sqrt((Dup2 * Dup2) + (Dright2 * Dright2));
Dvec = Dright2 * transform.right + Dup2 * transform.forward;
//ActorController.cs
anim.SetFloat("forward", pi.Dmag);
if (pi.Dmag > 0.1f)
{
model.transform.forward = pi.Dvec;
}
接下来是人物的行走,先给Player添加一个Rigidbody组件
在Constraints中勾上Freeze Rotation x,y,z
人物的行走这种物理特性代码应该写在Fixedupdate函数中
这里使用rigidbody进行移动,因此我们现在update函数中计算出行走的方向向量
movingVec = pi.Dmag * model.transform.forward * walkSpeed;
再在Fixedupdate实现行走
rigid.position += movingVec * Time.fixedDeltaTime; //移动
这里还有一种方式,运用刚体的速度实现行走,直接令刚体的速度为movingVec
rigid.velocity = movingVec;
这种方式有一个严重的问题,就是movingVec算出的为水平地面上的速度,直接赋值给刚体会导致忽略地心引力的影响,因此在上下坡时会发生错误。
原文地址:https://blog.csdn.net/weixin_44080025/article/details/96483338
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。