Ejemplo - Creando un Plano de Cartelera
Unity viene con objetos primitivos como Plane y Quad para representar superficies planas (ver la página de Objetos primitivos para detalles adicionales). Sin embargo, es útil examinar cómo un mesh mínimo de un plano puede ser construido, ya que este es probablemente el ejemplo más simple y útil, con solo cuarto vértices para las esquinas y dos triángulos.
La primera cosa para configurar es el arreglo de vértices. Nosotros asumiremos que un plano está en los ejes X y Y y dejemos que su anchura y altura sea determinada por unas variables de parámetro. Nosotros vamos a proporcionar los vértices en el orden de inferior-izquierdo, inferior-derecho, superior-izquierda, superior-derecho.
var vertices: Vector3[] = new Vector3[4];
vertices[0] = new Vector3(0, 0, 0);
vertices[1] = new Vector3(width, 0, 0);
vertices[2] = new Vector3(0, height, 0);
vertices[3] = new Vector3(width, height, 0);
mesh.vertices = vertices;
(Ya que las propiedades de los datos del Mesh ejecutan código detrás de escenas, e más eficiente configurar los datos en su propio arreglo y luego asignarlos a una propiedad en vez de acceder al arreglo de propiedades elemento por elemento.)
Luego vienen los triángulos. Ya que nosotros queremos dos triángulos, cada uno definido por tres enteros, el arreglo de triángulos tendrá seis elementos en total. Recuerde la regla de las manillas del reloj para ordenar las esquinas, el triángulo inferior izquierdo utilizará 0, 2, 1 como su esquina lo indica mientras que el triángulo superior derecho utilizará 2, 3, 1.
var tri: int[] = new int[6];
// Lower left triangle.
tri[0] = 0;
tri[1] = 2;
tri[2] = 1;
// Upper right triangle.
tri[3] = 2;
tri[4] = 3;
tri[5] = 1;
mesh.triangles = tri;
Un mesh con solo los vértices y triángulos configurados serán visibles en el editor pero no se verán muy convincente ya que no está correctamente shaded (sombreado) sin normales. Las normales para el plano son muy simples - todas son idénticas y apunta en la dirección negativa Z en el espacio local del plano. Con las normales agregadas, el plano va a correctamente ser shaded (sombreado) pero recuerde que usted necesita una luz en la escena para ver el efecto.
var normals: Vector3[] = new Vector3[4];
normals[0] = -Vector3.forward;
normals[1] = -Vector3.forward;
normals[2] = -Vector3.forward;
normals[3] = -Vector3.forward;
mesh.normals = normals;
Finalmente, agregar coordenadas de texturas al mesh va a habilitar que muestre un material correctamente. Asumiendo que nosotros queremos mostrar la imagen completa a través del plano, los valores UV serán todos 0 o 1, correspondiendo a las esquinas de la textura.
var uv: Vector2[] = new Vector2[4];
uv[0] = new Vector2(0, 0);
uv[1] = new Vector2(1, 0);
uv[2] = new Vector2(0, 1);
uv[3] = new Vector2(1, 1);
mesh.uv = uv;
El script completo se podría ver algo así:-
var width: float;
var height: float;
function Start() {
var mf: MeshFilter = GetComponent.<MeshFilter>();
var mesh = new Mesh();
mf.mesh = mesh;
var vertices: Vector3[] = new Vector3[4];
vertices[0] = new Vector3(0, 0, 0);
vertices[1] = new Vector3(width, 0, 0);
vertices[2] = new Vector3(0, height, 0);
vertices[3] = new Vector3(width, height, 0);
mesh.vertices = vertices;
var tri: int[] = new int[6];
tri[0] = 0;
tri[1] = 2;
tri[2] = 1;
tri[3] = 2;
tri[4] = 3;
tri[5] = 1;
mesh.triangles = tri;
var normals: Vector3[] = new Vector3[4];
normals[0] = -Vector3.forward;
normals[1] = -Vector3.forward;
normals[2] = -Vector3.forward;
normals[3] = -Vector3.forward;
mesh.normals = normals;
var uv: Vector2[] = new Vector2[4];
uv[0] = new Vector2(0, 0);
uv[1] = new Vector2(1, 0);
uv[2] = new Vector2(0, 1);
uv[3] = new Vector2(1, 1);
mesh.uv = uv;
}
Tenga en cuenta que si el código es ejecutado una vez en la función Start entonces el mesh se mantendrá a través del juego. Sin embargo, usted puede fácilmente colocar el código en la función Update para permitirle al mesh ser cambiado cada frame (aunque esto va a aumentar la carga del CPU considerablemente).