我正在尝试更改和调整Unity中立方体中bilt表面的纹理。没有任何问题,我设法用这个代码在每张脸上放上了不同的图像:
void Start()
{
Mesh mesh = GetComponent<MeshFilter>().mesh;
Vector2[] UVs = new Vector2[mesh.vertices.Length];
// Front
UVs[0] = new Vector2(0.0f, 0.0f);
UVs[1] = new Vector2(0.333f, 0.0f);
UVs[2] = new Vector2(0.0f, 0.333f);
UVs[3] = new Vector2(0.333f, 0.333f);
// Top
UVs[4] = new Vector2(0.334f, 0.333f);
UVs[5] = new Vector2(0.666f, 0.333f);
UVs[8] = new Vector2(0.334f, 0.0f);
UVs[9] = new Vector2(0.666f, 0.0f);
// Back
UVs[6] = new Vector2(1.0f, 0.0f);
UVs[7] = new Vector2(0.667f, 0.0f);
UVs[10] = new Vector2(1.0f, 0.333f);
UVs[11] = new Vector2(0.667f, 0.333f);
// Bottom
UVs[12] = new Vector2(0.0f, 0.334f);
UVs[13] = new Vector2(0.0f, 0.666f);
UVs[14] = new Vector2(0.333f, 0.666f);
UVs[15] = new Vector2(0.333f, 0.334f);
// Left
UVs[16] = new Vector2(0.334f, 0.334f);
UVs[17] = new Vector2(0.334f, 0.666f);
UVs[18] = new Vector2(0.666f, 0.666f);
UVs[19] = new Vector2(0.666f, 0.334f);
// Right
UVs[20] = new Vector2(0.667f, 0.334f);
UVs[21] = new Vector2(0.667f, 0.666f);
UVs[22] = new Vector2(1.0f, 0.666f);
UVs[23] = new Vector2(1.0f, 0.334f);
mesh.uv = UVs;
GetComponent<MeshFilter>().mesh = mesh
}
这是有效的,但它只使用附加到立方体/着色器的纹理(纹理图谱??)。我想知道是否可以使用两个不同的纹理集,例如,我有4个面具有纹理1的部分,2个面具有质地2的部分。或者可以通过使用6种不同纹理的代码生成纹理图谱?PackTexture()方法可以用于此吗?
要使用更多纹理,需要单独的子网格。使用单独的子网格Unity可以附加其他材质和其他纹理。
看看
http://docs.unity3d.com/ScriptReference/Mesh.SetTriangles.html
例如,使用此代码创建一个脚本,并将其附加到具有立方体的GameObject。
void Awake ()
{
Mesh currentMesh = this.GetComponent<MeshFilter>().mesh;
int[] submesh0 = new int[]{0,2,3,0,3,1,8,4,5,8,5,9,10,6,7,10,7,11,12,13,14,12,14,15};
int[] submesh1 = new int[]{16,17,18,16,18,19, 20,21,22,20,22,23};
currentMesh.subMeshCount=2;
currentMesh.SetTriangles(submesh0,0);
currentMesh.SetTriangles(submesh1,1);
}
清醒后,将两种材料连接到立方体上,它用于4面一种材料,用于另2面另一种材料。
请注意,这不是最好的方法。使用两种材料打破统一优化,需要两个单独的绘制调用(更昂贵)。