2016-06-30 3 views
0

Я хотел бы генерировать сетки и текстуры процедурные в Unity/C#. Однако все мои попытки с пользовательской сеткой отображают только первый тексель. Я попытался как можно больше упростить задачу и придумал следующий пример кода, который рисует белый квадрат вместо «флаг польского».Unity/C#: процедурная текстура для процедурной сетки

using UnityEngine; 
using System.Collections; 

public class Test : MonoBehaviour { 

    [SerializeField] Material unlitMaterial; 

    void Start() { 
     Mesh mesh = new Mesh(); 
     mesh.vertices = new Vector3[4] { Vector3.zero, new Vector3 (1, 0, 0), new Vector3 (1, 0, 1), new Vector3 (0, 0, 1) }; 
     mesh.triangles = new int[6] {1, 0, 3, 2, 1, 3 } ; 
     mesh.RecalculateNormals(); 

     Texture2D texture = new Texture2D (2, 2); 
     texture.SetPixels (new Color[4] {Color.white, Color.white, Color.red, Color.red}); 
     texture.filterMode = FilterMode.Point; 
     texture.Apply(); 

     GameObject gameObject = new GameObject(); 
     MeshRenderer meshRenderer = gameObject.AddComponent<MeshRenderer>(); 
     if (unlitMaterial != null) 
      meshRenderer.material = unlitMaterial; 
     meshRenderer.material.mainTexture = texture; 
     gameObject.AddComponent<MeshFilter>().mesh = mesh; 
    } 
} 

(я пробовал различные материалы, такие как неосвещенные/текстуры при отсутствии эффекта)

Большого спасибо за любую помощь ;-)

ответ

0

Я думаю, что вам не хватает настройки UVs. Проверьте это: Unity3D answers link

, так как он имеет только 4 Verts, только трубка их (0,0) (0,1) (1,1) и (1,0): УВС [0] = новый Vector2 (0,0); ....

и установить его так: mesh.uv = uvs;

+0

Спасибо! Я действительно забыл урс, извините за довольно глупый вопрос. В случае, если кто-нибудь столкнется с этим вопросом, добавьте следующую строку: mesh.uv = new Vector2 [4] {Vector2.zero, new Vector2 (1, 0), новый Vector2 (1, 1), новый Vector2 (0 , 1)}; , чтобы этот базовый пример работал. – Lunkford

Смежные вопросы