Почему Unity не лучший выбор в 2026 году. OpenSandbox.

В далеком 2017 году, я начинал свой путь в геймдев, начинал я с моддинга как и многие в этой сфере.

Играл я в старые игры серии Quake, Doom и подсел как-то на Quake 3, мне понравился ID Tech 3 обточенный до идеала в нем. Так как это та игра с которой начался лютый киберспорт, все эти рокетджампы, распрыжки, все это именно прямиком оттуда. Также там был уникальный вертикальный геймплей, когда можно было не просто бегать по +- плоской карте, а прыгать на джамп-падах и летать по арене.

Quake 3 Arena
Quake 3 Arena

Особое внимание уделю сетевому коду, там были полноценные client-side предсказания, интерполяция движений энтити на основе промежуточных сетевых пакетов, а также что самое главное server-authority архитектура, где клиент передавал только инпуты, а всем остальным занимался сервер.

В году 2017 появилось желание сделать игру на Unity, потрогал движ, вроде прикольно, но собиралось это все около 1 часа, для меня важно наличие такой вещи как обратная связь (изменил, увидел результат в короткие сроки), также редактор был максимально перегружен, но это далеко не все его проблемы, вернемся к Quake 3)

В один момент, в 2019 году, я захотел сделать мод на Quake 3, сначала это были карты кривые, слепленные в GtkRadiant, потом какие-то моды на QVM (Quake Virtual Machine - платформо-независимый байт-код на C).

Позже я нашел OpenArena, это Quake 3 Arena, но с 100% GPLv2 контентом. Подумал я в 2022 году, а что если сделать на нем.. песочницу по типу Garry's Mod?

После этой мысли, я быстренько портанул стандартный gm_construct в игру

gm_construct on quake 3 engine
gm_construct on quake 3 engine

На удивление получилось очень даже хорошо, компилятор карт для Half-Life рассыпался от открытого пространства тут, хотя может я рукожоп, но с Quake 3 таких проблем не было, карта просто скомпилилась.

Но была проблема.. карта есть, а функционала песочницы нет, я криво сделал код для спавна объектов, (буду называть их пропами).

Так вот, пропы спавнятся.. но есть 3 проблемы:

  • Пропы не имеют физики, не реагируют на взаимодействия.
  • Пропы спавнить крайне неудобно, они спавнятся под ногами игрока.
  • Лимит в 128 пропов, сеть больше не могла передать.

Я долго мучался с движком, пытаясь поднять его лимиты, но разобрался с этим за 2 недели, сеть научилась передавать до 1024 обьектов через сеть что уже неплохо.

Делал UI для песочницы, ибо старый из Q3, не подходил к песочнице, как видите, буквы не совсем ровно расположены... система рендеринга шрифтов из Q3...

Quake Sandbox UI
Quake Sandbox UI

Спустя 1.5 года я сделал следующие вещи:

Завез физику
Завез графику и поддержку obj моделей
Завез графику и поддержку obj моделей
Потестил разные карты и графические штуки
Потестил разные карты и графические штуки
Куча НПС
Куча НПС
Еще раз графика и карта
Еще раз графика и карта
Крутой UI с вкладками и поддержка mp3 из папки
Крутой UI с вкладками и поддержка mp3 из папки
Браузер карт
Браузер карт

Все это было сделано за 1.5 года, лимит обьектов вырос до 4096 в одном сетевом пакете, полноценный моддинг, но самое интересное позже...

Сделав все это, я снова посмотрел на Unity и что он предлагает, честно говоря я ужаснулся, думаю начну по пунктам.

Производительность

С ней все очень плохо, по крайней мере это ощущается на слабых устройствах. В то время как мой движок компилится ВЕСЬ за 30 сек... этот bloatware кусок компилит почти пустой проект около... 30-40 минут, это ломает цикл обратной связи: измени, протестируй, измени еще раз.

Да он там ресурсы подготавливает в свой внутренний формат, но есть ли толк от этого?

Вот смотрите:

Песочница на юнити, пустая почти, запущенная на Samsung Galaxy M12:

19 fps... разрешение нативное, собрано под ARMv8 (arm64)
19 fps... разрешение нативное, собрано под ARMv8 (arm64)

Вот моя песочница, запущенная на том же телефоне, прогретом этой "песочницей", через Winlator (эмуляция x86->arm64 + wine тоесть дополнительная эмуляция Windows API) и я получаю следующее:

20 fps, нативное разрешение, почти высокие настройки (x86, Winlator)
20 fps, нативное разрешение, почти высокие настройки (x86, Winlator)

Появляется вопрос, а как можно было так упороть движок чтобы он скопиленный под целевое устройство... работал ХУЖЕ... чем Windows эмуляция...

