Files
Studio/Assets/Scripts/XED/Building/CreateWireFrame.cs
2025-02-19 17:24:26 +09:00

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;
}
}
}