Комментарии 3
Мне кажется, подобные гайды было бы очень полезно сопровождать примером проекта, в котором было бы показано практическое применение того, что написано выше.
void InitializeComponent();
И далее если метод переопределяется то должен быть либо virtual либо что предпочтительнее override
В данной статье в основном затронем программирование на C++, т.к. полноценное программирование в Unreal Engine 4 возможно именно на этом языке.
Можно создавать игры без использования С++, BP тоже полноценное программирование.
чтобы переопределить их поведение в стандартных методах BeginPlay(), Tick() и EndPlay() и получить пользовательский actor
определенное в методах InitializeComponent() и TickComponent()
Эти методы переопределяются, но не только они, я бы сказал это одни из самых редкоиспользуемых методов. Большая часть настройки происходит в конструкторах.
using namespace Unigine;
Плохая практика выдающая нуба в плюсах.
Все объекты в Unreal Engine 4 наследуются от UObject, доступ к ним возможен при помощи стандартных C++ указателей или умных указателей Unreal Smart Pointer Library.
В движке используется сборщик мусора и поэтому не нужны никакие умные указатели если речь идет об объектах наследуемых от UObject
Типы данных
Помимо своих типов данных в UE можно использовать и стандартные плюсовые типы, странно что в табличке не перечислены типы с фиксированным размером, например uint32_t
Что делает в контейнерах ranged for?
В UE есть еще другие контейнеры, например стэк, очередь и тд.
Вывод в консоль
Не будет работать в UE без предвариательного создания логгера с указанным именем
Доступ к компоненту
Зачем искать компоненты если в полях класса есть ссылки на все компоненты?
В Unreal Engine 4 компонент USceneComponent (или производный) отвечает за действия с трансформацией actor’а.
Не отвечает и только при условии что он есть root актера, но рута может и не быть или им может быть любой другой объект
Поиск Actor
Зачем использовать итераторы в обычном цикле если можно использовать ranged for?
if (SphereCollider != nullptr)
лишняя писанина, можно просто короче
if (SphereCollider)
AKAsset* SpawnedActor1 = (AKAsset*) GetWorld()->SpawnActor(AKAsset::StaticClass(), NAME_None, &Location);
Где проверка на наличие мира (то есть не равенство nullptr)? И зачем использовать небезопасный Си-стайл кастинг?
Unreal Engine 4 позволяет расширять функциональность редактора с помощью Blueprint/Python скриптов.
Ложь. Блюипринты предназначены только для игровой логики и они прилично ограничены. А питон только для автоматизации. Расширять функционал редактора и создавать новые ноды для BP можно только на С++.
Создав скрипт мира
В UE данный скрипт (называется Level BluePrint) популярностью не пользуется, о нем мало кто знает и не рекомендуется его использовать.
UPrimitiveComponent* Trigger;
Обычно принято создавать тип тот же что и у создаваемого объекта, в данном случае USphereComponent
bool bHit = GetWorld()->LineTraceSingle(Hit, Start, End, ECC_Pawn, Params);
Где проверка мира на корректность? И В Чаще используется для рэйкаста LineTraceSingleByChannel
Гуи UE написан на Slate который можно использовать вне игровых проектов. А ваш движок, точнее редактор на сколько знаю написан на Qt, хоть на нем написан весь коммерческий 3д софт, но он тяжелый и неповоротливый.
В UE очень многие пользуются только BP, тех кто использует плюсы в разы меньше, особенно в ру сегменте. Еще в UE очень распространена практика: Класс Движка -> С++ Класс Пользователя -> Blueprint Класс. В С++ классе вся логика, а в BP все что относится к внешнему виду. Причем писать логику можно почти для всего, гуи, ниагара и тд, простыми актерами не ограничивается
Ни слова что в UE в С++ используется сборщик мусора и рефлексия, которая повсеместно используется. Можно было пару слов сказать про UPROPERTY и привести аналог из вашего движка. Я еще думал что в UE много макросов, но судя по именам (заглавными буквами) тут их еще больше, макросы зло.
В целом ощущение что статью писал человек далекий ил очень поверхностно знакомый с программированием. Качество кода и его наполнение оставляют желать лучшего, особенно UE код.
Главный вопрос не "как?", а "зачем?". Этот вопрос был бы актуален и до выхода UE5, а после уже просто смешно
Да и качество статьи оставляет желать лучшего. Нет примера проекта, налицо явное незнание Анриала в целом и плюсов в частности, и тд
Переход на UNIGINE с Unreal Engine 4: гайд для программистов