M
Minutri | Unity
@minutri651 подп.
1.3Kпросмотров
22 апреля 2024 г.
📷 ФотоScore: 1.5K
🤨Некоторые кейсы работы с памятью в Unity, которые встречались на практике. Часть 1 1. DoTween В нем разработчики используют pool Tweneers, поэтому проблем с аллоцированием твинеров нет. А вот в конструкциях типа: camera.DOShakeRotation или Transform.DOMoveZ там есть некоторое выделение памяти после использования. Каждая анимация DoTween выделяет мусор. Как правило это не критично. Оптимизацию следует начинать не с этого. Но знать об этом — кажется полезным. Для решения можно использовать кеширование: private Tween _cameraShakeTween; private void Awake() { _cameraShakeTween = camera.DOShakePosition(duration, strength).SetAutoKill(false).Pause(); } public void ShakeCamera() => _cameraShakeTween.Restart(); У этого метода кэширования есть свой недостаток: приостановленные анимации по-прежнему получают обновления каждый кадр, потребляя память и циклы ЦП. 2. Большая нагрузка Если геймплей активный, насыщен персонажами, предметами и прочим, то из-за GC могут происходить подвисания. Даже с использованием инкрементной сборки. Хорошим решением может послужить выключение автоматической сборки: GC: GarbageCollector.Mode.Manual. Перед началом сцены, загрузки схватки или иной итерации геймплея выключить автоматический GC. Включить ручную сборку после окончания этой сессии. Из документации: "Лучше всего отключать сборщик мусора только для долгосрочных выделений. Например, вы можете выделить всю необходимую память для уровня вашей игры до его загрузки, а затем отключить сборщик мусора, чтобы избежать снижения производительности во время уровня. После завершения уровня и освобождения всей памяти вы можете снова включить сборщик мусора и использовать его System.GC.Collectдля освобождения памяти перед загрузкой следующего уровня"
1.3K
просмотров
1753
символов
Да
эмодзи
Да
медиа

Другие посты @minutri

Все посты канала →
🤨Некоторые кейсы работы с памятью в Unity, которые встречал — @minutri | PostSniper