Как стать автором
Обновить

Комментарии 13

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

Про архитектуру и организацию проекта – вещь субъективная, "лучшей практикой" не назову, использовать ваш вариант не стал бы, выглядит очень переусложненной, вы и сами это говорите.

> Но даже такой простой проект очень быстро разросся и стал трудно поддерживаемым

Мне ближе по душе, то, как предлагает делать сама Unity. Она простая и очень понятная, поэтому другим людям будем проще вкатываться в проект.

Противоречивое сложилось ощущение после прочтения статьи, как будто вы боролись с ветреными мельницами (и не очевидно, кто выиграл).

Я просто хотел поделится с миром своими идеями. Статья действительно весьма поверхностно описывает мой проект, но на мой взгляд все самое важное я рассказал.

Если опираться на название, то я не согласен, что это лучшие практики. Советы крайней субъективные и вряд-ли похожи на распространенные "лучшие практики", так ещё и проверены на крайней меленьком проекте, что выглядит как минимум не убедительно. Рассказывать про лучшие практики надо, когда есть проект в релизе, вам нравится как он написан и работает, и тогда уже есть смысл чем-то поделиться.
В остальном, похоже на попытку перенести вебовские практики в игры и юнити, где это не очень уместно. Есть множество более удобных и простых вариантов построить архитектуру для малых, средних и большие проектов.

Раздел с претензиям к статье не вяжется, непонятно зачем он здесь. Выглядит как "я программировал не игры, и когда имея опыт другой разработки пришёл в юнити, то мне многие вещи непонятны или не нравятся". Многие претензии уверен отпадут, если чуть больше поработать с игровым движком и вникнуть в технические ограничения, которые как вы сами заметили не только к юнити относятся.

  • Если опираться на название, то я не согласен, что это лучшие практики. Советы крайней субъективные и вряд-ли похожи на распространенные "лучшие практики", так ещё и проверены на крайней меленьком проекте, что выглядит как минимум не убедительно.
    У разных людей разные привычки и предпочтения. Если вы привыкли к другим парадигмам, то это не значит, что мои идеи плохие. И я не думаю, что есть что-то лучше, чем идеи чистой архитектуры, которые я использовал.

  • Рассказывать про лучшие практики надо, когда есть проект в релизе, вам нравится как он написан и работает, и тогда уже есть смысл чем-то поделиться.

    Сделав много проб и ошибок, и потратив много времени, я нашел достаточно хорошие решения (по-моему субъективному мнению). Было бы лучше, если бы никто о них не узнал?

  • В остальном, похоже на попытку перенести вебовские практики в игры и юнити, где это не очень уместно. Есть множество более удобных и простых вариантов построить архитектуру для малых, средних и большие проектов.

    Почему в Unity это не уместно? Чем Unity отличается от других областей разработки?

  • Раздел с претензиям к статье не вяжется, непонятно зачем он здесь. Выглядит как "я программировал не игры, и когда имея опыт другой разработки пришёл в юнити, то мне многие вещи непонятны или не нравятся".

    Именно так! Многие вещи мне не нравятся. Что-то можно было бы сделать лучше. Что-то в Unity могло бы быть лучше. И это тоже полезно знать.

  • Многие претензии уверен отпадут, если чуть больше поработать с игровым движком и вникнуть в технические ограничения, которые как вы сами заметили не только к юнити относятся.

    Каким образом они отпадут? Нет, не отпадут. Конечно же везде есть свои проблемы. И это всегда будет отнимать время и нервы.

Я хоть с часть претензий и согласен, тем не менее писать статьи это сложно. Так что как бы то ни было - молодец, продолжай, старайся:3

Почему в Unity это не уместно? Чем Unity отличается от других областей разработки?
Потому что для Unity, как и других движков, существуют некоторые рекомендации, которые применяются на существенно большем числе проектов. И этот вариант, который используется в индустрии, становится своего рода "стандартом". Отсюда возникает резонный вопрос - для чего делать не стандартными способами?
Касательно MonoBehaviour и AActor - это механизм, предовращающий прямой контроль над временем жизни объектов. Поэтому конструкторы вынесены на сторону движка, а наружу торчат только несколько методов, которые можно определить для инициализации. Насколько мне известно, этот способ актуален как минимум для UE и Unity, но лично видел еще в двух проприетарных движках.

Проблема моей архитектуры в том, что получается оверкод. Наверное в оверкоде есть смысл, когда над проектом работают сотни людей на протяжении десятилетий. Но в играх важнее скорость написания и изменений. К сожалению, я наверное излишне переусложнил свой фреймворк.

Поэтому конструкторы вынесены на сторону движка

В теории можно было бы передавать в метод делегат, который создает объект. Но почему-то так нельзя. Может быть на это были причины. Может быть и не было никаких причин.

Насчет MonoBehaviour конструкторов и невозможности их использования. Все C# компоненты, по сути, являются лишь обертками над нативными объектами Unity. Соответственно, их жизненный цикл возможно контролировать только через методы, которые предоставляет сам движок (Instantiate, Destroy, AddComponent). К тому же, насколько я понимаю, это необходимо для сериализации компонентов в редакторе.

Лучшая практика для Юнити = не использовать Юнити)

Как бы там ни было, на Unity были созданы: Need for Speed World, Call of Duty: Mobile, Genshin Impact и наверное еще много сложных проектов.

Где тут движок юнити для NFS

Где тут движок юнити для NFS

Краткий поиск показал, что на форумах Unity, вики посвященной самой игре и многих других ресурсах указано, что Unity был использован для клиента игры. Так же на форумах видел, что EA лицензировали исходники движка. Возможно, поэтому в вики не указан Unity.

Устал листать статью из-за большего количества практически идентичных скриншотов (без них читалось бы лучше, ИМХО (не все естественно убрать, а которые не несут по сути полезно информативности).

Что касается сути статьи, как отметили выше - это субъективщина и называть лучшими ее конечно громко)

Далее про итог:
Монобех - поэтому используют методы инициализации, не совсем понятно (если логически думать) зачем тебе прям конструктор монобеха, ведь монобех это компонент объекта, а не сам игровой объект. Так что либо не используй монобех, либо используй метод инициализации /другие практики для создания объекта без конструктора.

Слушать сообщения Unity - делаешь управляющий класс, который содержит композицию сторонних объектов не монобехов и выполняешь исходя из нужной логики все это дело. Либо делаешь статичное событие и не монобехи на него привязываются. Да и в целом много вариантов.

Много возможностей кастомизировать окна/создавать свои (все ли не знаю, но в инспекторе достаточно возможностей). Для упрощения этого дела существует например ODIN.

Про выгрузку - так создай отдельную сцену под фичу и работай там с ней. Если не нагружать ее и не использовать для перехода в другие сцены - то по идее она отдельно билдится. Но тут могу ошибаться.

UIToolkit - днище если откровенны будем))) Надеюсь его доработают

Ну а последний пункт (да и к предпоследнему тоже относится) - Classic by Unity Team

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории