Unity Manual User Guide Asset Import and Creation Using Scripts

Korzystanie ze skryptów

Jest to krótkie wprowadzenie na temat tworzenia i wykorzystania skryptów w projekcie. W celu szczegółowego zapoznania się z informacjami na temat API Skrypt, proszę zajrzeć do Scripting Reference. Dla uzyskania szczegółowych informacji na temat tworzenia gry poprzez skrypty, proszę zobaczyć Tworzenie Gameplay w niniejszej instrukcji.

Programowanie w Unity wykonuje się poprzez pisanie prostych scenariuszy zachowań w JavaScript, C# lub Boo. Można użyć jednego lub wszystkich języków skryptów w jednym projekcie, nie ma zastrzeżeń by używać więcej niż jednego. Jeśli nie zaznaczono inaczej, wszystkie przykłady skryptów będą przedstawione w JavaScript.

Tworzenie nowych skryptów

W przeciwieństwie do innych składowych, takich jak Meshes lub Tekstury, Skrypty mogą być tworzone w Unity. Aby utworzyć nowy skrypt, otwórz Assets→Create→JavaScript (lub Assets→Create→C Sharp Script lub Assets→Create→Boo Script) z menu głównego. Stworzy to nowy skrypt o nazwie NewBehaviourScript i umieścić go w wybranym folderze w Project View. Jeśli folder nie jest zaznaczony w Project View, skrypt zostanie utworzony na poziomie głównym.

scripting-0.jpg

Można edytować skrypt poprzez dwukrotne kliknięcie skryptu w Project View. Spowoduje to uruchomienie domyślnie wybranego edytora w preferencjach Unity. Możesz pisać wszystkie skryty w zewnętrznym edytorze tekstowym, a nie bezpośrednio w Unity. Aby ustawić domyślny edytor skryptu, zmień ustawiając w menu Edit→Preferences→External Tools→External Script editor.

To jest zawartość nowego, pustego skryptu:

function Update(){
}

Nowy, pusty skrypt nie zrobi nic samodzielnie, dodajmy więc jakąś funkcjonalność. Zmień skrypt aby wyglądał następująco:

function Update(){
	print("Hello World");
}

Wykonanie tego kodu wyświetli „Hello World” w konsoli. Ale nie ma jeszcze niczego co spowoduje że kod zostanie wykonany. Musimy dołączyć skrypt do aktywnego GameObject na scenie, zanim zostanie wykonany.

Dołączanie skryptów do objektów

Zapisz powyższy skrypt i utwórz nowy obiekt na scenie, wybierając GameObject→Create Other→Cube. Spowoduje to utworzenie nowego GameObject o nazwie „Cube” na bieżącej scenie.

scripting-1.jpg

Teraz przeciągnij skrypt z widoku projektu do sześcianu (do widoku sceny lub Hierarchy View, nie ma znaczenia). Możesz również zaznaczyć Cube a z menu wybrać Component→Scripts→New Behaviour Script. Każdy z tych sposobów dołącza skrypt do sześcianu. Każdy skrypt po utworzeniu pojawia się w menu Component→Scripts. Jeśli zmieniono nazwę skryptu, w menu nazwa też się zmieni.

scripting-2.jpg

Jeśli wybierzesz Cube i spojrzysz na Inspector, zobaczysz że skrypt jest teraz widoczny. Oznacza to, że został dołączony.

scripting-3.jpg

Naciśnij Play, aby przetestować swoje dzieło. W konsoli Powinieneś zobaczyć tekst „Hello World”. Po obejrzeniu w celu zatrzymania odtwarzania kliknij ponownie Play.

scripting-4.jpg

Manipulowanie GameObject

Instrukcja print() może być bardzo przydatne podczas debugowania skryptu, ale nie do manipulowania dołączonym GameObjectem. Zmieńmy ten skrypt, aby dodać jakąś funkcjonalność:

function Update(){
	transform.Rotate(0, 5*Time.deltaTime, 0);
}

