Blueprints Урок 6

Опубликовал Konradvall
17-10-2018, 15:30
443
2
Blueprints Урок 6

Всем добрый день или вечер, для начала я хотел бы с вам еще раз обсудить такую деталь - как подача информации в моих уроках. Дело в том что в прошлой статье один из пользователей выразил желание поставить дизлайк моему уроку по дизайну уровней, повторюсь еще раз, моя основная задача не показать вам как работает та или иная логика и как её реализовывать, а как правильно оперировать нодами при составлении блупринтов, написании логики, а также постоянно привожу примеры из жизни разработчика, как своей, так и знакомых мне людей. Я обязан научить вас мыслить самостоятельно, я не могу рассказать вам про все, это физически не возможно, но именно то что я вам показываю работает не только в той логике, в которой я привел её вам, но и в при составлении других! Это базис! Просто эксперементируя вы можете научиться чему то большему, также я продолжу в своих статьях рассказывать вам о процессе разработки, как это было в прошлой статье, для того что бы вы уяснили что разработка игр это не хобби на часок вечером после работы, а тяжелый и титанический труд. Создание игры это в первую очередь не способ поднятия бабла (из за таких вот домашних "барыг" в Steam сейчас очень много шлака и дешевых подделок, благодаря сервису GreenLigth), а метод донесении своего видения какой либо идеи до широких масс игроков, способ рассказать историю которая взволнует игрока и заставит либо сопереживать либо ненавидеть. Всем кто хочет поставить статьям дизлайк - в заголовке статьи есть рейтинг (от одной до пяти звезд), ставьте рейтинг который вы считаете нужным и пишите в комментариях что именно вам не понравилось, так как мне важно ваше мнение, я должен знать как развивать свой блок в дальнейшем, простые же выкрики в стиле "это говно!" и тому подобное, без конструктивной критики я буду игнорировать, прошу проявить понимание. Итак у меня отлегло, поэтому к уроку.
Сегодня мы поговорим о HUD - системе графического отображения информации состояний персонажа или мира. HUD очень важная деталь в любой игре, она призвана что бы облегчить игру, а у игрока было четкое представление о состоянии персонажа в данный момент.
Существуют два основный вида интерфейса - явный и не явный соответственно. В первом случае это интерфейс постоянно или большую часть игрового времени присутствует на экране и отображает от 70% информации о состоянии персонажа, для примера возьмите любой шутер и поиграйте в него, на экране как правило вы сразу увидите progressbar's уведомляющие о состоянии здоровья, стамины, количества патронов и прочей амуниции. Такие интерфейсы и есть явные, очень часто (почти повсеместно) они используются в таких жанрах как MMO RPG, RPG, RTS и так далее. Обусловлено это тем, что в большинстве случаев такой интерфейс является интерактивным и большинство отображаемых параметров далеко не косвенно, а напрямую влияют на управление и взаимодействие в игровом процессе.
Второй не явный интерфейс - очень часто используют в квестах, здесь нет отображаемых параметров здоровья или каких либо других значений, весь процесс изменения состояния персонажа доводиться до игрока через всплывающие уведомления, изменение анимаций и окрашивания экрана применяя цветовые фильтры или используя сигнализирующие декали на экране. К примеру в тех же шутерах присутствует система восполнения здоровья, где при минимальном значении данного параметра на экране всплывают кровоподтеки, а при интенсивном беге и уменьшении количества стамины персонаж начинает сигнализировать об этом звуковым методом, а именно задыхаться.
Во многих случаях данные виды интерфейса комбинируются. Я вырос в эпоху царствования 8 и 16 битных приставок, первую PS1 собрал сам из мусора купленного на рынке, далее рассвет эпохи PS2 и 3, ну а теперь меня подсадили на PS4. Но и конечно я великий ПК боярин, поэтому за всю свою жизнь переиграл множество игр и мне есть с чем сравнивать. Мое мнение на данный момент таково, что HUD в большинстве игр должен быть минималестичным, особенно это касается FPS, так как данный интерфейс очень часто отвлекает от игры и как правило он не вписан в игровой мир лаконично. К примеру возьмите любую стрелялку и вы увидите что внизу экрана всегда показаны количество патронов и тому подобной инфы, при этом самому игроку не понятно, каким образом персонаж видит данные параметры - перед глазами наверное плекс-стекло на котором во время боя, маленькие гномы меняют таблички с цифрами.
Лаконичным в данном случае интерфейс реализован в Crisis и тому подобных научно фантастических проектах, где HUD для персонажа и игрока это одно целое, так как к примеру в том же Crisis интерфейс отображал экзокостюм героя и это прекрасно было вписано в мир и его логику, поэтому не вызывало диссонанса.





Также для примера можно применить последний Falout 4, и то не весь, а лишь когда персонаж водружает себя в силовую броню и мы вместе с персонажем видим аутентичный и прекрасно вписанный в мир HUD.







Ну а теперь от слов к делу. Мы будем реализовывать оба варианта HUD в комбинированном виде, так как основные логики передачи данных от одного блупринта к другому мы уже прошли, поэтому мои разъяснения будут минимальны и только в отдельные моменты я позволю себе чуть больше разъяснений. Погнали!!!

