MeshFilter+MeshRenderer和Skinned Mesh Renderer
Skinned Mesh Renderer常用于渲染骨架控制的人物,MeshFilter+MeshRenderer用于渲染没有骨架的东西。
Skinned Mesh Renderer比MeshFilter+MeshRenderer多了一些功能,比如BlendShapes(Blender里叫形态键)。同一个模型,在Blender里加形态键后,在Unity的渲染组件就从MeshFilter+MeshRenderer变成了Skinned Mesh Renderer。
模型和骨骼节点是怎么建立对应关系的?
把人物Unpack Completely,不影响骨骼控制模型;
把骨骼节点改名,不影响控制;
改变骨骼节点的父子关系,各骨骼节点变成只控制它影响的顶点,但还是能控制;
把Skinned Mesh Renderer的Root Bone改成其他物体,也不影响控制,但是Root Bone离开Scene相机的视野太远会使模型不显示。
删除一个骨骼节点,它和它子级控制的顶点被拉到世界原点;
综上,模型里记录着每个顶点和控制它的骨骼节点,且不是按名字或和Root Bone的父子关系记录,可能记录的是另外的某种节点ID,Unity里看不到,且删除骨骼节点后除非撤销,否则没有办法手动建骨骼节点。
遇到的问题合集
运行后导入的人物模型变形,贴图错位
没有运行时模型正常,Scale Factor=1,此时人物比其他人矮一截。
运行后模型被纵向拉长,贴图错位。
调整Scale Factor到一个比较大的值(这里是2):
运行后模型被压扁,高度还是和其他人差不多:
此时我发现人物的头其实一直没有变形,只有身体会变形。
原因:人物带了Animator组件,但是Avatar用的是别人的:
解决方法:用基于此人创建的Avatar。
运行时人物的根节点在世界原点
原因:不小心删除了裙子上的一个节点
第一人称看不见手里的手枪
看不见枪身,能看见弹匣。上一个做的手枪没这个问题。
把枪往前移或把相机往后移都能看见,我以为是Near Clip Plane的问题。
把Near Clip Plane设到最小,都能看见自己的头发了,还是看不见枪。
原因:模型的Skinned Mesh Renderer的Bounds被设置得特别小,0.0001那种。Bounds应该设置得使白框和模型一致。