Unity创建网格的一些总结
组件:MeshFilter MeshRenderer
过程:创建mesh类,必要特征:
vector3[] vertices --顶点位置
vector2[] uv --uv坐标(纹理映射)
int[] triangles --三角形顶点索引
比较有意思的是,对于按不同顺/逆时针索引构成的三角形,meshRenderer仅会根据法线渲染一侧,另一侧是看不到的。
传入MeshFilter
创建或加载Material类给 MeshRenderer
附代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MeshTrier : MonoBehaviour
{
public GameObject target;
private MeshFilter meshFilter;
private MeshRenderer meshRenderer;
private Mesh mesh;
private Material mat;
private float cutScale = 1f/ 4;
void Start()
{
CreateMesh();
}
public void CreateMesh()
{
mesh = new Mesh();
meshFilter = target.AddComponent<MeshFilter>();
meshRenderer = target.AddComponent<MeshRenderer>();
Vector3[] vertices =
{
new Vector3(0, 0, 0),
new Vector3(0, 1, 0),
new Vector3(1, 0, 0),
new Vector3(1, 1, 0),
};
Color[] colors =
{
Color.green,
Color.red,
Color.blue,
Color.black,
};//大多数的内置渲染器不显示顶点颜色,我设置了之后没用
Vector2[] uv =
{
new Vector2(0,0),
new Vector2(0,cutScale),
new Vector2(cutScale,0),
new Vector2(cutScale,cutScale),
};
int[] triangles = {0, 1, 3, 0, 3,2 };
mesh.vertices = vertices;
mesh.triangles = triangles;
mesh.uv = uv;
mesh.colors=colors;//注意大多数的内置渲染器不显示顶点颜色
mesh.RecalculateNormals();//特别注意:不重算法线会贴图错误
meshFilter.mesh = mesh;
mat = new Material(Shader.Find("Standard"));
mat.color=Color.red;
meshRenderer.material = mat;
}
}