您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
59 行
1.9 KiB
59 行
1.9 KiB
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using System.IO;
|
|
using UnityEditor.Experimental.AssetImporters;
|
|
|
|
[ScriptedImporter(0, "wire")]
|
|
public class WireMeshImporter : ScriptedImporter
|
|
{
|
|
static char[] separators = new char[] { ' ' };
|
|
|
|
public override void OnImportAsset(AssetImportContext ctx)
|
|
{
|
|
string[] lines = File.ReadAllLines(ctx.assetPath);
|
|
|
|
if (lines.Length > 0 && lines[0] == "WIREMESH")
|
|
{
|
|
Mesh m = new Mesh();
|
|
|
|
if (lines.Length > 1)
|
|
{
|
|
List<Vector3> vertices = new List<Vector3>();
|
|
int[] indices = new int[(lines.Length - 1) * 2];
|
|
|
|
|
|
for (int i = 1; i < lines.Length; i++)
|
|
{
|
|
string[] values = lines[i].Split(separators);
|
|
|
|
if (values.Length != 6)
|
|
throw new System.IO.InvalidDataException("Invalid wire data length");
|
|
|
|
float[] linedata = new float[6];
|
|
for (int j = 0; j < 6; j++)
|
|
linedata[j] = float.Parse(values[j], System.Globalization.NumberStyles.Float ,System.Globalization.CultureInfo.InvariantCulture);
|
|
|
|
vertices.Add(new Vector3(linedata[0], linedata[1], linedata[2]));
|
|
vertices.Add(new Vector3(linedata[3], linedata[4], linedata[5]));
|
|
|
|
indices[(i - 1) * 2] = (i - 1) * 2;
|
|
indices[(i - 1) * 2 + 1] = (i - 1) * 2 + 1;
|
|
}
|
|
|
|
m.SetVertices(vertices);
|
|
m.SetIndices(indices, MeshTopology.Lines, 0, true);
|
|
}
|
|
else
|
|
Debug.LogWarning("Empty Mesh");
|
|
|
|
m.name = Path.GetFileNameWithoutExtension(ctx.assetPath);
|
|
ctx.AddObjectToAsset("Mesh", m);
|
|
ctx.SetMainObject(m);
|
|
}
|
|
else throw new System.IO.InvalidDataException("Invalid File!");
|
|
|
|
}
|
|
|
|
|
|
}
|