Извлечь fbx из иерархического другого fbx

Есть ли способ извлечь "Dress fbx" из "femal 2 fbx"? потому что я хочу изменить одежду аватара во время выполнения, поэтому я хочу извлечь "Dress fbx" и сохранить его в базе данных, а затем во время выполнения, если я нажму на определенную кнопку, я хочу, чтобы аватар одел это "Dress fbx". Этот метод правильный?

введите описание изображения здесь

РЕДАКТИРОВАТЬ

когда я нажимаю на кнопку и запускаю этот код, я получаю эту ошибку

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

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

эта картинка для этой ошибки введите описание изображения здесь

РЕДАКТИРОВАТЬ 2

Я удалил сетку платья из женского fbx, используя 3dmax, затем импортировал женскую 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;
}

Это корневая кость для платья (в моем коде это "CC_Base_BoneRoot"), как показано на рисунке

введите описание изображения здесь

1 ответ

Скорее всего, вы не используете fbx во время выполнения. Когда вы перетаскиваете fbx в Unity, он преобразуется в иерархию игрового объекта, которая содержит 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;
     }
}

В случае обновления сетки вам также потребуется изменить материал, поскольку УФ-карта и т. Д. Больше не будут совпадать. Кроме того, ваш MeshRenderer может использовать несколько материалов.

Чтобы подвести итог, вы должны обратиться к MeshRenderer, Material и MeshFilter для вашего случая.

Другие вопросы по тегам