Original README
Wymagana wersja Unity (do wyboru jedna z podanych): 2022.3.4f1 2022.3.0f1 2021.3.28f1 Dostarczenie projektu: GitWytyczne:
- gra nie musi posiadać assetów innych niż te dostarczone, elementy gamepleyowe mogą zostać stworzone na assetach standardowo dostępnych w Unity
- UI ma zostać zbudowane TYLKO z elementów dostarczonych
- gra nie musi posiadać muzyki/dźwięków
- obiekt posiada 3 życia
- każdy obiekt spawnuje się w losowym (widocznym) miejscu na planszy
- pierwsza pozycja spawnu NIE MUSI równać się każdym kolejnym pozycjom tego samego obiektu po stracie życia
- obiekty NIE POWINNY się stykać
- nie liczą się efekty wizualne w gameplayu a optymalizacja działania gry
- zarówno obiekt, jak i jego pocisk musi mieć swoją wizualną reprezentację
Opis gry do zrealizowania:
Gra rozpoczyna się poprzez wyświetlenie okna wyboru liczby obiektów (50, 100, 250, 500) - widocznym na mockupie. Po wyborze liczby obiektów udostępnia się możliwość rozgrywki (jak na mockupie). Po kliknięciu start wszystkie obiekty spawnują się w tym samym czasie. Każdy z obiektów obraca się o losową wartość (0,360) stopni, co losowy czas (0,1) sekund. Co sekundę każdy z obiektów wystrzeliwuje pocisk skierowany w stronę w którą aktualnie jest obrócony. Pocisk może trafić w zespawnowany (1 ze 50/100/250/500) obiekt. Po trafieniu obiekt traci jedno ze swoich żyć i znika z planszy. Jeżeli obiekt ma więcej niż 1 dostępne życie wraca po 2 sekundach od śmierci na planszę i wykonuje wyżej opisaną mechanikę. Gra toczy się aż do momentu gdy wszystkie obiekty nie znikną z planszy na zawsze prócz jednego. Po zakończeniu gry pojawia się Button "Main menu", który pozwala włączyć grę na nowo (jak na mockupie) - wraca do okienka z wyborem liczby obiektów.
- 2022.3.4f1
- 2022.3.0f1
- 2021.3.28f1
- UI tylko z dostarczonych assetów
- oceniana będzie optymalizacja
Zastosowane optymalizacje:
- Object pooling (osobno dla obiektów i pocisków)
- Dynamic batching + tylko 1 shader
- GPU instancing
- Wykrywanie kolizji:
Physics.CheckSphere
+Physics.OverlapSphereNonAlloc
- Canvas grouping
- Heurystyczny algorytm znajdowania niezajętego miejsca spawnu
- 1x
GetComponent()
+ 0xFindXYZ()
- Eventy zamiast pollingu w
Update
- Wyłączony domain reloading (optymalizacja czasu iteracji projektu, nie samego runtime'u)
- obiekt:
- spawnuje się w losowym widocznym miejscu
Po spawnowaniu kamera jest oddalana tak, aby uchwycić wszystkie obiekty
- nie dotyka innych obiektów
- posiada 3 życia
- obiekty i pociski mają wizualną reprezentacje
- Gra rozpoczyna się poprzez wyświetlenie okna wyboru liczby obiektów
- Po wyborze liczby obiektów udostępnia się możliwość rozgrywki
- Po kliknięciu start wszystkie obiekty spawnują się w tym samym czasie
- Każdy z obiektów obraca się o 0-360 stopni co 0-1 sekund
- Co 1 sekundę każdy z obiektów wystrzeliwuje przed siebie pocisk
- Jeśli pocisk trafi w obiekt:
- obydwoje się despawnują
- obiekt traci 1 życie
- jeżeli obiekt nadal ma więcej niż 1 życie, respawnuje się po 2 sekundach
- Gra kończy się jak zostanie tylko 1 obiekt
- Po zakończeniu gry pojawia się okno z przyciskiem "Main menu", który wraca do wyboru liczby obiektów
Debugowe, zostało dodane dla ułatwienia testowania:
Escape
- wymuszenie stanu gry "Game Over"Mouse Scroll Up
- przyspieszenie rozgrywki o 10%Mouse Scroll Down
- spowolnienie rozgrywki o 10%
W folderze Assets/Scriptables
są 2 SO - GameSettings
oraz UISettings