public static void DoStrip(ProBuilderMesh pb) { try { GameObject go = pb.gameObject; Renderer ren = go.GetComponent <Renderer>(); if (ren != null) { EditorUtility.SetSelectionRenderState(ren, EditorSelectedRenderState.Highlight | EditorSelectedRenderState.Wireframe); } if (EditorUtility.IsPrefabAsset(go)) { return; } EditorUtility.SynchronizeWithMeshFilter(pb); if (pb.mesh == null) { DestroyProBuilderMeshAndDependencies(go, pb, false); return; } string cachedMeshPath; Mesh cachedMesh; // if meshes are assets and the mesh cache is valid don't duplicate the mesh to an instance. if (Experimental.meshesAreAssets && EditorMeshUtility.GetCachedMesh(pb, out cachedMeshPath, out cachedMesh)) { DestroyProBuilderMeshAndDependencies(go, pb, true); } else { Mesh m = UnityEngine.ProBuilder.MeshUtility.DeepCopy(pb.mesh); DestroyProBuilderMeshAndDependencies(go, pb); go.GetComponent <MeshFilter>().sharedMesh = m; if (go.TryGetComponent(out MeshCollider meshCollider)) { meshCollider.sharedMesh = m; } } } catch {} }
public void CreateBoundary() { var boundaryPoints = Config.BoundaryGeoData.GetPathInStreamingAssets().GetBoundaryPoints().AddTileIntersectionPoints(); // Create vertices var wallVertices = new List <Vector3>(); for (int p = 0; p < boundaryPoints.Length - 1; p++) { var point0 = boundaryPoints[p]; var point1 = boundaryPoints[p + 1]; wallVertices.Add(point0); wallVertices.Add(point1); wallVertices.Add(new Vector3(point0.x, point0.y + Config.BoundaryHeight, point0.z)); wallVertices.Add(new Vector3(point1.x, point1.y + Config.BoundaryHeight, point1.z)); } // Create faces var faces = new List <Face>(); for (int f = 0; f < wallVertices.Count - 3; f += 4) { var faceVertices = new int[] { f, f + 1, f + 2, f + 1, f + 3, f + 2 }; faces.Add(new Face(faceVertices)); } var wall = ProBuilderMesh.Create(wallVertices, faces); Normals.CalculateNormals(wall); Normals.CalculateTangents(wall); Smoothing.ApplySmoothingGroups(wall, faces, 30); wall.ToMesh(); wall.Refresh(); EditorMeshUtility.Optimize(wall); var meshRenderer = wall.GetComponent <MeshRenderer>(); meshRenderer.material = Config.BoundaryMaterial; meshRenderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off; meshRenderer.lightProbeUsage = UnityEngine.Rendering.LightProbeUsage.Off; wall.gameObject.name = wall.name = Path.GetFileNameWithoutExtension(Config.BoundaryGeoData).Replace('_', ' '); wall.transform.SetParent(null, true); }
public static void DoStrip(ProBuilderMesh pb) { try { GameObject go = pb.gameObject; Renderer ren = go.GetComponent <Renderer>(); if (ren != null) { EditorUtility.SetSelectionRenderState(ren, EditorUtility.GetSelectionRenderState()); } if (EditorUtility.IsPrefabAsset(go)) { return; } EditorUtility.SynchronizeWithMeshFilter(pb); if (pb.mesh == null) { DestroyImmediate(pb); if (go.GetComponent <Entity>()) { DestroyImmediate(go.GetComponent <Entity>()); } return; } string cachedMeshPath; Mesh cachedMesh; // if meshes are assets and the mesh cache is valid don't duplicate the mesh to an instance. if (Experimental.meshesAreAssets && EditorMeshUtility.GetCachedMesh(pb, out cachedMeshPath, out cachedMesh)) { pb.preserveMeshAssetOnDestroy = true; DestroyImmediate(pb); if (go.GetComponent <Entity>()) { DestroyImmediate(go.GetComponent <Entity>()); } } else { Mesh m = UnityEngine.ProBuilder.MeshUtility.DeepCopy(pb.mesh); DestroyImmediate(pb); if (go.GetComponent <Entity>()) { DestroyImmediate(go.GetComponent <Entity>()); } go.GetComponent <MeshFilter>().sharedMesh = m; if (go.GetComponent <MeshCollider>()) { go.GetComponent <MeshCollider>().sharedMesh = m; } } } catch {} }