Unity «Best» Practices

Что такое AssetPostprocessor и чем Animation отличается от Animator? Почему не стоит доверять OnTriggerExit и зачем вам CanvasGroup? Чем хорош GameObject.Find и как вас спасут Property?

Unity «Best» Practices
170170

Ещё один довольно очевидный совет: не спавните объекты в корень сцены, делаите контеинеры для разных типов объектов, чтобы не создавать хаос в иерархии. Еще такие контейнеры может быть удобно использовать для пулинга, чтобы не менять родителя.Не очевидный, т. к. слишком большая вложенность и иерархия объектов бьёт по перфомансу (:
Но если вы используете более старую версию Unity, вам придётся писать свою реализацию пулов или искать библиотеку в Asset Store.Если Zenject используется, то можно ещё оттуда пулы взять.
Делаите отдельные Canvas для ваших окон. Проблема, с которой столкнулись мы сами: если все держать в одном Canvas, он будет полностью пересчитываться при каждом изменении объектов внутри канваса. Особенно это касается динамического анимированного интерфейса с партиклами.И не только с этим могут быть проблемы. У нас был неприятный баг, когда вся гуятина тупо пропадала в какой-то момент, т. к. много всего в одном кенвасе было. Разнесли по нескольким, проблема исчезла.
Используйте Dependency Injection. Как минимум, разберитесь с Zenject — его используют с Unity чаще всего, но можете поискать альтернативные варианты или даже написать свою реализацию, сути это не меняет.На относительно крупных проекты с этим могут быть проблемы. В итоге минусов становится больше, чем плюсов. Нужно с осторожностью втаскивать в проект.

13

Всё бьёт по перформансу. Самая оптимизированная игра - не написанная игра.

19

Не представляю свою жизнь без Zenject теперь, что может пойти не так?

2

Вопрос: почему в контексте DI и юнити часто упоминается Zenject? Почему не Autofac? На бэке ASP.NET с 99% вероятности встретится именно он, потом всякие Ninject и тд.