微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