效果参考如下:

代码参考如下:
using System.Collections.Generic;
using UnityEngine;
public class BorderFind : MonoBehaviour
{
[SerializeField]
MeshFilter meshFilter;
[SerializeField]
Material matLine;
void Start()
{
if (meshFilter == null) return;
Mesh mesh = OptimizeMesh(meshFilter.sharedMesh, true);
if (mesh == null) return;
List<List<Vector3>> borders = GetBorders(mesh);
foreach (List<Vector3> b in borders)
{
GameObject go = new GameObject();
go.transform.parent = transform;
LineRenderer lineRenderer = go.AddComponent<LineRenderer>();
lineRenderer.positionCount = b.Count;
lineRenderer.SetPositions(b.ToArray());
lineRenderer.loop = true;
lineRenderer.material = Instantiate(matLine);
lineRenderer.material.color = Random.ColorHSV();
}
}
List<List<Vector3>> GetBorders(Mesh meshOriginal)
{
List<Edge> listEdgeNoSharedAll = new();
Mesh mesh = OptimizeMesh(meshOriginal, true);
Vector3[] vs = mesh.vertices;
int[] ts = mesh.triangles;
for (int i = 0; i < ts.Length; i += 3)
{
int edge01Start = ts[i];
int edge01End = ts[i + 1];
int edge02Start = ts[i + 1];
int edge0

最低0.47元/天 解锁文章
2705

被折叠的 条评论
为什么被折叠?



