从另一个fbx的层次结构中提取fbx

时间:2017-06-23 10:08:51

标签: unity3d avatar

有没有办法提取" Dress fbx"来自" femal 2 fbx" ? 因为我想在运行时更改头像的衣服所以我想要提取" Dress fbx"并将其保存在数据库中然后在运行时如果我点击特定按钮我想要这个头像礼服#34; Dress fbx"。这种方法是否正确?

enter image description here

修改

当我点击按钮并运行此代码时出现此错误

public class DressController:MonoBehaviour
{
 [SerializeField] private GameObject dressObj = null;

 public void SetDressWithColor(Color color){
     this.dressObj.GetComponent<MeshRenderer>().material.color = color;
 }   
}

此图片显示此错误 enter image description here

编辑2

我使用3dmax从女性fbx中删除了连衣裙网格,然后我将女性fbx导入了统一,并且当我点击按钮时尝试在运行时添加连衣裙网,但是连衣裙没有放女性为什么?,我点击按钮时使用的代码

//I set this public variables in the Unity editor
public Mesh mesh = null; //Dress mesh
public Material material = null; //Dress_Diffuse
public Transform t = null; // CC_Base_BoneRoot
public void SetDressWithMesh()
{
    var smr = this.dressObj.GetComponent<SkinnedMeshRenderer>();
    smr.rootBone = t;
     smr.sharedMesh = mesh;
    smr.material = material;
}

t 是服装的根骨(在我的代码中是&#34; CC_Base_BoneRoot&#34;)如图所示

enter image description here

1 个答案:

答案 0 :(得分:1)

您很可能在运行时不使用fbx。当您在Unity中拖动fbx时,它会转换为gameobject的层次结构,其中包含指向网格和材质的MeshRenderer和MeshFilter。这就是你在图片中显示的内容。

当你在场景中拖动它时,它会变成一个游戏对象,这就是你要处理的内容。

在您的情况下,您想要影响着装子对象。所以首先你要找到那个或拖动它。 那么这取决于你是想要改变连衣裙网格还是仅仅改变它的材质。在第一种情况下,您可以影响形状,在第二种情况下,您可以影响颜色和纹理。

public class DressController:MonoBehaviour
{
     [SerializeField] private GameObject dressObj = null;

     public void SetDressWithColor(Color color){
         this.dressObj.GetComponent<SkinnedMeshRenderer>().material.color = color;
     }
     public void SetDressWithMesh(Mesh mesh, Material material){
         var smr = this.dressObj.GetComponent<SkinnedMeshRenderer>()
         smr.sharedMesh = mesh;
         smr.material = material;
     }
}

在网格更新的情况下,您也需要更改材质,因为UV贴图等将不再匹配。此外,您的MeshRenderer可能会使用多种材质。

总结一下,你会为​​你的案例解决MeshRenderer,Material和MeshFilter。