顶点
mesh类型
空网格
绘制三角形--3个点绘制一次(顺时针单面)
void Start()
{ Mesh m_Mesh=new Mesh();
List<Vector3>verties=new List<Vector3>();
verties.Add(Vector3.zero);//0
verties.Add(Vector3.up);//1
verties.Add(Vector3.right);//2
m_Mesh.vertices=verties.ToArray();
//mesh网格绘制顺序
m_Mesh.triangles = new int[] { 0, 1, 2 ,2,1,0};
GetComponent<MeshFilter>().mesh = m_Mesh;
}
双面
void Start()
{ Mesh m_Mesh=new Mesh();
List<Vector3>verties=new List<Vector3>();
verties.Add(Vector3.zero);//0
verties.Add(Vector3.up);//1
verties.Add(Vector3.right);//2
m_Mesh.vertices=verties.ToArray();
//mesh网格绘制顺序
m_Mesh.triangles = new int[] { 0, 1, 2 };
GetComponent<MeshFilter>().mesh = m_Mesh;
}
绘制cube--8顶点
void Start()
{ Mesh m_Mesh=new Mesh();
List<Vector3>verties=new List<Vector3>();
//verties.Add(Vector3.zero);//0
//verties.Add(Vector3.up);//1
//verties.Add(Vector3.right);//2
verties.Add(new Vector3(0, 1, 0));//顶点8个
verties.Add(new Vector3(0, 1, 1));
verties.Add(new Vector3(1, 1, 1));
verties.Add(new Vector3(1, 1, 0));
verties.Add(new Vector3(0, 0, 0));
verties.Add(new Vector3(0, 0, 1));
verties.Add(new Vector3(1, 0, 1));
verties.Add(new Vector3(1, 0, 0));
m_Mesh.vertices=verties.ToArray();
//mesh网格绘制顺序
m_Mesh.triangles = new int[]
{
4,0,3,
3,7,4,
7,3,2,
7,2,6,
//背面逆时针
6,2,1,
6,1,5,
5,1,0,
5,0,4,
0,1,2,
0,2,3,
5,4,7,
7,6,5
};
GetComponent<MeshFilter>().mesh = m_Mesh;
}
绘制的形状没有棱角,法线
法线凹凸--光的反射
----解决没有光反
----添加uv贴图
顶点数相同
uv坐标,比例裁剪
//给mesh添加uv坐标
List<Vector2> uv = new List<Vector2>();
//uv.Add(new Vector2(0, 0));//换比例
uv.Add(new Vector2(0.1f, 0.3f ));
uv.Add(new Vector2(0.9f, 0.3f));
uv.Add(new Vector2(0.1f, 0.9f));
uv.Add(new Vector2(0, 1));
uv.Add(new Vector2(0, 0));
uv.Add(new Vector2(1, 0));
uv.Add(new Vector2(1, 1));
uv.Add(new Vector2(0, 1));
m_Mesh.uv = uv.ToArray();
简化网格
---盒子+球
void Start()
{ Mesh m_Mesh=new Mesh();
List<Vector3>verties=new List<Vector3>();
//verties.Add(Vector3.zero);//0
//verties.Add(Vector3.up);//1
//verties.Add(Vector3.right);//2
verties.Add(new Vector3(0, 5, 0));//顶点8个
verties.Add(new Vector3(0, 5, 5));//大小*5
verties.Add(new Vector3(5, 5, 5));
verties.Add(new Vector3(5, 5, 0));
verties.Add(new Vector3(0, 0, 0));
verties.Add(new Vector3(0, 0, 5));
verties.Add(new Vector3(5, 0, 5));
verties.Add(new Vector3(5, 0, 0));
m_Mesh.vertices=verties.ToArray();
//mesh网格绘制顺序
m_Mesh.triangles = new int[]
{
4,3,0,--2,3顺序换
3,4,7,
7,2,3,
7,6,2,
//背面逆时针
6,1,2,
6,5,1,
5,0,1,
5,4,0,
0,2,1,
0,3,2,
5,7,4,
7,5,6
};
//自动添加法线
m_Mesh.RecalculateNormals(); //简单添加
//给mesh添加uv坐标
List<Vector2> uv = new List<Vector2>();
//uv.Add(new Vector2(0, 0));//换比例
uv.Add(new Vector2(0.1f, 0.3f ));
uv.Add(new Vector2(0.9f, 0.3f));
uv.Add(new Vector2(0.1f, 0.9f));
uv.Add(new Vector2(0, 1));
uv.Add(new Vector2(0, 0));
uv.Add(new Vector2(1, 0));
uv.Add(new Vector2(1, 1));
uv.Add(new Vector2(0, 1));
m_Mesh.uv = uv.ToArray();
GetComponent<MeshFilter>().mesh = m_Mesh;
GetComponent<MeshCollider>().sharedMesh = m_Mesh;
}
网格碰撞器
球形
public Mesh sphere;
// Start is called before the first frame update
void Start()
{
Mesh mesh = new Mesh();
List<Vector3> vertices = new List<Vector3>();
List<Vector3> normals = new List<Vector3>();
List<Vector2> uv = new List<Vector2>();
for (int i = 0; i < sphere.vertices.Length; i++)
{
vertices.Add(sphere.vertices[i]);
normals.Add(sphere.normals[i]);
uv.Add(sphere.uv[i]);
}
mesh.vertices = vertices.ToArray();
mesh.normals = normals.ToArray();
mesh.uv = uv.ToArray();
List<int> triangles = new List<int>();
for (int i = 0; i < sphere.triangles.Length; i += 3)
{
triangles.Add(sphere.triangles[i]);
triangles.Add(sphere.triangles[i + 2]);
triangles.Add(sphere.triangles[i + 1]);
}
mesh.triangles = triangles.ToArray();
GetComponent<MeshFilter>().mesh = mesh;
GetComponent<MeshCollider>().sharedMesh = mesh;
}