Jeśli nie masz wprawy w pisaniu skryptów to nic złego. Tutaj są ważne koncepcje aby to zrozumieć:

  1. function Update(){} jest to pojemnik dla kodu, który wykonuje Unity kilka razy na sekundę (jeden raz w ramce). patrz→Klatki na sekundę
  2. transform jest referencją do GameObject Transform Component.
  3. Rotate() jest funkcją/metodą zawartą w Transform Component.
  4. Liczby rozdzielone przecinkami reprezentują stopnie obrotu wokół poszczególnych osi przestrzeni 3D: X, Y i Z.
  5. Time.deltaTime jest zmienna klasy Time, współczynnikiem który wyrównuje ruch na jedna sekundę,tak że sześcian obraca się z tą sama prędkością nieżależnie od tego ile klatek na sekunde zostało wyrenderowanych przez komupter. Dlatego też 5 * Time.deltaTime oznacza 5 stopni na sekundę.

Mając to wszystko na uwadze, możemy odczytać ten kod jako: każdorazowo co klatkę obracaj GameObject komponentem Transform o mały kawałek, tak by w całości wynosiło to pięć stopni wokół osi Y na każdą sekundę. (5/FPS)

Można uzyskać dostęp do wielu różnych komponentów w ten sam sposób jak my uzyskaliśmy dostęp do transform. Trzeba dodać komponent do GameObject za pomocą menu Component. Wszystkie elementy do których można łatwo uzyskać dostęp wymienione są w zmiennych (Variables) na stronie GameObject Scripting Reference.

W celu uzyskania większej ilości informacji na temat relacji między GameObjectami, skryptami i komponentami, należy przejść od razu do GameObject'y lub do strony Korzystanie z komponentów w tej instrukcji.

Siła zmiennych

Nasz skrypt jak dotąd zawsze będzie obracać sześcian 5 stopni na sekundę.

Moglibyśmy chcieć obracać różną liczbę stopni na sekundę. Możemy zmienić liczbę i zapisać, ale wtedy musimy poczekać na re-kompilacje skryptu i ponownie wejść w tryb odtwarzania, zanim zobaczymy wyniki. Istnieje znacznie szybszy sposób to zrobić. Możemy eksperymentować z prędkościami obrotów w czasie rzeczywistym w trybie odtwarzania, i jest to łatwe do zrobienia.

Zamiast wpisywać 5 do funkcji Rotate(), zadeklarujemy zmienną speed i użyjemy ją w funkcji. Zmień skrypt na poniższy kod i zapisz go:

var speed = 5.0;
 
function Update(){
	transform.Rotate(0, speed*Time.deltaTime, 0);
}

Teraz wybierz Cube i popatrz na Inspector. Zauważ, gdzie nasza zmienna speed się pojawiła.

scripting-5.jpg

Zmienna ta może teraz być modyfikowana bezpośrednio w oknie Inspector, podobnie jak zmienia się nazwy pliku w eksploratorze plików. Zaznacz, naciśnij i zmień wartość. Można również trzymając lewy przycisk myszy nad nazwa zmiennej przeciągać w górę i dół lub lewo i w prawo. Możesz zmienić zmienną w każdej chwili, nawet gdy gra jest uruchomiona.

Kliknij Play i spróbuj zmodyfikować wartość speed. Prędkość obrotowa sześcianu zmieni natychmiast. Po wyjściu z trybu odtwarzania, zobaczysz, że twoje zmiany powróciły do wartości przed przejściem w tryb odtwarzania. W ten sposób można grać, regulować i eksperymentować, aby znaleźć najlepszą wartość, a następnie zastosować tę wartość na stałe.

Stosując tą metodę zmiany wartość zmiennej w Inspektorze oznacza, że można ponownie wykorzystać jeden skrypt dla wielu obiektów, każdy z inną wartością zmiennej. Jeśli dołączysz skrypt do wielu kostek i zmienisz zmienną speed każdej kostki, będą one obracać się z różnymi prędkościami, nawet jeśli używasz tego samego skryptu.

