Нужно ли всегда по максимум отказываться от MonoBehaviour?

Как показывает практика, написание игр без использования MonoBehaviour повышает производительность. Но нужно ли в каждой игре по максимуму избавляться от них? (Кроме простеньких игр, где не важна оптимизация)


Ответы (1 шт):

Автор решения: Yaroslav

Хотя магические методы монобехов отжирают производительность, что видно на астраномических цифрах, типа 10.000 Update, дело вообще не в оптимизации. Те кто понимают, в чём смысл MonoBehaviour и не используют его где не попадя, те, как не странно, понимают что они делают и не разбазаривают производительность на чепуху, типа поиска одного и того же объекта на сцене каждый кадр по несколько раз и МНОГОЕ другое. Большая или маленькая игра, не важно, те кто не могут хорошо написать маленькую, тем более всё горит красным пламенем на масштабах побольше. Не то что в "маленькой" игре, даже в одном скрипте, даже в паре строчек кода можно убить fps, для избежания чего используют профайлер.

GameObject это базовый объект сцены, а Component (коим является MonoBehaviour) его элементы логики/данных, обеспечивающие положение и взаимодействие с другими объектами сцены (физика), а так-же визуализацию. Этим можно полностью и обойтись, используя его как провайдер, что и происходит например, когда используешь LeoEcs. Более того, не всем скриптам нужно быть MonoBehaviour, который наследуется от Behaviour умеющий быть enable/disable но не имеет магических методов, а например RigidBody наследуется от Component, в котором нет вообще никаких плюшек, он просто умеет быть частью GameObject.

Кроме того, если следовать принципу единой ответственности, коему должны следовать все, то от количества компонентов на GameObject можно рихнуться! Уже наличие 5+ компонентов превращает объект в какую-то свалку в которой нужно капаться и сворачивание никак не спасёт, этот инспектор просто не хочется открывать. Программисты свалки не любят не потому, что брезгливые, а просто потому, что порядок это единственный способ не рихнуться и бросить всё в печь.

→ Ссылка