简介: 有不少美术在制作资源的时候可能会经常遇到。一个prefab中包含一个蒙皮物体,当这个蒙皮物体的 fbx 文件被替换后,发现 prefab 中的蒙皮文件坏掉了,顶点乱飞,但是用 这个 fbx 重新创建一个 prefab 就是正常的。我们今天就来解密一下这个问题是如何发生的,我们要如何解决
unity版本:20222.1.7fc1
正常状态
我们创建一个球体,然后给他蒙两块骨骼

Unity 创建 prefab

修改蒙皮文件并导出fbx覆盖
给蒙皮增加一个骨骼

结果prefab不能显示了

我们用 fbx 重新创建一个 prefab 效果是正常的,我们把他命名为 skintest1_new

这也就证明了我们的 fbx 覆盖后,有一部分信息并没有更新到 已有的prefab中
查问题
我们用文本编辑器打开两个prefab文件对比一下

可以看到两边的蒙皮骨骼数量是不一样的,旧的prefab明显没有更新骨骼数量
fileID是unity自动生成的节点的唯一标识符,旧 prefab 的两个骨骼从上到下依次代表 Bone002 ,Bone001。新 prefab 的三个骨骼从上到下依次是 Bone002,Bone001,Bone003。可以看到虽然顺序和max里的对不上,但是新旧prefab的顺序是一致的,只是新的prefab中的蒙皮包含了新增的 Bone003。
解决
我们在旧prefab文件中找到 Bone003 的 fileId,然后手动将其它添加到蒙皮组件内


代码解决方案就是 通过将 旧的 prefab 中的 SkinedMeshRenderer 内的 bones 按照 Fbx 中的 SkinedMeshRenderer Bones 设置即可
网友评论