Unity3D中CapsuleCollider碰撞挤压将对象挤到空中的问题

这几天一直在尝试着修改各种战斗中的Bug,优化一些战斗细节等等,然后发现了在某些怪和主角对抗的时候,有的时候主角会莫名其妙地被挤到空中去,有的时候是怪在攻击主角的过程中把自己给挤到空中去了。你说这能忍吗?显然不行,对伐。

然后就开始使劲浑身解数尝试着在不同的状态下,主动控制怪和主角不要离开地面(通过动态获取目标所在位置点的地表Y坐标值,然后设置为目标的Y坐标),可是这又谈何容易呢,先不说这么做合不合理,优不优雅了,这一眼看上去就不是啥好招啊,而且实际上并没有找到为神马会出现相互挤压就会把某一方给挤到空中去的原因,那么我们肯定不能善罢甘休的,对伐?

接下来我们来看两个图:capusle_collider_1动图1capsule_collider_2动图2

上方的动图1中,我们看到绿色的Capsule朝着红色的Capsule快速移动,并且在移动的过程中与其发生了碰撞,碰撞之后绿色和红色的Capsule错开,然后绿色Capsule继续运动了一段时间。从动图2中,我们能看到绿色的Capsule在与红色的Capsule碰撞之后继续运动的过程中,明显有被挤到空中的情况。咦,貌似我们已经发现什么了呢。

那我们再来对比一下这两个Capsule的设置值,到底是哪个参数导致的呢?

capsule_collider_inspector_1 capsule_collider_inspector_2

从上面的两张图对比中来看的话,其实只有一个Capsule的Scale调整了Y为2,同时Y坐标也因为Capsule变高了所以变高了。如此一来,这个绿色的高个子的Capsule在与红色的矮个子Capsule发生碰撞和挤压的时候就会因为质心过高而被挤到空中去。如果希望避免这种情况,可以考虑将所有的Capsule Collider的中心点值和高度值都统一设置。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据