Exemplo n.º 1
0
        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);
        }