unity 3d - pierwsze skryptyradmat/tippgk/cwiczenia03.pdf · 2018-08-26 · dr radosław matusik...
TRANSCRIPT
Unity 3D - pierwsze skrypty
dr Radosław Matusik
www.math.uni.lodz.pl/˜radmat
dr Radosław Matusik Unity 3D - pierwsze skrypty
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
Dokumentacja
Dokumentację znajdą Państwo pod adresem
https://docs.unity3d.com/Manual/index.html
dr Radosław Matusik Unity 3D - pierwsze skrypty
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
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
Skrypt timer.js
private var time: float;function Start(){}function Update(){time++;print(time);}
dr Radosław Matusik Unity 3D - pierwsze skrypty
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
Ż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
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
Ćwiczenie 1
Proszę tak zmodyfikować poprzedni skrypt, żeby wyświetlały sięminuty i sekundy.
dr Radosław Matusik Unity 3D - pierwsze skrypty
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
Rysunek: Uruchomiona gra z zegarem
dr Radosław Matusik Unity 3D - pierwsze skrypty
Ć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
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
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
Rysunek: Obracający się przedmiot
dr Radosław Matusik Unity 3D - pierwsze skrypty
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
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
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
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
Ć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