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

Unity3d 从另一个fbx的层次结构中提取fbx,unity3d,avatar,Unity3d,Avatar,有没有办法从“femal 2 fbx”中提取“Dress fbx”? 因为我想在运行时更改化身的衣服,所以我想提取“裙子fbx”并将其保存在数据库中,然后在运行时,如果我单击特定按钮,我想让化身穿着这个“裙子fbx”。这个方法正确吗 编辑 当我点击这个按钮并运行这个代码时,我得到了这个错误 public class DressController:MonoBehaviour { [SerializeField] private GameObject dressObj = null; pu

有没有办法从“femal 2 fbx”中提取“Dress fbx”? 因为我想在运行时更改化身的衣服,所以我想提取“裙子fbx”并将其保存在数据库中,然后在运行时,如果我单击特定按钮,我想让化身穿着这个“裙子fbx”。这个方法正确吗

编辑

当我点击这个按钮并运行这个代码时,我得到了这个错误

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

 public void SetDressWithColor(Color color){
     this.dressObj.GetComponent<MeshRenderer>().material.color = color;
 }   
}
公共类控制器:单行为
{
[SerializeField]私有游戏对象dressObj=null;
公共void SetDressWithColor(彩色){
this.dressObj.GetComponent().material.color=color;
}   
}
这张图片显示了此错误

编辑2

我使用3dmax从女性fbx中删除了裙子网格,然后我将女性fbx导入unity,并尝试在运行时单击按钮时向女性添加裙子网格,但裙子没有穿上女性为什么?,我单击按钮时使用的代码

//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;
}
//我在Unity编辑器中设置了这个公共变量
公共网格=空//服装网
公共材料=空//漫射
公共转换t=null;//CC_Base_BoneRoot
公共void SetDressWithMesh()
{
var smr=this.dressObj.GetComponent();
smr.rootBone=t;
smr.sharedMesh=网格;
smr.材料=材料;
}
t是裙子的根骨(在我的代码中是“CC_Base_BoneRoot”),如图所示


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

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

在本例中,您希望影响dress子对象。所以首先你要找到它或者把它拖走。 然后,这取决于您是要更改衣服的网格还是仅更改其材质。在第一种情况下,可以影响形状,在第二种情况下,可以影响颜色和纹理

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;
     }
}
公共类控制器:单行为
{
[SerializeField]私有游戏对象dressObj=null;
公共void SetDressWithColor(彩色){
this.dressObj.GetComponent().material.color=color;
}
公共空间设置DressWithMesh(网格、材质){
var smr=this.dressObj.GetComponent()
smr.sharedMesh=网格;
smr.材料=材料;
}
}
在网格更新的情况下,您还需要更改材质,因为UV贴图等将不再匹配。此外,您的网格渲染器可能会使用多材质


总而言之,您需要针对您的案例处理MeshRenderer、材质和MeshFilter。

我尝试了您的代码,但出现以下错误(我将编辑帖子以添加此错误的图片)MissingComponentException:没有“MeshRenderer”附加到“Dress”游戏对象,但脚本正在尝试访问它。您可能需要向游戏对象“Dress”添加网格渲染器。或者你的脚本在使用前需要检查组件是否已连接。我尝试了你的代码设置Dress with mesh,但它不起作用,我更新了我的帖子(编辑2)来解释我所做的事情,请你能看到我上次的更新并帮助我,谢谢你当我点击按钮时,事情没有发生,你接受了答案,这意味着你明白了吗?不,只是用颜色设置DressWith Color对我有效,但是第二个功能不起作用当我点击按钮时,什么都没有发生,它应该显示裙子,但它没有出现