Войти
ПрограммированиеСтатьиОбщее

MMO на Unreal Engine #2 (2 стр)

Внимание! Этот документ ещё не опубликован.

Автор:

Если встретятся какие то ошибки, это не повод паниковать, выделяем ошибку, лезем в гугл и пытаемся понять какой из результатов даст нам решение для ответа. Ну, на данном этапе, ошибок быть не должно.
Теперь добавим код для отладки, я использовал TArray<FString> это одномерный массив какого типа, в данном случае строк. Если забьете в гугл как я вас учил, получите (TArray | Unreal Engine API Reference) : https://docs.unrealengine.com/latest/INT/API/Runtime/Core/Contain… ay/index.html
Это коллекция (Collection), его можно сортировать, в него можно добавлять, в нём можно удалять. Чисто UE'шный класс. Он не может быть в виде пары: ключ, значение. Типо TArray<Key, Value>, а жаль. Ну это не особо важно сейчас.
Также мы можем обратиться к элементу напрямую, указав порядковый номер в квадратных скобках [10].
Добавляем в наш метод LoadMap() следующие строки (заменяя комментарий // строками ниже):

UE_LOG(LogTemp, Warning, TEXT("Loading Map"));
  TArray<FString> arr;
  LoadStringFromFile(("Content/Levels/"+filename), arr);
  UE_LOG(LogTemp, Warning, TEXT("Map is loading: %d lines"), arr.Num());
Компилим, Ctrl+Shift+B. И если всё ок, пришло время проверить это в самом UE вначале.
Открываем UE, нам потребуется OutputLog, чтобы его включить надо зайти в Window->Developer Tools->Output Log. После того как окно появится, перетащите его рядом с контентом, чтобы он был там как вкладка. Вот так:
Изображение
Теперь, мы сможем увидеть любой вывод "в консоли".
Запускаем (кнопочка Play) и... что мы видим?, а чтобы остановить игру - жмем Esc. А ничего мы не видим, потому что нашего CMap нет на карте. Давайте исправим это недоразумение.
Переходим в папку Content, далее создаем папку Blueprints (ПКМ), заходим в неё нажав дважды левой кнопкой мышки. И там снова ПКМ,
Изображение
Blueprints->Blueprint Class. Там нажимаем на AllClasses, затем на строку поиска, и уже в ней ищем наш CMap, ну и не лишним будет на него тыкнуть.
Изображение
Жмем Select и о чудо! У нас появился блупринтовский класс в основе которого лежит С++ класс, при чём это, НАШ класс. Ну и не забываем про имена, ему мы дадим имя: BP_Map. BP - от слова blueprint. Ну а теперь просто перетягиваем его на карту в любую точку. Запускать мы сейчас не будем, потому что LoadMap, никто не вызывает. А чтобы её вызвать, надо сделать её видимой для блупринтов. Да, да, снова лезем в CMap.h и добавляем вот такую хрень:
UFUNCTION(BlueprintCallable, Category = Game)
прямо выше метода LoadMap, в итоге должно получится так:
UFUNCTION(BlueprintCallable, Category = Game)
  void LoadMap(FString filename);

Компилим, Ctrl+Shift+B, а после удачной компиляции возвращаемся в редактор. И дважды кликаем по нашему BP_Map, зайдя туда там есть три важных вкладки.
Viewport - там настраивается внешний вид, физика, ну и прочие плюшки, это нам пока не нужно.
Construction Script - это конструктор класса, там и происходит вызов конструктора (если необходимо, то с передачей параметров), мы туда пока тоже не ходим.
Event Graph - это логика, в частности именно здесь будет отлов всех наших событий и вызов методов.
Открываем Event Graph, там вы заметите BeginPlay() и Tick() и ещё ActorBeginOverlap(). Выбираем их все и удаляем. Ну можно оставить BeginPlay() потому что мы его будем использовать, но для первого раза, грохайте все.
Далее ПКМ и пишем Event Begin Play, выбираем его и он возрождается в новом свете. Обратите внимание что при наборе, вы увидите и другие события. Вот от сюда их можно все достать если что.
Так, появился блок BeginPlay тянем от своеобразной стрелки ЛКМ в право и там пишем LoadMap. В итоге должно получится вот так. Постепенно я перестану скриншотить каждое наша действие, а буду делать лишь их набор, чтобы вы точно не запутались. Мне кажется так будет куда полезнее.
Изображение
У нас в CMap->BeginPlay() нет ничего толкового, но если вдруг вы что-то туда добавили и хотите чтобы и blueprint его в начале вызвал, нажмите ПКМ (это не будет лишним, если добавить это сейчас) и выбрать Call parent function
Изображение
Ну и надо это всё соединить, получится вот так
Изображение
Гуд, в LoadMap в FileName пишем: Level_01.smap

Ну а теперь естественно надо скомпилировать blueprint, Да. да, блупринты тоже надо компилить, но они в отличии кода делают это махом (в этом и приемущество).
Ещё очень важный момент такой, его надо сделать 1 раз.
Изображение
А затем нажать на Compile.
Теперь любой блупринт, будет автоматически сохранятся если вы нажали на компиляцию, что очень удобно.

Да, помните как мы Output Log перетащили в Content, можно точно также открытый сейчас Blueprint затащить сюда
Изображение
Если этого не сделать, у вас просто при нажатии на Alt+Tab, будет не смена приложения (а это очень надо во время чтения например доки в инете и работе UE). Таким образом мы как бы сделали вкладкой открытое окно. И теперь оно всегда будет именно вкладкой.

Переключаемся на Output Log и запускаем. И увидим такие желтенькие строчки в нём:

LogTemp:Warning: Loading Map
LogStreaming:Warning: Failed to open ANSI TEXT file ../../../../../../develop/salamandr.dev/Unreal Engine/ShadowOfSpace/Content/Levels/Level_01.smap
LogTemp:Warning: Map is loading: 0 lines
Нам прям повезло, обычно редактор падает из-за ошибок в C++, но тут лишь сказал что файл не найден. Давайте его поместим... ах, да. Папки то нет. Ползем в Content, создаем там папку Levels, ну вот вам файлик текстовый (можно открыть в любом блокноте) https://drive.google.com/open?id=0Bzl8pH3p1mHRdWx0VlVNdVlVaWc, тяните и вставляйте в редактор в его область #5 (смотрите выше), ладно, я седня добрый, спойлер снизу.
+ Показать

Файлы обычно схватываются не сразу, поэтому когда затащите файл в область #5 подождите немного, пока не появится плюсик, а только потом отпускайте клавишу мыши.
* 9-ая страница только текста...фух, надеюсь вы ещё со мной 8) не дай бог щас чё то не то нажать и потом набирать это снова >:)))

Но... UE ругается на неизвестное имя расширение файла. Ну ничего страшного, "москва не сразу строилась". Открываем обычный проводник, ползем в папку проекта, в ней в папку Content и обнаруживаем что папки Levels даже не существует, хотя она есть в редакторе. (это ключевая особенность UE, надо о ней помнить и не забывать). Создаем в проводнике папку Levels, и запихиваем туда наш файл Level_01.smap.
Заходим в редактор и видим что файл так и не появился. Однако запустив игру в Output Logs, уже отсутствует строка о том что файл таки не открылся. Так что, скрипт его увидел и прочитал. Но вот почему строк в нём 0

+ описание режима отладки

Есть ещё один способ.
PS: так и думал что не влезет всё, вышел за пределы 25000, ну а продолжение на следующей странице 8)
Страницы: 1 2 3 4 Следующая »

#Blockmap, #debug, #MMO, #Tilemap, #Unreal Engine

23 мая 2017 (Обновление: 28 мая 2020)

Комментарии [5]