Untitled

Transkrypt

Untitled
Zakładam, że Ty, osobo czytająca tę instrukcję, potrafisz już wstawiać obiekty oraz
narysować teren w Unity. A więc, bez zbędnego gadania, do skryptowania!
Krok 1. Wstawić obiekt – będzie to postać gracza.
Krok 2. Dodać graczowi komponent „Script”
Po kliknięciu „Add Component” należy wybrać „New Script”, a potem wpisać wybraną
nazwę skryptu. Możliwe jest też wybranie języka w jakim skrypt będzie pisany (C#,
JavaScript). Ta instrukcja będzie napisana w oparciu o C#.
W oknie „Assets” powinien pojawić się nowy plik – jest to nasz skrypt.
Krok 3. Otworzyć skrypt – domyślnie Unity używa MonoDevelop, a uruchomienie go
może chwilę zająć.
Krok 4. Świeżo utworzony skrypt składa się z jednej klasy (o nazwie takiej, jak plik)
oraz dwóch funkcji: Start oraz Update. Funkcja Start jest wywoływana jeden raz, na początku
gry. Update wywoływane jest co klatkę. Więcej informacji tutaj:
http://docs.unity3d.com/Manual/ExecutionOrder.html
Krok 5. Piszemy skrypt! Na początek chcemy, aby kamera podążała za graczem.
Stwórzmy więc zmienną publiczną klasy Camera o nazwie, na przykład, camera.
Krok 6. Załóżmy, że chcemy aby kamera latała za plecami gracza – trochę z tyłu, trochę
nad nim. Pozycją kamery będzie więc:
pozycja gracza – kierunek przodu gracza + kierunek góry gracza
Sama zmiana pozycji to jednak za mało, trzeba skierować obiektyw w odpowiednim
kierunku. Zróbmy więc skrypt podobny do:
Ale chwila! Skąd wiadomo, której kamery używać? Musimy powiedzieć skryptowi skąd
ją wziąć. W Unity w komponencie „Script” pojawiło się nowe pole:
Camera. Aż się prosi, żeby chwycić nazwę kamery z okna „Hierarchy” (po lewej, lista
obiektów na scenie) i przeciągnąć ją nad to pole. Puf, czary zakończone, skrypt już wie
którego obiektu używać. Można odpalić grę.
Krok 7. Kamera skacze? Nie dziwne – najpierw ustawiamy ją na obiekt, a potem go
przesuwamy. Co więc zrobić? Zamienić kolejność! Co więc zrobić, aby było jeszcze lepiej?
Użyć funkcji LateUpdate!
Krok 8. Kamera już działa, pora więc zrobić jakiś sensowniejszy ruch postaci.
Obiekt transform przechowuje wszystkie informacji o orientacji postaci w przestrzeni:
położenie, obrót, wielkość. Zmienna position jest wektorem opisującym położenie postaci.
Chcąc zmusić postać do chodzenia, musimy ją zmodyfikować – dodajmy do pozycji
transform.forward – kierunek „przód” naszego obiektu. A co robi to tajemnicze
Time.deltaTime? To czas, jaki upłynął między kolejnymi wywołaniami Update. Czy jest
stały? Może tak, może nie – to w dużym stopniu zależy od mocy komputera użytkownika.
Czemu mnożymy kierunek przez czas deltaTime? Żeby gracze z wolniejszymi komputerami
(mający automatycznie większe wartości deltaTime) nie poruszali się wolniej od graczy z
komputerami wyposażonymi w 5 kart graficznych (u których Update będzie wywoływane
częściej).
Jeszcze jedna rzecz, której pewnie da się domyślić – Input.GetKey() to funkcja
zwracająca prawdę jeśli podany klawisz jest wciśnięty.
Udało się przedrzeć przez pierwsze cztery linie, pora więc zrobić obrót postaci:
transform ma funkcję Rotate, do która oczekuje podania jak bardzo obiekt ma się obrócić. Ot,
cała magia.
Krok 9. Nasz gracz może już się poruszać. Stwierdzamy jednak, że zamiast Duke
Nukem Forever 2 chcemy zrobić Diablo 4. Potrzebujemy więc zrobić ruch przy pomocy
myszy. Gracz klika gdzieś na ekranie, a postać tam idzie.
Jeśli przycisk myszy jest wciśnięty (linia 31) wystrzeliwujemy promień sprawdzający
kolizje z obiektami na swej drodze. Zanim jednak to zrobimy, musimy przeliczyć pozycję
myszy na ekranie (Input.mousePosition) na pozycję w świecie gry.
Trafiliśmy w coś, więc zapiszmy pozycję tego czegoś (hit.point) w nowej zmiennej
naszej klasy: Vector3 targetPosition.
Gdy postać jest daleko od tego punktu, to przesuńmy ją powoli w jego stronę (linia 28).
Krok 10. O ile wszystko poszło zgodnie z planem, to mamy postać ‘biegającą’ po
mapie. Cóż to jednak za Hack’n’Slash bez broni? Dajmy więc graczowi możliwość strzelania
pociskami.
Dodajmy na scenę jakiś obiekt – na przykład kostkę. Co się stanie, gdy przeciągniemy
jego nazwę z okna „Hierarchy” do okna „Assets”? Po pierwsze zmienimy jego nazwę w
„Hierarchy” na niebieską, a po drugie utworzymy taki twór jak prefab:
http://docs.unity3d.com/Manual/Prefabs.html
Wracając do strzelania: dodajmy do klasy nową zmienną publiczną, typu GameObject o
nazwie na przykład bullet.
Ponownie, jak przy kamerze, musimy jakiś obiekt podpiąć do tej zmiennej.
Przeciągnijmy naszą cudną kostkę z okna „Assets” na pole Bullet – od teraz jest to pocisk,
którym strzelać będzie gracz.
Pora na pisanie - po wciśnięciu spacji chcemy wystrzelić pocisk:
Póki wciśnięta jest spacja, tworzona jest kopia obiektu zapisanego w zmiennej bullet
oraz ustawiana jest mu pozycja i obrót postaci gracza. Jest jeden problem – pociski się nie
ruszają. Co więc należy zrobić?
Zmusić studentów do samodzielnej pracy!
Zadanie 1. Utworzyć skrypt poruszający pociskami.
Zadanie 2. Sprawić, że postać obraca się w kierunku w którym idzie (albo przynajmniej
sama kamera, ale postać chyba łatwiej obrócić).
Zadanie 3. Dać postaci pochodnię (obiekt z komponentem „Light”, któremu ustawiana
będzie pozycja w okolicach czegoś, co można będzie uznać za rękę postaci)
Zadanie 4. Jeśli ktoś tego nie zrobił, to zmodyfikować skrypt pocisków tak, aby były
niszczone po jakimś czasie (funkcja Destroy).