在游戏过程中,动态拷贝模型网格和材质球 :

   //拷贝当前模型
    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;
    }