using UnityEngine;
using System.Collections;
using System.Collections.Generic;
//实现了MeshBuilder得类,会使得我们生成mesh的时候犯的错误更少一些
public class MeshBuilder
{
private List<Vector3> m_Vertices = new List<Vector3>();
public List<Vector3> Vertices {get{return m_Vertices; }}
private List<Vector3> m_Normals = new List<Vector3>();
public List<Vector3> Normals {get{return m_Normals; }}
private List<Vector2> m_UVs = new List<Vector2>();
public List<Vector2> UVs {get{return m_UVs; }}
private List<int> m_indexs = new List<int>();
public void AddTriangle(int index0, int index1, int index2)
{
m_indexs.Add (index0);
m_indexs.Add (index1);
m_indexs.Add (index2);
}
public Mesh CreateMesh()
{
Mesh mesh = new Mesh ();
mesh.vertices = m_Vertices.ToArray ();
mesh.triangles = m_indexs.ToArray ();
if (m_Normals.Count == m_Vertices.Count)
mesh.normals = m_Normals.ToArray ();
if (m_UVs.Count == m_Vertices.Count)
mesh.uv = m_UVs.ToArray ();
mesh.RecalculateBounds ();
return mesh;
}
}
public class MeshBuilderTest : MonoBehaviour
{
private float m_Length = 1f;
private float m_Width = 1f;
public void Start()
{
TestMeshBuilder ();
}
public void TestMeshBuilder()
{
MeshBuilder meshBuilder = new MeshBuilder();
//Set up the vertices and triangles:
meshBuilder.Vertices.Add(new Vector3(0.0f, 0.0f, 0.0f));
meshBuilder.UVs.Add(new Vector2(0.0f, 0.0f));
meshBuilder.Normals.Add(Vector3.up);
meshBuilder.Vertices.Add(new Vector3(0.0f, 0.0f, m_Length));
meshBuilder.UVs.Add(new Vector2(0.0f, 1.0f));
meshBuilder.Normals.Add(Vector3.up);
meshBuilder.Vertices.Add(new Vector3(m_Width, 0.0f, m_Length));
meshBuilder.UVs.Add(new Vector2(1.0f, 1.0f));
meshBuilder.Normals.Add(Vector3.up);
meshBuilder.Vertices.Add(new Vector3(m_Width, 0.0f, 0.0f));
meshBuilder.UVs.Add(new Vector2(1.0f, 0.0f));
meshBuilder.Normals.Add(Vector3.up);
meshBuilder.AddTriangle(0, 1, 2);
meshBuilder.AddTriangle(0, 2, 3);
MeshFilter filter = this.gameObject.AddComponent<MeshFilter> ();
if (filter != null)
{
filter.sharedMesh = meshBuilder.CreateMesh();
}
MeshRenderer meshRender = this.gameObject.AddComponent<MeshRenderer> ();
Shader shader = Shader.Find ("Diffuse");
meshRender.sharedMaterial = new Material (shader);
}
}
Unity3D Mesh学习笔记2-创建MeshBuilder
最新推荐文章于 2024-08-23 08:56:56 发布