Dostęp do innych komponentów

Podczas pisania skryptu komponentu, można uzyskać dostęp do innych komponentów w GameObject od wnętrza skryptu.

Korzystanie z elementów GameObject

Możesz mieć bezpośredni dostęp do każdego elementu klasy GameObject. Listę wszystkich elementów klasy GameObject możesz zobaczyć tutaj. Jeśli któraś ze wskazanych klas jest dołączona do GameObject jako komponent, można uzyskać dostęp do tego komponentu bezpośrednio poprzez skrypt po prostu wpisując nazwę elementu. Na przykład, wpisując transform jest równoznaczne z gameObject.transform. Kompilator gameObject zakłada to z góry, chyba że specjalnie odwołujesz się do innego GameObject.

Wpisując this będziesz miał dostęp do komponentów skryptu w którym piszesz. Wpisując this.gameObject odwołujesz się do GameObjecu do którego skrypt został dołączony. Można uzyskać dostęp do tego samego GameObject po prostu wpisując gameObject. Logicznie rzecz biorąc, wpisywanie this.transform jest tym samym co wpisanie transform. Jeśli chcesz uzyskać dostęp do komponentu, który nie jest dołączany jako element GameObject, musisz wykorzystać metodę gameObject.GetComponent() która zostanie wyjaśniona kilka wersów niżej.

Istnieje wiele komponentów, które mogą być bezpośrednio dostępne w każdym skrypcie. Na przykład, jeśli chcesz uzyskać dostęp do funkcji Translate komponentu Transform, możesz po prostu napisać transform.Translate() lub gameObject.transform.Translate(). To działa, ponieważ wszystkie skrypty są dołączone do GameObject. Więc kiedy piszesz transform masz bezpośredni dostęp do komponentu Transform w GameObject poddawanemu oskryptowanu. Bardziej formalnie napiszesz gameObject.transform. Nie ma przewagi jednej metody nad drugą, to wszystko kwestia preferencji osoby skryptującej.

Aby zobaczyć listę wszystkich komponentów do których można uzyskać dostęp pośrednio, zobacz na stronę GameObject w Scripting Reference.

Używanie GetComponent() Istnieje wiele komponentów, które nie są wymienione bezpośrednio jako elementy klasy GameObject. Nie można więc z nich korzystać w sposób domyślny, musisz z nich korzystać w sposób jawny. Można to zrobić poprzez wywołanie GetComponent(„nazwa komponentu”) i przechowywania odwołania (referencji) do wyniku. Tak jest najczęściej gdy chcesz zrobić odwołanie do innego skryptu dołączonego do GameObject.

Załóżmy że piszesz ScriptB i chcesz zrobić odwołanie do ScriptA, który dołączony jest do tego samego GameObject. Aby uzyskać odniesienie musiałbyś użyć GetComponent() w ScriptB, możesz po prostu napisać:

scriptA = GetComponent(„ScriptA”);

Wówczas otrzymujesz dostęp do dowolnych zmiennych w ScriptA pisząc scriptA.variableName wewnątrz ScriptB. Aby uzyskać dodatkową pomoc dotyczącą używania GetComponent(), zobacz GetComponent() na stronie Script Reference.

Gdzie można iść z tego miejsca

To był tylko krótki wstęp na temat używania skryptów wewnątrz edytora. Aby uzyskać więcej przykładów, przejdź do Tutoriali.

Należy również zapoznać się ze Scripting Overview wewnątrz Script Reference, który zawiera dokładniejsze wprowadzenie do skryptów w Unity plus odnośniki odsyłające do dogłębnych informacji. Jeśli naprawdę nie wiesz co zrobić, należy odwiedzić Unity Answers or Unity Forums i zadawać pytania. Zawsze znajdzie się tam ktoś chętny do pomocy.


Poprzedni Następny

unity_manual/scripting.txt · ostatnio zmienione: 2012/09/30 11:39 (edycja zewnętrzna)
Recent changes RSS feed Debian Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki