Unity 3D - pierwsze skryptyradmat/tippgk/Cwiczenia03.pdf · 2018-08-26 · dr Radosław Matusik...

21
Unity 3D - pierwsze skrypty dr Radoslaw Matusik www.math.uni.lodz.pl/˜radmat dr Radoslaw Matusik Unity 3D - pierwsze skrypty

Transcript of Unity 3D - pierwsze skryptyradmat/tippgk/Cwiczenia03.pdf · 2018-08-26 · dr Radosław Matusik...

Page 1: Unity 3D - pierwsze skryptyradmat/tippgk/Cwiczenia03.pdf · 2018-08-26 · dr Radosław Matusik Unity 3D - pierwsze skrypty. Rysunek:Obracający się przedmiot dr Radosław Matusik

Unity 3D - pierwsze skrypty

dr Radosław Matusik

www.math.uni.lodz.pl/˜radmat

dr Radosław Matusik Unity 3D - pierwsze skrypty

Page 2: Unity 3D - pierwsze skryptyradmat/tippgk/Cwiczenia03.pdf · 2018-08-26 · dr Radosław Matusik Unity 3D - pierwsze skrypty. Rysunek:Obracający się przedmiot dr Radosław Matusik

Cel ćwiczeń

Celem bieżących ćwiczeń jest napisanie pierwszych, prostychskryptów, m.in wyświetlających upływający czas gry oraz jej stan.Wykorzystamy projekt z poprzednich ćwiczeń (labirynt).

dr Radosław Matusik Unity 3D - pierwsze skrypty

Page 3: Unity 3D - pierwsze skryptyradmat/tippgk/Cwiczenia03.pdf · 2018-08-26 · dr Radosław Matusik Unity 3D - pierwsze skrypty. Rysunek:Obracający się przedmiot dr Radosław Matusik

Dokumentacja

Dokumentację znajdą Państwo pod adresem

https://docs.unity3d.com/Manual/index.html

dr Radosław Matusik Unity 3D - pierwsze skrypty

Page 4: Unity 3D - pierwsze skryptyradmat/tippgk/Cwiczenia03.pdf · 2018-08-26 · dr Radosław Matusik Unity 3D - pierwsze skrypty. Rysunek:Obracający się przedmiot dr Radosław Matusik

Edytor

Skrypty można pisać w różnych edytorach (np. w zintegrowanym zUnity MonoDevelop). Wyboru edytora można dokonać wybierającEdit | Preferences i zakładkę External Tools.

dr Radosław Matusik Unity 3D - pierwsze skrypty

Page 5: Unity 3D - pierwsze skryptyradmat/tippgk/Cwiczenia03.pdf · 2018-08-26 · dr Radosław Matusik Unity 3D - pierwsze skrypty. Rysunek:Obracający się przedmiot dr Radosław Matusik

Tworzenie skryptów

Do projektu z poprzednich zajęć (labiryntu) dopiszemy skryptwyświetlający czas gry. W tym celu w drzewie projektu tworzymynowy katalog o nazwie scripts bezpośrednio w katalogu Assets. Wtym celu z menu kontekstowego wybieramy Create | Folder. Wtak utworzonym folderze tworzymy plik, w którym napiszemypierwszy skrypt. W tym celu wybieramy Assets | Create |Javascript i zmieniamy nazwę pliku na timer. Następnie klikamydwukrotnie na ikonę stworzonego przed chwilą pliku i w otwartymedytorze MonoDevelop wpisujemy następujący kod:

dr Radosław Matusik Unity 3D - pierwsze skrypty

Page 6: Unity 3D - pierwsze skryptyradmat/tippgk/Cwiczenia03.pdf · 2018-08-26 · dr Radosław Matusik Unity 3D - pierwsze skrypty. Rysunek:Obracający się przedmiot dr Radosław Matusik

Skrypt timer.js

private var time: float;function Start(){}function Update(){time++;print(time);}

dr Radosław Matusik Unity 3D - pierwsze skrypty

Page 7: Unity 3D - pierwsze skryptyradmat/tippgk/Cwiczenia03.pdf · 2018-08-26 · dr Radosław Matusik Unity 3D - pierwsze skrypty. Rysunek:Obracający się przedmiot dr Radosław Matusik

Dodawanie skryptu do projektu

Z menu wybieramy GameObject | Create Empty izmieniamy jego nazwę na timer.

Przeciągamy skrypt timer.js na obiekt timer.

dr Radosław Matusik Unity 3D - pierwsze skrypty

Page 8: Unity 3D - pierwsze skryptyradmat/tippgk/Cwiczenia03.pdf · 2018-08-26 · dr Radosław Matusik Unity 3D - pierwsze skrypty. Rysunek:Obracający się przedmiot dr Radosław Matusik

Żeby zobaczyć efekt działania programu należy otworzyć oknokonsoli Shift + Ctrl + C, a następnie uruchomić scenę wybierającCtrl + P.Zmodyfikujmy teraz powyższy skrypt tak, aby zamiast ramekwyświetlać czas w sekundach. W tym celu napiszmy

function Update(){time = time + Time.deltaTime;print(time);}

dr Radosław Matusik Unity 3D - pierwsze skrypty

Page 9: Unity 3D - pierwsze skryptyradmat/tippgk/Cwiczenia03.pdf · 2018-08-26 · dr Radosław Matusik Unity 3D - pierwsze skrypty. Rysunek:Obracający się przedmiot dr Radosław Matusik

Debugowanie

W edytorze MonoDevelop wybieramy View | Debug Windows |Locals.We fragmencie kodu, który chcemy zdebugować wystarczy wpisaćDebug.Log(”Tekst”). Wówczas, po uruchomieniu projektu,będziemy mogli sprawdzać, czy wykonuje się dany fragment kodu.

dr Radosław Matusik Unity 3D - pierwsze skrypty

Page 10: Unity 3D - pierwsze skryptyradmat/tippgk/Cwiczenia03.pdf · 2018-08-26 · dr Radosław Matusik Unity 3D - pierwsze skrypty. Rysunek:Obracający się przedmiot dr Radosław Matusik

Ćwiczenie 1

Proszę tak zmodyfikować poprzedni skrypt, żeby wyświetlały sięminuty i sekundy.

dr Radosław Matusik Unity 3D - pierwsze skrypty

Page 11: Unity 3D - pierwsze skryptyradmat/tippgk/Cwiczenia03.pdf · 2018-08-26 · dr Radosław Matusik Unity 3D - pierwsze skrypty. Rysunek:Obracający się przedmiot dr Radosław Matusik

Umieszczanie zegara na ekranie

Przechodzimy na zakładkę Game.

Wybieramy GameObject | UI | Text.Zmieniamy nazwę obiektu na UI timer.

W zakładce Rect Transform ustawiamy pozycje x , y oraz zna zero, co spowoduje wyświetlenie domyślnego tekstu naśrodku ekranu.

Uruchamiamy grę.

dr Radosław Matusik Unity 3D - pierwsze skrypty

Page 12: Unity 3D - pierwsze skryptyradmat/tippgk/Cwiczenia03.pdf · 2018-08-26 · dr Radosław Matusik Unity 3D - pierwsze skrypty. Rysunek:Obracający się przedmiot dr Radosław Matusik

Rysunek: Uruchomiona gra z zegarem

dr Radosław Matusik Unity 3D - pierwsze skrypty

Page 13: Unity 3D - pierwsze skryptyradmat/tippgk/Cwiczenia03.pdf · 2018-08-26 · dr Radosław Matusik Unity 3D - pierwsze skrypty. Rysunek:Obracający się przedmiot dr Radosław Matusik

Ćwiczenie 2

Proszę zmienić pozycję zegara tak, aby znajdował się w lewymdolnym rogu ekranu, a tekst był wyświetlany większą czcionką.

dr Radosław Matusik Unity 3D - pierwsze skrypty

Page 14: Unity 3D - pierwsze skryptyradmat/tippgk/Cwiczenia03.pdf · 2018-08-26 · dr Radosław Matusik Unity 3D - pierwsze skrypty. Rysunek:Obracający się przedmiot dr Radosław Matusik

Działający zegar

Żeby zegar zaczął odliczać czas, musimy zmodyfikować funkcjęUpdate następująco:

time = time + Time.deltaTime;minutes = time/60;seconds = time%60;print(minutes + ":" + seconds);

var textToDisplay:String = minutes+":"+seconds;GameObject.Find("UI_timer").GetComponent(UI.Text)

.text = textToDisplay;

dr Radosław Matusik Unity 3D - pierwsze skrypty

Page 15: Unity 3D - pierwsze skryptyradmat/tippgk/Cwiczenia03.pdf · 2018-08-26 · dr Radosław Matusik Unity 3D - pierwsze skrypty. Rysunek:Obracający się przedmiot dr Radosław Matusik

