问题描述:
由于需求原因,从unity上的商店购置了一套资源,作为场景搭建的元素。搭建完放上角色行走时发现人物会悬浮在模型上方。
即运行后如图,光照阴影是贴在模型上的,但人物的脚与影子却不在一个点上,很明显是漂浮在模型上方的:
分析:
1.检查是否有其余模型覆盖在二者之间
简单查看的方法:从层级列表里拖出这两个对象,重新放置在另一个场景中运行。将二者拉出来放在另一个空白场景主要是为了排除其它模型的干扰,确保场景内基本只有他们俩的存在以方便问题的排查。
当重新放置在另一个场景中运行,未出现上述情况,则说明有其它模型阻挡,与该人物脚下地面关系不大,仔细查看其余模型即可。
若依旧出现上述人物飘浮的情况,则进行进一步排查。
2.查看人物刚体
如图:人物身上的胶囊体,360°检查是否位于脚底;或者可以直接创建一个cube查看是否是人物的问题:
如果cube没问题但人物有问题的话则重点检查人物的胶囊体是否有偏差;
若都有问题则说明问题处在地形模型上。
3.查看地形模型
点击地形模型(记得打开Gizmos,勾选mesh系列)查看模型网格:
发现网格加在了模型上方的感觉,查看其碰撞体,有两个,且都勾选了凸面:
问题应该就出在这上面,所以下一步,可以选择运行场景,在场景里的重力作用下实时观察到哪个mesh是导致出现飘浮问题的原因。
具体即先将MeshCollider组件都取消选中凸面的勾选
然后运行场景,逐个选中组件,但记得留至少一个mesh。直到cube正常落在地面上:
至此,问题解决。关闭运行后,将ground模型的MeshCollider重新勾选为运行时最后的状态即可。
而造成上述问题的原因,不太清楚,猜测是因为模型导入的时候unity为其自动匹配了两个mesh。且凸面是具有厚度的,会导致比原模型厚度稍微高点从而视觉上看起来显得漂浮。
如果有清楚原因的也可以告知一下。