Plane wchodzący w skład standardowych primitives w Unity jest w rzeczywistości siatką 10x10, więc ma 200 tris - równo 100x więcej niż powinien mieć w większości zastosowań. Ponadto czasami potrzeba tworzyć je w trakcie gry, a korzystanie w tym celu z prefabów czy wyświetlanie na scenie obiektów które były przygotowane od początku może nie mieć sensu. Dlatego napisałem prosty skrypt który w całości z poziomu kodu tworzy model dwótrójkątowego plane'a o wybranych rozmiarach i nakłada na niego daną teksturę zawartą w folderze Assets/Resources.
static function CreatePlane (x : float, z : float, texturename : String) : GameObject
{
var object : GameObject = new GameObject (texturename); //najpierw trzeba stworzyć obiekt, który będzie nośnikiem modelu, domyślna nazwa to nazwa tekstury
var mesh : Mesh = new Mesh (); //najpierw tworzymy mesh w pamięci
mesh.vertices = [Vector3 (0, 0, 0), Vector3 (x, 0, 0), Vector3 (0, 0, z), Vector3 (x, 0, z)]; //definiujemy wierzchołki modelu za pomocą ich koordynatów w pzestrzeni, ich numery to 0...n.
mesh.triangles = [0, 2, 3, 0, 3, 1]; //każde trzy cyfry, to wierzchołki następnego trójkąta podane w kolejności zgodnej z ruchem wskazówek zegara (tutaj tylko dwa trójkąty, więc 6 cyfr)
mesh.uv = [Vector2 (0, 0), Vector2 (1, 0), Vector2 (0, 1), Vector2 (1, 1)]; //UVka ma być możliwie prosta, to po prostu kwadrat o rogach w narożnikach plane'a
mesh.RecalculateNormals(); //potrzebne dla prawidłowego oświetlenia naszego plane'a
object.AddComponent.<MeshFilter>().mesh = mesh; //przypisujemy utworzony w pamięci mesh do naszego obiektu
object.AddComponent.<MeshRenderer>().material.mainTexture = Resources.Load(texturename) as Texture; //przypisujemy teksturę do obiektu
return object; //zwracamy obiekt, tak że może być od razu użyty - na przykład można mu od razu zmienić nazwę
};
Na UnifyCommunity Wiki jest skrypt edytorowego generatora, który tworzy plane'a-siatkę o określonej ilości pól, jednak nie tworzy jego mapy UV ani nie nakłada na niego tekstury, nie jest też przeznaczony do używania w samej grze, a jedynie podczas ręcznej pracy w edytorze:
http://www.unifycommunity.com/wiki/index.php?title=CreatePlane