Obracający się obiekt

Dodamy teraz nowy obiekt (apteczkę pierwszej pomocy), którybędzie się obracał.Proszę znaleźć w Internecie i zaimportować do projektu teksturęapteczki pierwszej pomocy, następnie stworzyć nowy obiekt(sześcian) i nałożyć tę teksturę. Następnie tworzymy następującyskrypt rotate medpack:

function Update(){transform.Rotate(Vector3(0,1,0), 90*Time.deltaTime);}

dr Radosław Matusik Unity 3D - pierwsze skrypty

Page 16: Unity 3D - pierwsze skryptyradmat/tippgk/Cwiczenia03.pdf · 2018-08-26 · dr Radosław Matusik Unity 3D - pierwsze skrypty. Rysunek:Obracający się przedmiot dr Radosław Matusik

Rysunek: Obracający się przedmiot

dr Radosław Matusik Unity 3D - pierwsze skrypty

Page 17: Unity 3D - pierwsze skryptyradmat/tippgk/Cwiczenia03.pdf · 2018-08-26 · dr Radosław Matusik Unity 3D - pierwsze skrypty. Rysunek:Obracający się przedmiot dr Radosław Matusik

Wykrywanie kolizji

Dodamy teraz tag, który będzie nas informował o powstałej kolizjiz przedmiotem (w naszym przypadku z apteczką). W tym celu:

Zaznaczamy obiekt apteczka w oknie Hierarchy.

Z okna Inspector wybieramy Tag | Add tag.Klikamy plus obok listy i podajemy nazwę tagu, np.apteczka, po czym klikamy Save.

Żeby zastosować tag klikamy obiekt apteczka w oknieHierarchy.

W oknie Inspector rozwijamy listę Tag i wybieramyapteczka.

dr Radosław Matusik Unity 3D - pierwsze skrypty

Page 18: Unity 3D - pierwsze skryptyradmat/tippgk/Cwiczenia03.pdf · 2018-08-26 · dr Radosław Matusik Unity 3D - pierwsze skrypty. Rysunek:Obracający się przedmiot dr Radosław Matusik

Tworzymy skrypt wykrywający kolizję

W nowym skrypcie detect collision wpisujemy następujący kod:

function OnControllerColliderHit(c : ControllerColliderHit){print("Kolizja z " + c.gameObject.tag);}

Teraz wystarczy dodać skrypt do FPSController.

dr Radosław Matusik Unity 3D - pierwsze skrypty

Page 19: Unity 3D - pierwsze skryptyradmat/tippgk/Cwiczenia03.pdf · 2018-08-26 · dr Radosław Matusik Unity 3D - pierwsze skrypty. Rysunek:Obracający się przedmiot dr Radosław Matusik

Testujemy wykrywanie kolizji

Otwieramy okno konsoli wybierając Shift + Ctrl + C iuruchamiamy grę. Po kolizji z apteczką w oknie konsolipowinniśmy otrzymać odpowiedni komunikat.Uwaga! Zauważmy, że w oknie konsoli cały czas otrzymujemykomunikat ”Collision with Untagged”. Jest to spowodowanefaktem, że nasz gracz porusza się cały czas i jest w kolizji zpodłożem.

dr Radosław Matusik Unity 3D - pierwsze skrypty

Page 20: Unity 3D - pierwsze skryptyradmat/tippgk/Cwiczenia03.pdf · 2018-08-26 · dr Radosław Matusik Unity 3D - pierwsze skrypty. Rysunek:Obracający się przedmiot dr Radosław Matusik

Niszczymy wykorzystany w grze obiekt

Zmodyfikujemy teraz skrypt tak, żeby po kolizji z przedmiotem tenznikał ze sceny (czyli gdy zostanie wykorzystany). W tym celu dojuż istniejącej funkcji wystarczy dopisać następujący kod:

if (c.gameObject.tag == "apteczka"){Destroy(c.gameObject);}

dr Radosław Matusik Unity 3D - pierwsze skrypty

Page 21: Unity 3D - pierwsze skryptyradmat/tippgk/Cwiczenia03.pdf · 2018-08-26 · dr Radosław Matusik Unity 3D - pierwsze skrypty. Rysunek:Obracający się przedmiot dr Radosław Matusik

Ćwiczenie 3

Proszę teraz umieścić w labiryncie pistolet, klucze i jakiekolwiekinne przedmioty o identycznych własnościach, jakie ma apteczka.

dr Radosław Matusik Unity 3D - pierwsze skrypty