在游戏过程中,动态拷贝模型网格和材质球 :
//拷贝当前模型
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;
}
本文来自博客园,作者:萧然CS,转载请注明原文链接:https://www.cnblogs.com/z-c-s/p/15112884.html