У меня есть много таких же простых объектов, которые влияют на игровой процесс, тысячи из них! Ну, не тысячи, а действительно много.Так что, если я сделаю их GameObjects, FPS уменьшится, особенно при их порождении.Даже с пулами.Я должен попробовать другой подход.
Вы знаете, что система частиц в Unity3D может очень быстро рендерить многие частицы.Он также автоматически контролирует частицы, испускает и удаляет их.Но в моем случае положения и времена жизни объектов управляются игровой логикой, и система частиц не может ничего делать без моей команды, даже переупорядочивать частицы.
Я пытаюсь использовать метод SetParticles
для управлениячастицы.Это работает в тестовом проекте, где я сначала использую GetParticles
.Я даже могу удалить частицы, установив время жизни на -1, но не могу породить новые.Также это не мешает системе частиц контролировать частицы.
Я могу отключить эмиссию, чтобы частицы не создавались автоматически.
Я могу установить скорость частиц на 0, чтобы они не двигались.
Я могуустановите время жизни в огромное число, чтобы они не были удалены.
У меня есть пул Particle
экземпляров, чтобы избежать ненужных распределений GC.Объекты получают ссылку на частицу, когда они порождаются, меняют ее при обновлении, устанавливают время жизни -1 и возвращают ее в пул при удалении.Пул хранит это:
private ParticleSystem.Particle [] _unusedParticles;
private int _unusedCount;
private ParticleSystem.Particle [] _array;
_unused
массив и счетчик необходимы для объединения, а _array
хранит все частицы, используемые и не используемые, и используется в вызове SetParticles
.
Основным недостатком этого метода является то, что он не работает, вероятно, потому что SetParticles
не создает новых частиц.Кроме того, я думаю, что он ничего не делает с порядком рисования частиц, поэтому он плохо подходит для игр с пулями, где паттерны должны выглядеть красиво.
Что нужно сделать, чтобы правильно отключить автоматический контроль частици правильно настроить прямое управление, с порождением и удалением?