unity 关于添加自动导航NavMeshAgent后模型动画的抖动问题

(前提是动画本身没有问题)这个时候如果单帧观察,会发现模型发生奇怪的位移或旋转等问题,但是NavMeshAgent组件的位置没有变化,把它设置为enabled=false; 模型不再抖动。所以发现问题的所在了。。。。还需要清楚一个概念:模型动画的重力权重gravityWeight。这个值为只读变量,它由动画本身决定,比如站立等行为其值为1,跳跃等行为其值为0。

当在水平的地面上时,navmeshagent组件几乎不会和动画的重力权重冲突。但是当在倾斜的地面上时,就会发生抖动。因为此时的重力权重影响变大(值越大,重力越大)。所以就有:当由于动画重力向前下方倾斜时,navmeshagent组件又把动画拉回“原位”,于是就这样循环产生了抖动。。。。。。

至于解决办法,由于动画权重不能改变。所以只能从组件下手(控制组件的活跃),根据需要在适当时间把navmeshagent.enabled=false; 在适当时间把navmeshagent.enabled=true;

后面发现上面那个解决办法,会造成更多的问题(比如障碍物之间的互相穿过)。所以我换个角度解决:造成动画抖动主要是因为导航组件完全控制了模型的旋转。所以从这个入手,借用navmesh.updateRotation=false;把模型的旋转更新权交给自己控制,而不是导航控制。再借用navmesh.steeringTarge(这个属性Get函数返回此时导航路径的下个路径转折点的坐标),用它减去自己的世界坐标就知道了此时自己的移动方向,然后再用四元数旋转。这样再也不能产生动画抖动了,而且这样用导航组件产生对象的后退行为也容易很多。

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值