using AmazingAssets.WireframeShader; using System.Collections.Generic; using UnityEngine; namespace XED { [RequireComponent(typeof(MeshRenderer)), RequireComponent(typeof(MeshFilter))] public class CreateWireFrame : MonoBehaviour { //MeshFilter meshFilter; private bool tryQuad; private Mesh wireframeMesh; private Material mat; private MeshFilter targetMeshFilter; private MeshRenderer mr; public override void AfterAwake() { var matrial = Resources.Load("Materials/Mat_Cutout"); mat = matrial; targetMeshFilter = GetComponent(); mr = GetComponent(); mr.material = mat; } public void CombineMeshes(List meshFilters) { if (meshFilters.Count == 0) return; var combine = new CombineInstance[meshFilters.Count]; for (var i = 0; i < meshFilters.Count; i++) { combine[i].mesh = meshFilters[i].sharedMesh; combine[i].transform = meshFilters[i].transform.localToWorldMatrix; } var mesh = new Mesh(); mesh.CombineMeshes(combine); targetMeshFilter.mesh = mesh; WireFrameCreate(targetMeshFilter); } public void WireFrameCreate(MeshFilter meshFilter) { targetMeshFilter.mesh = meshFilter.mesh; if (wireframeMesh != null) UnityEngine.GameObject.DestroyImmediate(wireframeMesh); wireframeMesh = targetMeshFilter.sharedMesh.GenerateWireframeMesh(false, tryQuad); targetMeshFilter.sharedMesh = wireframeMesh; } public void Displayable(bool value) { if (mr == null) return; mr.enabled = value; } } }