62 lines
1.9 KiB
C#
62 lines
1.9 KiB
C#
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<Material>("Materials/Mat_Cutout");
|
|
mat = matrial;
|
|
targetMeshFilter = GetComponent<MeshFilter>();
|
|
mr = GetComponent<MeshRenderer>();
|
|
mr.material = mat;
|
|
}
|
|
|
|
public void CombineMeshes(List<MeshFilter> 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;
|
|
}
|
|
|
|
}
|
|
}
|