Unity3D-黑魂复刻学习-(3)实现人物行走与转向
作者:互联网
(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算出的为水平地面上的速度,直接赋值给刚体会导致忽略地心引力的影响,因此在上下坡时会发生错误。
标签:Unity3D,Dmag,transform,黑魂,行走,forward,pi,复刻,movingVec 来源: https://blog.csdn.net/weixin_44080025/article/details/96483338