为什么所有立方体的纹理UV贴图都已更改?

时间:2016-03-25 07:31:45

标签: c# android unity3d textures uv-mapping

我正在尝试更改并调整在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()方法吗?

1 个答案:

答案 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面对一种材料,另一种用于另一种材料。

请注意,这不是最佳方法。使用两个材料破坏统一优化,需要两个单独的绘制调用(更昂贵)。