Przeczytałem o tym schemacie kilka razy (z perspektywy najlepszych praktyk):
Alokacja pamięci : Zamiast tworzenia nowego obiektu w locie zawsze należy rozważyć utworzenie i użycie pul obiektów. Pomoże to zmniejszyć fragmentację pamięci i sprawi, że moduł czyszczenia pamięci będzie działał mniej.
Nie wiem jednak, co to właściwie znaczy. Jak mogę to zaimplementować?
Na przykład mogę utworzyć instancję GameObject
przy użyciu Instantiate
metody Unity?
Instantiate(prefab, new Vector3(2.0F, 0, 0), Quaternion.identity);
Czy to użycie jest odradzane? Co jeszcze może to znaczyć?
unity
c#
design-patterns
memory-efficiency
Muhammad Faizan Khan
źródło
źródło
Odpowiedzi:
Jeśli planujesz utworzyć wiele instancji tego samego prefabrykatu, zdecydowanie powinieneś pomyśleć o użyciu puli obiektów. Wywołanie funkcji tworzenia instancji Unity jest jedną z najbardziej obciążających metod, jakie możesz wykonać.
Pula obiektów polega na tworzeniu instancji prefabrykatów przed ich użyciem. Są dezaktywowane natychmiast po utworzeniu instancji i reaktywowane tylko wtedy, gdy są potrzebne. Wprawdzie zwiększa to wykorzystanie pamięci, ale pozwala uniknąć nakładania się procesora na proces tworzenia się podczas gry.
Na przykład obecnie pracuję nad grą w piekło z kulami, która wymaga odrodzenia setek pocisków w czasie wykonywania. Początkowo próbowałem stworzyć grę bez łączenia obiektów, ale skończyło się to katastrofą (mniej niż 2 fps). Teraz zbieram 500 kul przed rozpoczęciem gry, a gra działa zadziwiająco szybko (200 fps).
Istnieją sytuacje, w których nie można użyć puli obiektów. Na przykład, jeśli masz grę, w której dane wejściowe gracza decydują o tym, który prefabrykat zostanie spawnowany, możesz nie mieć innego wyboru, jak użyć zwykłego połączenia natychmiastowego. Pula obiektów jest możliwa tylko wtedy, gdy wiesz z góry, jakie obiekty będą potrzebne.
Samouczek Sebastiana Lague'a na YouTube to świetne źródło informacji na temat łączenia obiektów: https://youtu.be/LhqP3EghQ-Q
źródło