2016-03-25 2 views
1

Я пытаюсь изменить и изменить размер текстур, наложенных на грани кулака в кубике в Unity. Без каких-либо проблем, мне удалось поместить другое изображение на каждом лице с этим кодом:Почему текстура УФ-карты изменена для всех кубов?

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

Чтобы использовать больше текстур, вам понадобится отдельный субмех. С отдельным субмашом 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 других.

Обратите внимание, что это не лучший способ. Используя две оптимизации разрыва материала, нужно два отдельных вызова рисования (более дорогие).

+0

Hi. Спасибо, но если у меня будет два подмашины, прикрепленных к кубу, у одного из шести текстур куба будет текстура, а secon также будет иметь разную текстуру шести сторон, смогу ли я использовать четыре грани из первой текстуры и две грани второй текстуры? –

+0

Я просто добавлю пример, чтобы сделать это ... – Klamore74

+0

Привет, я решил проблему с использованием Texture2D.PackTextures, а затем, установив UVs для каждой упакованной текстуры. Спасибо, в любом случае :) –