Przeglądałem dokumentację dotyczącą funkcji Tilemap w Unity 2017.2.
Czy Unity ogranicza maksymalną liczbę płytek, które będzie obsługiwał dla konkretnej siatki tilemap?
Wiem, że każdy kafelek jest tworzony raz i służy do teksturowania quadów na siatce Tilemap w czasie wykonywania, więc zgaduję, że limit liczby quadów siatki zależy ostatecznie od sprzętu i mniej więcej jest arbitralnie wysoki.
Czy to prawidłowe założenie, czy też silnik jest mocno zakryty?
Odpowiedzi:
Twoja pamięć RAM jest twoim limitem .
W systemie o tych specyfikacjach przeprowadzono następujące testy:
Oto skrypt, który uruchomiłem, który tworzy mapę tilem, wypełniając ją pojedynczą płytką (32 x 32 piksele). Metoda
Grow()
dodaje kolejną kolumnę i kolejny wiersz do bieżącej mapy. Metoda jest wywoływana 100 razy przy każdej aktualizacji.Po kilku minutach w moim komputerze zabrakło pamięci i Unity się zawiesił. W tym momencie było to na kafelkach o wielkości 8400 x 8400 (70 milionów), a według menedżera zadań Unity.exe zużywał nieco ponad 11 GB pamięci RAM.
No ale co z rzadkimi mapami?
Oto inny skrypt, który umieścił pojedynczy kafelek przy zwiększaniu współrzędnych xiy w odstępach co 100 kafelków:
Ślad pamięci Unity.exe w rzeczywistości bardzo niewiele wzrósł, co wskazuje, że puste komórki zestawu klocków nie wymagają prawie pamięci RAM. Jednak liczba klatek na sekundę spadała wraz z powiększaniem się zestawu płytek. Osiągnął 60 Fps przy 30000 x 30000, 30 Fps przy 60000 x 60000 i 15 Fps przy 90000 x 90000. Liczba klatek na sekundę pozostała tak niska, gdy usunąłem skrypt podczas działania gry testowej. Więc to spowolnienie nie było spowodowane zmianą mapy tilem. Po prostu z renderowania. Więc jeśli chcesz stworzyć naprawdę ogromną grę z otwartym światem, być może będziesz musiał użyć wielu mniejszych map tilemap, które tworzysz i niszczysz w czasie wykonywania.
Wnioski: Ogromne, ale w większości puste tilemapy nie używają dużo pamięci RAM, ale stanowią wąskie gardło renderowania , nawet jeśli większość z nich nie znajduje się w okienku kamery.
Następnie eksperymentowałem z tym skryptem, który generuje mapy warstwowe o danym rozmiarze:
Użyłem tego skryptu do wygenerowania mapy 8192x8192. Zajęło to kilka minut, ale kiedy skrypt został ukończony, działał ze stałą prędkością 95 Fps.
Wniosek: Mapy z milionami kafelków są możliwe, przynajmniej na komputerach do gier .
źródło
Update
metody podczas generowania, gra i edytor Unity zawieszają się do momentu zakończenia generowania. Jeśli chcesz, aby twoja gra reagowała podczas generowania mapy, przenieś generację do coroutine, która generuje jeden kawałek na raz i ustępuje między nimi.