Files
ChristmasTree.Unity/Assets/Procedural/CombineMeshNode.cs
T
2025-05-13 05:25:23 +03:00

64 lines
1.9 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CombineMeshNode : MeshProcessor {
public List<ProceduralMeshData> Source = new List<ProceduralMeshData>();
public override void Execute(ProceduralMeshData m)
{
List<Vector3> vertices = new List<Vector3>();
List<int[]> indices = new List<int[]>();
List<Vector3> normals = new List<Vector3>();
List<Vector4> tangents = new List<Vector4>();
List<List<Vector4>> uvs = new List<List<Vector4>>();
//combine
foreach (var meshData in Source)
{
if (meshData != null)
{
//append all indices
foreach (var submeshIndices in meshData.Indices)
{
var newIndices = new int[submeshIndices.Length];
//offset indices
for (int i = 0; i < newIndices.Length; ++i)
{
newIndices[i] = submeshIndices[i] + vertices.Count;
}
indices.Add(newIndices);
}
vertices.AddRange(meshData.Vertices);
normals.AddRange(meshData.Normals);
if (meshData.Tangents != null)
{
tangents.AddRange(meshData.Tangents);
}
while (uvs.Count < meshData.Uvs.Count){
uvs.Add(new List<Vector4>());
}
for (int i = 0; i < meshData.Uvs.Count; ++i)
{
uvs[i].AddRange(meshData.Uvs[i]);
}
}
}
m.Vertices = vertices.ToArray();
m.Indices = indices;
m.Normals = normals.ToArray();
m.Tangents = tangents.Count == 0 ? null : tangents.ToArray();
m.Uvs = uvs;
}
}