Такими темпами наши мобилки увидят GTA 5 в 60fps раньше чем... похожую игру, но на Unity)

Сеть и Мультиплеер

Большинство Unity проектов реализуют мультиплеер через Photon, готовое для этого решение, его используют Genshin Impact и все игры от Hoyoverse, также всякие Standoff 2, Free Fire и подобное...

Проблемы данного решения:

Платность: да он платный, его бесплатный вариант уже захлебывается от 2-3 игроков.

P2P архитектура: там не все так классно как в ID Tech (Quake engine) или как в Source (CS, TF2, HL). Там все реализовано максимально ужасно, клиенты считают свою физику сами, от чего они могут сообщать серверу поддельные данные о местоположении, тем самым телепортироваться свобожно, а сервер не проверяя это, разнесес это остальным клиентам, именно по этому в Unity играх читеры могут быть: бессмертными, летать, стрелять сквозь стены (привет Standoff 2) и даже АХАХАХАХ УДАЛЯТЬ ВСЮ КАРТУ.

Предсказательную систему невозможно сделать с такой архитектурой ибо у каждого свой пинг, соотвественно движение игроков не может даже сервер предсказать.

А еще антибан читы, вообще отдельный вид искуства, там просто удаляется метод/функция ClientDisconnect у клиента, в результате сервер просит клиента при бане "уйди, ты забанен", а клиент даже не знает как выйти с сервера и клиент остается, его невозможно забанить... АХАХАХАХ... УЖАС...

Конечно же Hoyoverse это прикрыли, но скорее всего сторонним решением, которое обрывает соединение.

Также я заметил, многие игры на Unity защищены от изменение донатной валюты и всего такого за что игроки деньги реальные отдают, оно там работает не через Photon, а простую БД и там уже нельзя так менять всё, но все энтити.. мир, все через Photon...

В Genshin Impact бездну закрывали просто телепортируя всех под карту где мобы откидывались.

Для этого Unity разрабы сделали античиты, которые контролируют клиент на стороне КЛИЕНТА... и вежливо просят его не отправлять плохие пакеты, но никто не запрещал мне пакеты те же менять между компом и интернетом, пропустив трафик через второй ПК 😭🔫

Работа с ассетами

Ранее я упоминал что все ассеты конвертируются в внутренний Unity формат, но как показала практика, оно не дает прироста в производительности.

Из-за подобной системы ассетов моддинг игр попросту невозможен, конечно если разраб не заморочился и не написал всякие загрузчики obj, png и подобных форматов, тем же самым кстати занимаются те кто свои движки пишут...)

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

Я даже не вижу смысла что-то дальше об этом говорить, pk3 (zip) архивы из Quake 3 решают все проблемы которыми Unity прикрывается. А то что Unity делает на самом деле это пропритариезация контента.

Открытость, точнее её полное отсутствие

Unity закрыт, исходники недоступны, все игры ограничены возможностями редактора.

Hoyoverse и многие другие проекты имеют доступ к исходникам Unity, которые они взяли за основу еще в 2019 году и отделились от основной ветки Unity, могу заявить что все игры Hoyoverse работают на сильно переделенном Unity 2019, они не переходят на новые версии, они делают свою ветку движка. Но нам простым смертным такая "роскошь" недоступна.

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

Прозрачность и условия

Unity Runtime Fee из 2023 года, я бы мог уже на этом остановиться и пожалуй так и сделаю, просто скажу что скачивания можно было накрутить и загнать разраба в долги)

Asset Store

Тут я просто скажу что это психологически уничтожает уникальные идеи и плодит тонны Slop игр

Зачем что-то делать если за тебя уже сделали, такде именно ассеты оттуда причина долгой компиляции, ибо разраб качает по 10 ассетов и использует по 5% в лучшем случае от каждого ассета)

Итог

Сегодня развиты нейросети, они разбираются в написании движков очень хорошо и файловую систему вам напишут и сетевой код в любом случае сделают лучше чем в Юнити и скрипт компиляции под Андроид вам напишут, свой движок это не так сложно как об этом говорят многие...

Напомню, я из Quake 3 движка сделал почти Garry's Mod за 1.5 года, у меня бы больше времени ушло на борьбу с Unity...

Да и это очень крутое чувство когда делаешь свой движок.

А тем кто не верит, заходите в мой Дискорд, качайте мою песочницу и тестируйте :)

Возможно я какие-то вещи упустил, так как это мой первый пост на данную тему.

Жду вас в комментах, отвечу на многие вопросы, по крайней мере постараюсь ^^

7
6
2
2
1
48 комментариев