在遊戲過程中,動態拷貝模型網格和材質球 :
//拷貝當前模型
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;
}