关于人物追踪时动画

总体思路为,
//首先查看期望速度,期望速度是否为0,若为0,设置移动速度和转向速度都为0;
//再看在期望速度不为0时,
//为保证动画流畅,在期望速度与自身朝向大于90度时将移动速度设置为0,只改变转向速度。
//而在正常情况下的,小于90度时,两个速度均改变。
//改变移动速度大小使用期望速度在自身速度的投影。
//改变转向速度大小使用角度大小的弧度制,来根据相差角度大小对应设置需要转向速度的大小。

  nav = this.GetComponent<NavMeshAgent>();
    ani = this.GetComponent<Animator>();
void Update () {
if(nav.desiredVelocity==Vector3.zero)
            {
                ani.SetFloat("robotspeed",0);
                ani.SetFloat("robotturn", 0);
            }
 else
            {
                float angle = Vector3.Angle(transform.forward, nav.desiredVelocity);
                float anglerad = 0f;
                Vector3 projection=Vector3.zero;
                Vector3 crossres = Vector3.Cross(transform.forward, nav.desiredVelocity);
                if (angle>90)
                {
                    ani.SetFloat("robotspeed" , 0/*,0.5f, Time.deltaTime*/);
                }
                else
                {
                    projection = Vector3.Project(nav.desiredVelocity, transform.forward);
                    ani.SetFloat("robotspeed", projection.magnitude/*, 1f, Time.deltaTime*/);
                }
                anglerad = angle * Mathf.Deg2Rad;
                if (crossres.y < 0)
                {
                    anglerad = -anglerad;
                }
                ani.SetFloat("robotturn", anglerad* 2f, 1f, Time.deltaTime);
            }
     }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值