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算出的为水平地面上的速度,直接赋值给刚体会导致忽略地心引力的影响,因此在上下坡时会发生错误。

你可能感兴趣的:(Unity,Unity,黑魂)