【Unity】遊戲中動態拷貝模型(網格/材質)

在遊戲過程中,動態拷貝模型網格和材質球 :

   //拷貝當前模型
    public static GameObject CopyModel(GameObject targetModel)
    {
        if (targetModel == null)
            return null;

        //獲取子物體網格
        SkinnedMeshRenderer oldMeshRenderer = targetModel.GetComponent<SkinnedMeshRenderer>();
        if (oldMeshRenderer == null)
            return null;

        //獲取當前的網格數據
        Mesh newMesh = new Mesh();
        oldMeshRenderer.BakeMesh(newMesh);

        //創建物體
        GameObject newModel = new GameObject("NewModel");
        newModel.transform.SetParent(targetModel.transform.parent);
        //位置旋轉縮放
        newModel.transform.localPosition = targetModel.transform.localPosition;
        newModel.transform.localRotation = targetModel.transform.localRotation;
        newModel.transform.localScale = targetModel.transform.localScale;

        //網格賦值到新物體
        MeshFilter newMeshFilter = newModel.AddComponent<MeshFilter>();
        newMeshFilter.mesh = newMesh;

        MeshRenderer newMeshRenderer = newModel.AddComponent<MeshRenderer>();

        //複製材質球
        List<Material> materialList = new List<Material>();
        oldMeshRenderer.GetSharedMaterials(materialList);
        if (materialList != null && materialList.Count > 0)
        {
            newMeshRenderer.materials = new Material[materialList.Count];
            for (int j = 0; j < materialList.Count; j++)
            {
                //複製材質球
                newMeshRenderer.materials[j].CopyPropertiesFromMaterial(materialList[j]);
                //設置材質球Shader
                newMeshRenderer.materials[j].shader = materialList[j].shader;
            }
        }
        return newModel;
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章