private ProBuilderMesh GetShadowObject(ProBuilderMesh mesh) { if (mesh == null || mesh.name.Contains("-ShadowVolume")) { return(null); } for (int i = 0; i < mesh.transform.childCount; i++) { Transform t = mesh.transform.GetChild(i); if (t.name.Equals(string.Format("{0}-ShadowVolume", mesh.name))) { ProBuilderMesh shadow = t.GetComponent <ProBuilderMesh>(); if (shadow != null) { Undo.RecordObject(shadow, "Update Shadow Object"); Face[] faces = new Face[mesh.faceCount]; for (int nn = 0; nn < mesh.faceCount; nn++) { faces[nn] = new Face(mesh.faces[nn]); } shadow.RebuildWithPositionsAndFaces(mesh.positions, faces); return(shadow); } } } ProBuilderMesh newShadowMesh = ProBuilderMesh.Create(); newShadowMesh.ToMesh(); newShadowMesh.CopyFrom(mesh); newShadowMesh.name = string.Format("{0}-ShadowVolume", mesh.name); newShadowMesh.transform.SetParent(mesh.transform, false); Undo.RegisterCreatedObjectUndo(newShadowMesh.gameObject, "Create Shadow Object"); return(newShadowMesh); }