Programowanie interakcji z otoczeniem
Paczki do zajęć:
Player i scena pokazowa
Konspekt zajęć:
- Dodawanie kolizji z drzewami
- Tworzenie fizycznej piłki plażowej
- Programowanie wyzwalaczy
- Pasek życia
Przebieg zajęć:
Krok 1: Dodajemy kolizję z drzewami. Znajdujemy w obiekcie terrain zakładkę odpowiadającą za sadzenie drzew (Paint Trees). Klikamy dwukrotnie w dodane drzewo a następnie w wykończonym okienku w nazwę obiektu Tree prefab. Dzięki temu zostanie znalezione na dysku drzewo, którego używaliśmy. Klikamy w to drzewo 2x i wchodzimy do środka prefabrykatu (będzie niebieskie tło na scenie), następnie w inspektorze dodajemy komponent Capsule Collider i dopasowujemy go do pnia drzewa. Po wyjściu wszystkie drzewa z tego modelu będą już miały kolizje.
Krok 2: Włączamy paint i tworzymy samodzielnie teksturę piłki plażowej :) Dodajemy na scenę obiekt 3D Share i przeciągamy do niego stworzoną teksturę. Wchodzimy następnie w opcje materiału, który się automatycznie utworzył. Modyfikujemy parametry Albedo, Metalic, Smoothness, Tiling oraz Offset, aby uzyskać satysfakcjonujący nas efekt.
Krok 3: Tworzymy w sekcji Project nowy materiał fizyczny dla piłki PPM -> Create -> Physical Material. Stworzony materiał przeciągamy na piłkę i modyfikujemy parametr Boundless. Dzięki temu nasza piłka będzie się odbijać :) Dodajemy do piłki drugi collider, większy od poprzedniego ale włączamy w nim opcję isTrigger. Dzięki temu pozwala on na wejście w siebie - będzie to obszar, w którym po wejściu spróbujemy podnieść piłkę. Dodajemy tag “Ball”.
Krok 4: Programujemy interakcję z wykorzystaniem triggerów - modyfikujemy skrypt Player Movement. Dodajemy metody: OnTriggerEnter(), OnTriggerExit(), OnTriggerStay().
Krok 5: Programujemy kopnięcie piłki na podstawie algorytmu skoku.
Krok 6: Tworzymy UI -> Canvas, ustawiamy komponent Canvas Scaler na Scale with screen size i wpisujemy rozdzielczość 1920x1080. Dodajemy do UI -> Legacy Text, w których wypiszemy napis “Naciśnij Q, aby kopnąć.”, Dodajemy również drugi Text na punkty życia.
Krok 7: Programujemy aktywację/dezaktywację napisu w wyzwalaczach OnTrigger. Tworzymy zmienną publiczną przechowującą napis, a następnie w wyzwalaczach zmieniamy jej widoczność przy pomocy SetActive(true/false).
Krok 8: Dodajemy na mapę wyróżniający się punkt ładujący życie. Dodajemy do niego Collider z włączoną opcją isTrigger. Dodajemy do niego tag “HealPoint”
Krok 9: Przechodzimy do skryptu, dodajemy zmienną przechowującą życie i w metodzie OnTriggerStay modyfikujemy jej wartość.
Krok 10: Testowanko i dodawanie efektów cząsteczkowych :)
Czym są zmienne?
To pudełka, w których przechowujemy wartości. Mogą one mieć różny kształt i rozmiar, dlatego też musimy definiować ich odpowiednie typy do konkretnych danych - to tak jak przelać mleko na płaski talerz zamiast do miski - niby się da, ale produkt i tak się nie zmieści, a prawdopodobnie się rozleje gdy spróbujemy z nim coś zrobić. Podstawowe typy danych rozróżniamy jako:
int - liczby całkowite (0, 14, -300),
float - liczby zmiennoprzecinkowe (0.5, 1.234, -40.333),
string - tekst (“przykładowy tekst”),
bool - typ logiczny (true, false). Silnik Unity posiada swoje własne typy danych związane z komponentami i elementami gry, np.
GameObject - podstawowy obiekt w grze
Transform - przechowywanie wektorów pozycji, rotacji i skali,
Rigidbody - przechowywanie wartości komponentu Rigidbody.
Czym są instrukcje warunkowe if?
Są to specjalne “rozdzielacze” w kodzie, które pozwalają sprawdzić poprawność podanego w nawiasie warunki i w zależności od wyniku pójść programowi jedną z dwóch dostępnych ścieżek. Konstrukcja if’a:
if(warunek)
{
// Co jeżeli prawda
}
else
{
//Co jeżeli fałsz
}
Czym są metody?
Są to wydzielone fragmenty kodu programu, które można wielokrotnie uruchamiać. Pozwalają one na estetyczne przeniesione i opisanie konkretnych funkcjonalności programu. W Unity istnieje wiele gotowych metod, które możemy używać np. Start(), Update(), FixedUpdate(), OnTriggerEnter();