Войти
ФлеймФорумПрограммирование

Ошибки проектирования в UE4

Страницы: 1 2 3 4 Следующая »
#0
(Правка: 22:56) 21:12, 23 окт. 2018

Всем привет.

Очень хота сразу наехать на AActor, но это не последовательно, поэтому сразу наеду на UObject. А стоп UObject это ещё на самый корень иерархии наследования.  Значит на UObjectBase.

Итак открывам документацию: https://api.unrealengine.com/INT/API/Runtime/CoreUObject/UObject/… se/index.html

virtual ~UObjectBase()

Ага, значит у нас виртуальный деструктор прямо в корне иерархии и это не правильно, т.к это означает что UE4 скорее всего из коробки не дружит с обычными С++ структурами в плане сериализации, да и вообще их не сильно приветствует.
До 2011 года я допускал такие же ошибки в своих движках, не сказать чтобы это прям сразу убило проекты, но когда я решил приделать сетевое взаимодействие я понял всю ущербность такого подхода и сделал новый правильный в этом плане движок для сериализации. Но так как тема не об этом то собственно всё :)

На этом я решил закончить своё изучение UE4. Всем спасибо за внимание. С удовольствие почитаю ваши комментарии.


#1
21:31, 23 окт. 2018

Adler
Все. Эпики можно закрывать :)

#2
21:46, 23 окт. 2018

Adler
> До 2011 года я допускал такие же ошибки в своих движках
анрилу 20 лет, что ты хочешь : )

#3
(Правка: 23:00) 21:59, 23 окт. 2018

Pathetic Mike
> Все. Эпики можно закрывать :)
Я даже больше скажу 99% известных мне движков содержат точно такую же ошибку. Единственное где я видел отсутствие виртуального деструктор в базовом классе иерархии - это в id Tech 3.

Но там сериализация очень похоже что сделана вообще вручную(без кодогенератора). Я даже как-то подсчитывал это где-то порядка 15% всех исходников.

Sh.Tac.
> анрилу 20 лет, что ты хочешь : )
Хочу такой же крутой граф двиг как UE4/CryEngine, только на основе сериализатора не хуже чем у меня и без серьёзных ошибок проектирования в ядре движка. Естественно чтобы вся кодовая база была на новом улучшенном С++ подобном языке специально заточенном под сериализатор.

#4
23:49, 23 окт. 2018

Adler
> Очень хота сразу наехать на
Да чего уж там, наезжай на все сразу.
Я серьезно, ты явно мало о нем знаешь, раз выдвигаешь такие мизерные претензии.

#5
0:54, 24 окт. 2018

Adler
Может потомучто нужно серилизовать данные, а не объекты? Да и делать дата лееры без виртуальных вызовов. Ну это так, с дивана.
А что конкретно не так с этим классом?

#6
(Правка: 1:50) 0:54, 24 окт. 2018

DanielSky
> Я серьезно, ты явно мало о нем знаешь, раз выдвигаешь такие мизерные претензии.
Мизерные они только с точки зрения жизнеспособности игр сделанных на движке. А для разработчиков/пользователей и самого дизайна движка - это фатальная ошибка. Я серьёзно, ему не выжить(но протянет он очень долго), никак, это невозможно исправить, всю иерархию не переделаешь. Не должно быть одной иерархии классов. Я не удивляюсь если окажется что самый жизнеспособный подход - это когда вообще нет никаких навороченных иерархий классов. Например в большинстве случаев достаточно просто делать отдельное/независимое семейство типов для каждого интерфейса. Всё остальное делается обычными структурами + чем-нибудь типа std::vector.

DanielSky
> Да чего уж там, наезжай на все сразу.
Мало что про него знаю, но это даже хорошо. Сейчас мне достаточно одной найденной ошибки проектирования, чтобы потерять почти весь интерес к движку. Не вижу смысла наезжать на что-то ещё просто так. Да я знаю, в UE4 полным крутых вещей наверно даже сделанных хорошо, но если они прогнулись под кривой дизайн и не могут работать отдельно от UE4 - мне с ними не по пути. Точнее я навряд ли полезу копаться в UE4 из-за них. Есть ли в UE4, хоть что-то что умеет работать отдельно от него и при этом достойно внимания?

#7
1:55, 24 окт. 2018

Adler
> Есть ли в UE4, хоть что-то что умеет работать отдельно от него и при этом
> достойно внимания?
нет конечно : )

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

#8
9:19, 24 окт. 2018

мощно

#9
9:24, 24 окт. 2018

Adler
> ему не выжить(но протянет он очень долго)


> но если они прогнулись под кривой дизайн и не могут работать отдельно от UE4 -
> мне с ними не по пути

Ну так на УЕ бабло зарабатывают, а не куски кода нахаляву раздают. Там как раз все продумано максимально )))))

#10
9:33, 24 окт. 2018

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

модуль не есть миддлваря

#11
9:35, 24 окт. 2018

Adler
А как ты себе представляешь полиморфизм без виртуального деструктора?

Расскажи, нам всем (преувеличиваю конечно) мне очень интересно.

#12
9:56, 24 окт. 2018

вот это да
\Engine\Source\Runtime\Renderer\Private\PostProcess\ScreenSpaceReflections.h(21):  virtual void Release() override { delete this; }
\Engine\Source\Runtime\Renderer\Private\PostProcess\ScreenSpaceReflections.h(39):  virtual void Release() override { delete this; }
\Engine\Source\Runtime\Renderer\Private\PostProcess\ScreenSpaceReflections.h(54):  virtual void Release() override { delete this; }
\Engine\Source\Runtime\Renderer\Private\PostProcess\VisualizeShadingModels.h(22):  virtual void Release() override { delete this; }

и таких строчек сотни
 

#13
10:01, 24 окт. 2018

innuendo

Чтоб врага запутать

#14
10:02, 24 окт. 2018

NWE > UE4

Страницы: 1 2 3 4 Следующая »
ФлеймФорумПрограммирование