Я читал об этом шаблоне несколько раз (с точки зрения передового опыта):
Выделение памяти : вместо создания нового объекта на лету всегда рассматривайте возможность создания и использования пулов объектов. Это поможет уменьшить фрагментацию памяти и уменьшит работу сборщика мусора.
Тем не менее, я не знаю, что это на самом деле означает. Как я могу это реализовать?
Например, я могу создать экземпляр с GameObject
использованием Instantiate
метода Unity?
Instantiate(prefab, new Vector3(2.0F, 0, 0), Quaternion.identity);
Это использование не рекомендуется? Что еще это может значить?
unity
c#
design-patterns
memory-efficiency
Мухаммед Файзан Хан
источник
источник
Ответы:
Если вы планируете создавать множество экземпляров одного и того же префаба, вам определенно следует подумать об использовании пула объектов. Вызов функции Intytiate Unity - один из самых сложных методов вызова, которые вы можете сделать.
Объединение объектов - это когда вы создаете экземпляры префабов перед их использованием. Они деактивируются сразу после создания экземпляра и активируются только тогда, когда они необходимы. Хотя это увеличивает использование памяти, оно позволяет избежать накладных расходов процессора на создание экземпляров во время игры.
Например, в настоящее время я работаю над игрой с пулями в ад, которая требует, чтобы сотни пуль появлялись во время выполнения. Сначала я пытался сделать игру без пула объектов, но это закончилось катастрофой (менее 2 кадров в секунду). Теперь я собираю 500 пуль до начала игры, и игра работает на удивление быстро (200 кадров в секунду).
Существуют ситуации, когда пул объектов не может быть использован. Например, если у вас есть игра, в которой ввод от игрока определяет, какой префаб создается, у вас может не быть иного выбора, кроме как использовать обычный вызов Instantiate. Объединение объектов возможно только тогда, когда вы заранее знаете, какие объекты понадобятся.
Учебник Себастьяна Лиги на YouTube - отличный ресурс для изучения пула объектов: https://youtu.be/LhqP3EghQ-Q
источник