4 октября 2014 г.

Мой опыт изучения Unreal Engine 4 и С++ с нуля

Я, будучи полным новичком в C++, Visual Studio и Unreal Engine 4, буду записывать ответы на вопросы, которые возникли у меня в ходе освоения вышеперечисленных технологий.
Кому-то мои ошибки покажутся абсолютно примитивными, но для меня они всё-таки представляли сложность. На данный момент я использую UE 4.4, Visual Studio 2013.

Первая ошибка была в том, что у меня был UE 4.3, и из него не могла запуститься Visual Studio Express. Я обновился до UE 4.4 и скачал Vusial Studio 2013. Проблемы взаимодействия редакторов решены.

GEngine. Проблемы билда первого проекта, когда я в стартовый First Person C++ добавил свой класс с дебагом через
GEngine->AddOnScreenDebugMessage.
Проект не собирался. Оказалось, что в стартовом проекте в главном хедер-файле подключался
#include "EngineMinimal.h".
Я исправил эту строку на  
#include "Engine.h".
После этого GEngine стал доступен.

Установка категории логирования. Я пытался наладить режим отладки с выводом необходимой мне информации. Я использовал руководство https://wiki.unrealengine.com/Logs,_Printing_Messages_To_Yourself_During_Runtime. Но не уделил особого внимания части, где говорится о определении своей категории логирования. В хедере вашего проекта или отдельного файла нужно добавить
DECLARE_LOG_CATEGORY_EXTERN(YourLog, Log, All);
Причем не в рамках класса, а после. Аналогично и с файлом .cpp, нужно добавить не в рамках класса, а просто в файл DEFINE_LOG_CATEGORY(YourLog);
А затем уже можно будет вызывать
UE_LOG(YourLog, Warning, TEXT("Sub Location is %s"), *subLocation.ToString());
Причем 4й аргумент (конвертация вектора в строку) должен быть со звездочкой.

Правка исходного кода без запуска Visual Studio оказалась возможной. Сначала я собирал проект используя эту монструозную IDE, затем для мелких правок одного файла я начал использовать Sublime Text, а сборку выполнять с помощью команды:
D:\путь-до-движка\Engine\Build\BatchFiles\Build.bat НазваниеПроектаEditor Win64 Development "путь-до-папки-с-проектом\НазваниеПроекта.uproject"
После этого я запускал редактор вручную. Но этот вариант не подходит для нормального дебага с Break Point-ами.

Объявление члена-класса с типом другого класса не получилось очевидным.Зная, что в UE4 есть свои умные указатели TSubobjectPtr<class AMyActor>, мне потребовалось время, чтобы выяснить, что присваивать напрямую такому элементу нельзя, поэтому код
TSubobjectPtr<class AMyActor> MyActor = Cast<AMyActor>(*Iterator);
работать не будет. Чтобы возможно было присваивание, следует использовать стандартные указатели и для объявления нужно в хедере подключить зависимость:
#include "MyActor.h"
(иначе будет ошибка C2143) и там же для класса объявить
AMyActor* MyActor;
Такое вот в дальнейшем позволяет делать присваивание  
MyActor = Cast<AMyActor>(*Iterator).

В Blueprint получить параметры Hit события onHit, onComponentHit можно с помощью функции Break Hit Result:


Комментариев нет:

Отправить комментарий