因为需要自适应纹理的尺寸,所以要创建自己的mesh,mesh由一个或者多个网格组成,每个网格的尺寸比例和纹理的比例一致。现将创建代码贴出来,调用CreateMash即可。
<span style="white-space:pre"> </span>private int meshXNum = 1;
private int meshYNum = 1;
private Vector3[] vertices;
private Vector2[] uvs;
private int[] triangles;
<span style="white-space:pre"> </span>private Mesh CreateMash()
{
Mesh mesh = new Mesh();
initVertexPos();
initUV();
initTriangles();
mesh.vertices = vertices;
mesh.uv = uvs;
mesh.triangles = triangles;
mesh.RecalculateNormals();
return mesh;
}
private void initVertexPos()
{
int currentIndex = 0;
vertices = new Vector3[(meshXNum + 1) * (meshYNum + 1)];
for (int i = 0; i <= meshYNum; i++)
{
for (int j = 0; j <= meshXNum; j++)
{
vertices[currentIndex] = new Vector3(j, 0, (float)(i * imageHeight / imageWidth));
currentIndex++;
}
}
Vector3 offset = new Vector3((float)meshXNum / 2, 0, (float)(meshYNum * imageHeight / imageWidth / 2));
for (int i = 0; i < vertices.Length; i++)
{
Vector3 tmp = vertices[i] - offset;
vertices[i] = tmp;
}
}
private void initUV()
{
uvs = new Vector2[vertices.Length];
for (int i = 0; i < uvs.Length; i++)
{
int x = i % (meshXNum + 1);
int y = i / (meshXNum + 1);
uvs[i] = new Vector2((float)x / meshXNum, (float)y / meshYNum);
}
}
private void initTriangles()
{
int currentIndex = 0;
triangles = new int[meshXNum * meshYNum * 6];
for (int i = 0; i < meshYNum; i++)
{
for (int j = 0; j < meshXNum; j++)
{
int tmp = (meshXNum + 1) * i + j;
triangles[currentIndex++] = tmp;
triangles[currentIndex++] = tmp + meshXNum + 1;
triangles[currentIndex++] = tmp + meshXNum + 2;
triangles[currentIndex++] = tmp;
triangles[currentIndex++] = tmp + meshXNum + 2;
triangles[currentIndex++] = tmp + 1;
}
}
}