Tworzenie plane'a z teksturą z poziomu skryptu 15647 0

O temacie

Autor inż. Avallach

Zaczęty 14.05.2012 roku

Wyświetleń 15647

Odpowiedzi 0

inż. Avallach

inż. Avallach

Administrator
posty7662
Propsy5238
NagrodyV
ProfesjaProgramista
  • Administrator

inż. Avallach
Administrator

Tworzenie plane'a z teksturą z poziomu skryptu
2012-05-14, 16:00(Ostatnia zmiana: 2012-05-14, 18:58)
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


0 użytkowników i 1 Gość przegląda ten wątek.
0 użytkowników
Do góry