www.math.uni.lodz.pl/ radmat
Cel ćwiczeń Celem bieżących ćwiczeń jest napisanie pierwszych, prostych skryptów, m.in wyświetlających upływający czas gry oraz jej stan. Wykorzystamy projekt z poprzednich ćwiczeń (labirynt).
Dokumentacja Dokumentację znajdą Państwo pod adresem https://docs.unity3d.com/manual/index.html
Edytor Skrypty można pisać w różnych edytorach (np. w zintegrowanym z Unity MonoDevelop). Wyboru edytora można dokonać wybierając Edit Preferences i zakładkę External Tools.
Tworzenie skryptów Do projektu z poprzednich zajęć (labiryntu) dopiszemy skrypt wyświetlający czas gry. W tym celu w drzewie projektu tworzymy nowy katalog o nazwie scripts bezpośrednio w katalogu Assets. W tym celu z menu kontekstowego wybieramy Create Folder. W tak utworzonym folderze tworzymy plik, w którym napiszemy pierwszy skrypt. W tym celu wybieramy Assets Create Javascript i zmieniamy nazwę pliku na timer. Następnie klikamy dwukrotnie na ikonę stworzonego przed chwilą pliku i w otwartym edytorze MonoDevelop wpisujemy następujący kod:
Skrypt timer.js private var time: float; function Start() { } function Update() { time++; print(time); }
Dodawanie skryptu do projektu Z menu wybieramy GameObject Create Empty i zmieniamy jego nazwę na timer. Przeciągamy skrypt timer.js na obiekt timer.
Żeby zobaczyć efekt działania programu należy otworzyć okno konsoli Shift + Ctrl + C, a następnie uruchomić scenę wybierając Ctrl + P. Zmodyfikujmy teraz powyższy skrypt tak, aby zamiast ramek wyświetlać czas w sekundach. W tym celu napiszmy function Update() { time = time + Time.deltaTime; print(time); }
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.
Ćwiczenie 1 Proszę tak zmodyfikować poprzedni skrypt, żeby wyświetlały się minuty i sekundy.
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 z na zero, co spowoduje wyświetlenie domyślnego tekstu na środku ekranu. Uruchamiamy grę.
Rysunek: Uruchomiona gra z zegarem
Ćwiczenie 2 Proszę zmienić pozycję zegara tak, aby znajdował się w lewym dolnym rogu ekranu, a tekst był wyświetlany większą czcionką.
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;
Obracający się obiekt Dodamy teraz nowy obiekt (apteczkę pierwszej pomocy), który bę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ący skrypt rotate medpack: function Update() { transform.rotate(vector3(0,1,0), 90*Time.deltaTime); }
Rysunek: Obracający się przedmiot
Wykrywanie kolizji Dodamy teraz tag, który będzie nas informował o powstałej kolizji z 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 oknie Hierarchy. W oknie Inspector rozwijamy listę Tag i wybieramy apteczka.
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.
Testujemy wykrywanie kolizji Otwieramy okno konsoli wybierając Shift + Ctrl + C i uruchamiamy grę. Po kolizji z apteczką w oknie konsoli powinniśmy otrzymać odpowiedni komunikat. Uwaga! Zauważmy, że w oknie konsoli cały czas otrzymujemy komunikat Collision with Untagged. Jest to spowodowane faktem, że nasz gracz porusza się cały czas i jest w kolizji z podłożem.
Niszczymy wykorzystany w grze obiekt Zmodyfikujemy teraz skrypt tak, żeby po kolizji z przedmiotem ten znikał ze sceny (czyli gdy zostanie wykorzystany). W tym celu do już istniejącej funkcji wystarczy dopisać następujący kod: if (c.gameobject.tag == "apteczka") { Destroy(c.gameObject); }
Ćwiczenie 3 Proszę teraz umieścić w labiryncie pistolet, klucze i jakiekolwiek inne przedmioty o identycznych własnościach, jakie ma apteczka.