我正在尝试更改并调整在Unity中放置在bilt-in多维数据集中的纹理。没有任何问题,我设法用这个代码在每张脸上放置不同的图像:
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()方法吗?
答案 0 :(得分:1)
要使用更多纹理,您需要一个单独的子网格。使用单独的subMesh 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面对一种材料,另一种用于另一种材料。
请注意,这不是最佳方法。使用两个材料破坏统一优化,需要两个单独的绘制调用(更昂贵)。