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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值