HUD виджеты



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



Это графический конструктор, Те кто работал в Visual Studio и создавал приложения направленные на Windows Forms легко в нем освоятся, в окне Palette вы найдете все необходимые материалы и пресеты для создания интерфейса. Давайте просто без всяких наворотов, поместим на экран текст и прогресс бар в левый нижний угол.



Во вкладке деталей вы можете персонализировать настройки каждого элемента, ну это как обычно. Нас же с вами интересуют параметры Binding. Они позволяют создать функции передачи значений на наши компоненты в интерфейсе. Найдите параметры процентов для нашего прогресс бара в настройках Progress и установите данное значение на 100.



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



Но прежде чем делать логику в данной функции, я рекомендую вам скастовать нашего персонажа в Event graph нашего виджета и вывести из него переменную, которая в дальнейшем будет выдавать значения и нам не придется каждый раз делать каст. Делается это предельно просто, кастуем персонажа и из него делаем обычную переменную(не локальную!).



Вернемся к функции и напишем следующую логику



HUD Blueprint



Сейчас нам необходимо передать всю графическую информацию из нашего виджета на экран игрока при старте уровня, для этого мы будем использовать специальный блупринт. Вызываем контекстное меню в браузере и создайте блупринт класса HUD, для того что бы его найти используйте поиск при выборе класса блупринта. Откройте наш блупринт и напишите логику, которая создает наш виджет и выводит его на экран, для этого используем ноды Create widget и Add to viewport.



Для того что бы информация выводилась при старте уровня измените ваш GameMode установив ваш HUD блупринт, по умолчанию для данной локации. Запустите проект и посмотрите все ли правильно отображается.

Ну и самое интересное - проверка. Разместите на уровне Pain causer volume, разместите в персонаже логику получения урона (если у вас новый проект), запустите и посмотрите что получилось.





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



Установите заранее подготовленное изображение, предварительно загрузив его в ваш проект, для этого во вкладке Appearance подпункт brush вы найдете параметр для присоединения. Установите значение opacity на 0 и приступим к анимации. Для этого вы работаете так же как и с обычным Timeline только в самом графическом редакторе, ни чего сложного в данном нет, поэтому разъяснять подробно не буду, все это увидите в видео подробно.



Далее мы реализуем логику при которой будет проявляться splash для этого откроем блупринт мины и проделаем следующие



Запустите проект и посмотрите что получилось. Как обычно визуализация процесса написания в видео и ссылки на проект под статьей (вес проекта 34 Mb). В проекте также есть пример зависимости цвета прогресс бара от показателя здоровья. Следующий урок будет посвящен Open world level desing. Где мы с вами создадим terrain размером примерно 20 квадратных километров и рассмотрим очень полезную, но все еще эксперементальную функцию для работы с ним.





Если вы хотите поддержать меня и мои начинания, то можете сделать это просто:
Яндекс. Деньги - 410014371649547;
QIWI - +79141970017;
WebMoney - R277462752505;
PayPal - KonradDev
Комментарии к новости
  1. Lolly.Blueprint17 октября 2018 17:22
    Если можно еще потом рассказать про правильную компоновку компонентов в виджете и о том, как сделать авто изменение размеров в зависимости от текущего разрешения экрана.
    1. Валентин
      Konradvall18 октября 2018 04:14
      Заявка принята. Сразу говорю, что тема сложная, дело в том что подгонка под разрешение экрана хорошо выполнять на c++ а вот с блупринтами есть зогвоздки, я подумаю как правильно реализовать все это не прибегая к дополнительным скриптам и сделаю урок.
Добавить комментарий
Добавить свой комментарий:
Ваше Имя:
Ваш E-Mail:
  • bowtiesmilelaughingblushsmileyrelaxedsmirk
    heart_eyeskissing_heartkissing_closed_eyesflushedrelievedsatisfiedgrin
    winkstuck_out_tongue_winking_eyestuck_out_tongue_closed_eyesgrinningkissingstuck_out_tonguesleeping
    worriedfrowninganguishedopen_mouthgrimacingconfusedhushed
    expressionlessunamusedsweat_smilesweatdisappointed_relievedwearypensive
    disappointedconfoundedfearfulcold_sweatperseverecrysob
    joyastonishedscreamtired_faceangryragetriumph
    sleepyyummasksunglassesdizzy_faceimpsmiling_imp
    neutral_faceno_mouthinnocent
Введите два слова, показанных на изображении: *
Архив
«    Май 2019    »
ПнВтСрЧтПтСбВс
 12345
6789101112
13141516171819
20212223242526
2728293031 
Февраль 2019 (9)
Январь 2019 (85)
Декабрь 2018 (109)
Ноябрь 2018 (13)
Октябрь 2018 (33)
Сентябрь 2018 (98)
Опрос
ТОП Комментарии
Aleks_Lex пишет:
Спасибо за помощь!
alex
alex пишет:
Приветствую! Вот тут все есть - https://gfx-hub.net/tutorial/3895-cubebrush-hero-anatomy-en-vol-4-the-body-1.html
Aleks_Lex пишет:
Здравствуйте, перезалейте 5 архив пожалуйста, не найден.
alex
alex пишет:
Вот тут свежая версия -