Учимся азам программирования с Unreal Engine 4. Часть 1.

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


Так как я давно работаю в Unreal Engine, начиная еще с UE2 2002 года ( Unreal Tournament 2003, America’s Army: Operations и Unreal Championship.), я выбрал именно его для данных уроков. Движок бесплатен, потому любой желающий сможет повторить урок. Так же в последней версии, встроена система блюпринтов (чертежей), что позволяет наглядно показать выполнение кода. Я знаю что рано или поздно в моих постах всплывут люди, утверждающие что блюпринты более тормознутые и нагружают систему, в отличии от чистого языка программирования, и да эти люди будут правы. Однако наша задача не сделать конечный продукт, а освоиться в основах программирования.

Учимся азам программирования с Unreal Engine 4. Часть 1. Unreal Engine 4, Разработка, Gamedev, Курсы программирования, Длиннопост

Поскольку я не рассчитываю, что среди нас все уже знакомы с движком, мы начнем первый урок, с настроек движка, после его установки.  Установить вы его можете пройдя по ссылке https://www.unrealengine.com и после регистрации, вам останется скачать лаунчер и последнюю версию движка. 4.18.2 на данный момент.


Делать мы с вами будем topdown rpg. То есть рпг с низходящим ориентированием и видом расположении камеры. Или как говорят геймеры - вид сверху.


И так, первое что нам нужно это создать проект. Запускаем сам движок, и в появившемся окне выбираем Top-Down, после чего выбираем вариант без начального контента.

Указываем путь до папки где будет лежать ваш проект, и даем ему название. Все остальное оставляем не тронутым. После чего жмем создать проект (Сreate Project) и после загрузки у нас откроется окно редактора.

Учимся азам программирования с Unreal Engine 4. Часть 1. Unreal Engine 4, Разработка, Gamedev, Курсы программирования, Длиннопост

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


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


Разбираться с его настройками, мы будем в процессе обучения. Поскольку в данный момент, наш персонаж умеет только бегать, и то криво, предлагаю начать с базовых характеристик которые нужны в любой рпг. Я говорю о Жизни, опыте, выносливости. Конечно данные параметры варьируются от игры к игре, где то больше параметров где то меньше. Но мы начнем с этих.


Вначале нам нужно сделать нашему персонажу очки жизни. Для удобства работы, используем термин (HP - health points).


Первым делом раскроем в браузере контента, нашу структуру папок(дерево папок), и выберем папку TopDown а в ней Blueprints. Как показано на скриншотах. Нужные кнопки подсвечены оранжевым цветом.

(не обращайте внимания что у меня могут быть другие файлы, так как это мой старый проект)

Учимся азам программирования с Unreal Engine 4. Часть 1. Unreal Engine 4, Разработка, Gamedev, Курсы программирования, Длиннопост

После чего в самой папке откроем нашего персонажа. TopDown Character.

Учимся азам программирования с Unreal Engine 4. Часть 1. Unreal Engine 4, Разработка, Gamedev, Курсы программирования, Длиннопост

У вас откроется окно персонажа. Unreal удобен тем, что для каждого момента работы, придуманы удобные окна редактора. Так например для персонажа, в одном окне, мы можем запрограммировать его, изменить внешний вид, создать новые функции, и многое другое. Это лучше чем скакать по множеству программ и окон. По середине мы видим, те самые блюпринты (далее БП). Blueprints это визуальный код. То есть все что вы можете написать руками в блокноте, тут отображается в виде блоков и соединяющих их макарон. Более того, во время игры, движок будет подсвечивать блоки и макароны показывая как работает код. Что нам и пригодиться во время обучения.

Учимся азам программирования с Unreal Engine 4. Часть 1. Unreal Engine 4, Разработка, Gamedev, Курсы программирования, Длиннопост

Первым делом нам нужно создать переменную для нашего персонажа. Для этого смотрим в левое нижнее окно где видим надпись Variables, что и переводиться как - Переменные.

Жмем на плюс, и называем нашу переменную Health (жизни). После чего выделяем ее левой кнопкой мыши, что бы она подсветилась оранжевым, и в правом столбце, откроется новое окно, для редактуры переменной. В нем нам нужна строчка, Variable Type (Тип переменной). Тип переменной указывается собственно тип выбранной переменной.


Типов переменных большое множество, даже в самом движке их 56 базовых, и вы сами можете создать еще больше. Тип переменной указывает ей, какую арифметическую функцию она должна выполнять, то есть множить, делить, умножать, а так же указывает что переменная может делать или нет, и какие данные в ней будут содержатся. Нам нужен тип Float (Плавающая). Тип Float означает, что переменная может изменять свои свойства в процессе работы. К примеру, наши жизни могут равняться в начале игры 100 а через пару минут упасть до 10 или возрасти до 200. Что бы это работало правильно, мы указываем тип переменной - плавающая (float). Как показано ниже.

Учимся азам программирования с Unreal Engine 4. Часть 1. Unreal Engine 4, Разработка, Gamedev, Курсы программирования, Длиннопост

После этого, на верхней панели редактора, жмем кнопки Compile (Компилировать) и Save (Сохранить). Что значит компилировать?



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



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

Учимся азам программирования с Unreal Engine 4. Часть 1. Unreal Engine 4, Разработка, Gamedev, Курсы программирования, Длиннопост

Низкий уровень, это машинный код. 0101001. Но не забывайте что низкий уровень языка, это не только машинный код, но и даже некоторые языки программирования, например старый добрый ассемблер, фортран, java, .net. То есть эти языки, максимально приближены по сходству к машинному коду.


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


(Подсказка: выработайте привычку, постоянно компилировать и сохранять проект, при работе с движком. Это позволит избежать ненужных ошибок.)


После того как мы скомпилировали, сохранили и закрыли окно, нам понадобится внешнее отображение жизней персонажа визуально. То есть те самые Health Bar (Бар-панель жизни), на которые мы часто смотрим играя в игры.


Для этого, в окне контента, мы кликнем правой кнопкой по папке Content (выделена крупно), и создадим новую папку, New Folder (отмечена синей иконкой) и назовем ее сокращенно UI (User Interface) Интерфейс пользователя.


В этой папке мы будем создавать собственно интерфейс для нас и игрока для удобства работы и игры. Перейдем в нее и кликнув правой мышью, в открывшемся меню, выберем User interface и в нем схему виджета. (Widget Blueprint). Как показано ниже.

Учимся азам программирования с Unreal Engine 4. Часть 1. Unreal Engine 4, Разработка, Gamedev, Курсы программирования, Длиннопост

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

Наш виджет назовем HUD. То есть (Heads-Up Display) Дисплей без наклона головы.

В него мы позже будем записывать весь наш интерфейс персонажа. А пока что, откроем его.

Учимся азам программирования с Unreal Engine 4. Часть 1. Unreal Engine 4, Разработка, Gamedev, Курсы программирования, Длиннопост

В левом верхнем окне палитры, в строку поиска, введем название Progress Bar.

То есть бар прогресса. Бар прогресса может отображать любое числовое значение. Главное это привязать его графическую сторону к вашему коду. Перетащим один Progress Bar в окно редактора по середине. И выбрав бар, в правом окне деталей, назовем его Healt, как на скриншоте выше. Далее зададим ему цвет. Для удобства. Пусть будет красный.


Для этого все в том же окне деталей, найдем строчку Appearance (Внешность), и жмакнем по полоске, для того что бы открылся редактор цвета.

Учимся азам программирования с Unreal Engine 4. Часть 1. Unreal Engine 4, Разработка, Gamedev, Курсы программирования, Длиннопост

Подберите себе красный оттенок по настроению, и жмакните OK. Что бы проверить, все ли правильно, чуть выше Внешности, есть окно Progress. Отвечающая за заполнение вашего бара. В строке Percent указаны проценты по умолчанию. Чем больше процентов, тем больше заполнится ваш бар. Зажмите левой кнопкой окно с цифрами и поводите им слева на право. Увидите как бар заполняется.


На самом верху окна деталей, над прогрессом и внешностью, есть окно Slot (расположение). Оно отвечает за размеры и расположение всех запчастей вашего интерфейса.

Что бы не тратить на него много времени, я переведу вам основные моменты.

Anchors (Якоря) - привязывает выбранный элемент интерфейса, к определенной позиции на экране, для того что бы этот элемент не двигался с этого места никогда.

Position X и Y - расположение элемента, по координатам X и Y (Верх низ, право лево)

Size X и Y - размеры элемента.

Alignment - согласование, но в данном контексте, выравнивание положения элемента в градусах.

Size to Content - приравнять размеры к чему либо.

Zorder - порядок наложения. То есть в каком порядке располагаются элементы к наблюдателю.

Мы выберем Якорь, нижний левый угол. И далее просто скопируйте расположение вписав цифры как у меня на скриншоте.

Учимся азам программирования с Unreal Engine 4. Часть 1. Unreal Engine 4, Разработка, Gamedev, Курсы программирования, Длиннопост

После этого опять спустимся вниз к строке Progress и найдем там кнопку Bind. Bind отвечает за привязку вашего интерфейса к вашему коду.

Жмем на кнопку и выбираем Create binding. ( создать новую привязку ). У вас откроется меню с конфигурацией и блюпринтом вашего бара.  В нем у вас будет только начальный блок, ваша задача самостоятельно написать первый код.

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


Прежде чем смотреть на скриншот, повторите код сами. Благодаря цветовой разметке, быстро разберетесь.


Начальный блок (Get health percent) - cast to topdowncharacter - return node

От Cast to topdowncharacter из object мы тянем макаронину и создаем Get player Character.

От Cast to topdowncharacter из As top down character мы тянем и создаем get health.

Get health соеденяем с return node.


А теперь проверим.

Учимся азам программирования с Unreal Engine 4. Часть 1. Unreal Engine 4, Разработка, Gamedev, Курсы программирования, Длиннопост

Бар Health запрашивает данные для созданной нами переменной Health. После чего передаёт эти данные персонажу игрока. А потом записывает эти данные за нашим персонажем. Что бы цифра не изменялась сама по себе.

Далее компилируем, сохраняем и закрываем окно. Теперь вернемся к персонажу. Нам нужно что бы наш свеже созданный бар с жизнями отображался у игрока. Для этого открываем папку TopDown а в ней Blueprints, и выбираем персонажа. Поскольку мы создавали наш проект по шаблону, внутри уже будет код для управления персонажем. Это конечно минус, потому что вносить изменения в этот код, это нагромождение лишнего, код будет более тормознутым, но с оптимизацией я вас познакомлю не скоро. Мы учимся.


Находим блок Event Begin Play. Он отмечен красным и скорее всего уже соединен с чем нибудь. Нам нужно разорвать его связь с остальным кодом. Для этого, мы кликаем правой кнопку по блоку и выбираем Break link to

Учимся азам программирования с Unreal Engine 4. Часть 1. Unreal Engine 4, Разработка, Gamedev, Курсы программирования, Длиннопост

Разорвав связь, мы перетаскиваем блок подальше.

Наша задача показать игроку бар жизней. Для этого тянем макароны от Event begin play и создаем новый блок Create Widget (создать виджет). В созданном блоке отвечающим за создание виджета, в фиолетовой строке Class (обозначает класс виджета), из выпадающего меню выбираем наш HUD, а потом от блока Create widget тянем макаронину из Return value и создаем Add to Viewport.

Add to viewport выведет нам изображение виджета на экран игрока.

Теперь соеденим вторую макаронину от Create widget с Add to viewport. А Add to Viewport соеденяем с блоком, который остался не подключенным в самом начале, после того как мы разорвали связь с Event begin play.

Должно получиться вот так.

Учимся азам программирования с Unreal Engine 4. Часть 1. Unreal Engine 4, Разработка, Gamedev, Курсы программирования, Длиннопост

В левом окне где мы создали переменную Healt, выбираем ее, и в левом окне деталей, в самом низу есть строчка Default Value (Значение по умолчанию). Поставьте его 1.0 что бы проверить работу бара и кода.

Компилируем и сохраняем и закрываем окно персонажа.


После этого жмем большую кнопку Play на самом верху нашего редактора и смотрим появился ли бар и заполнен ли он. Если да то вы молодец) Создали первую по сути своей программу и впервые нарисовали интерфейс. Что бы выйти из режима игры, просто нажмите Escape (esc).

Учимся азам программирования с Unreal Engine 4. Часть 1. Unreal Engine 4, Разработка, Gamedev, Курсы программирования, Длиннопост

Если по какой то причине он пустой, значит либо вы допустили где то ошибку. Либо можете попробовать изменить значение переменной Health с 1.0 до 100.


Может возникнуть одна ошибка, которая не зависит от вас. Иногда код без указания, какое действие надо выполнять первым делом, может заглючить. Если это произошло, то вновь откроем окно персонажа и разорвем связь Add to Viewport с правой стороны. Потом от Viewport добавим новый блок Sequence(Последовательность), который будет отвечать за последовательность действий.

И соединим его с Branch в нашем случае. Если опять не заработает, пусть кто то скажет в комментариях. Глюки бывают еще и в разных версиях движка.


Что же, на этом всё! Поздравляю с первыми успехами. В следующем уроке мы создадим бар под выносливость, научим бегать персонажа, и привяжем его бег на выносливость.

Лига Разработчиков Видеоигр

6.6K постов22.1K подписчиков

Добавить пост

Правила сообщества

ОБЩИЕ ПРАВИЛА:

- Уважайте чужой труд и используйте конструктивную критику

- Не занимайтесь саморекламой, пишите качественные и интересные посты

- Никакой политики


СТОИТ ПУБЛИКОВАТЬ:

- Посты о Вашей игре с историей её разработки и описанием полученного опыта

- Обучающие материалы, туториалы

- Интервью с опытными разработчиками

- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе

НЕ СТОИТ ПУБЛИКОВАТЬ:

- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры

- Посты, единственная цель которых - набор команды для разработки игры

- Посты, не относящиеся к тематике сообщества

Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.

ЗАПРЕЩЕНО:

- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции

- Выдавать чужой труд за свой

Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.


О РАЗМЕЩЕНИИ ССЫЛОК:

Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:

- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества

- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз

- Cсылка размещается в формате: "Страница игры в Steam: URL"

16
Автор поста оценил этот комментарий
Туториал это конечно хорошо, но вот в чем смысл именно такого формата? Чтобы человек который "джва года ждал эту игру" как обезъянка повторял? А потом без понимания того что сделал бежал на форумы и спрашивал "а как превратить Ману в хп". Не понимая даже что такое переменные. Имхо если делать акцент туториалы, то они должны быть похожи на документацию. Мол вот блок блюпринтах, он работает так и так. Фишки такие и такие. А дальше сами. Такие туториалы без знания ООП вредят в 90% случаев.

хотя у вас все же получше получилось чем в большинстве вариантов конечно) респект
раскрыть ветку (1)
12
Автор поста оценил этот комментарий
Смысл такого формата в том, что бы поверхностно ознакомить человека с азами и базой наглядно. В моем понимании это проще, чем открыть очередной учебник и с криком oh really?! Закрыть его. Потому что любой учебник подрузомивает что человек открывший его, уже имеет базовые знания алгоритмов ооп и синтаксиса. Да и по себе знаю, каким бы гуру кода ты небыл, стилистика учебника заставляет мозг закипать. Ибо слишком много информации. А когда ручками делаешь сам, начинаешь привыкать и понимать как куда и зачем. Особенно если, из урока в урок делаешь похожие действия.
показать ответы
3
Автор поста оценил этот комментарий
Наверное, возможно стоило это обозначить? Или, всё-таки начать именно с программирования? В 2д движках можно запрогать движение плеера, например. В 3д, даже если управление из коробки - тоже что-то запрогать... Атаку? Чтоб было увлекательно
раскрыть ветку (1)
5
Автор поста оценил этот комментарий
А что, код распределения данных, переменной health, уже не код и не программирование?
показать ответы
1
Автор поста оценил этот комментарий

ты стул прожег уже? Или пока держится? С такой ранимой натурой не стоит мб ничего писать на общее достояние, а то инфаркт хватит ещё. Ты, походу, реально не понимаешь, что такое желчь :D

раскрыть ветку (1)
2
Автор поста оценил этот комментарий

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

4
Автор поста оценил этот комментарий

какая-то бессмысленная неуместная телега Х_Х

раскрыть ветку (1)
5
Автор поста оценил этот комментарий

Вот что бы она была осмысленной, и нужно писать о самых базовых вещах, о том как работает интерфейс, как работают базовые функции и тд.


Иначе придет великий макаронный монстр, и сожрет говнокод.

Иллюстрация к комментарию
показать ответы
Автор поста оценил этот комментарий

я планирую 2д платформер. 3д это хорошо, но в одиночку очень трудная задача.

раскрыть ветку (1)
2
Автор поста оценил этот комментарий
Аналогично можете заменить 3д сцену на 2д
19
Автор поста оценил этот комментарий
ТС это не тутор "азов программирования". Это какой-то обзор интерфейса. Программирования в твоём туторе ни грамма нет.
раскрыть ветку (1)
10
Автор поста оценил этот комментарий
Вы предпочиате туторы из разряда рисуем овал, дорисовываем сову?
http://img103.xooimage.com/files/9/1/b/untitled-46b8493.jpg
показать ответы
1
Автор поста оценил этот комментарий

ну вот смотри. к тебе понабежали "а как сделать хому 6". Вот как я говорил, так и случилось. Это то чего надо как огня избегать.

раскрыть ветку (1)
3
Автор поста оценил этот комментарий

А еще набежали великие гуру кодинга, у которых только один аргумент: я так сказал.


Не буду же я обращать внимания на всех и вся верно? Просто продолжу писать гайды как считаю нужным. А то кому надо сделать "Грабить корованы" сами сойдут на нет, когда сложность повыситься.

показать ответы
Автор поста оценил этот комментарий

проблемы какие-то с восприятием? Если тебе кажется, что я "исхожу злобой" - советую остудить очко и подойти к вопросу с головой а не с детскими обидками. Я пишу по делу и указываю на ошибки. Ты взглянуть с другой стороны не можешь, как бы ни изгалялся и не лез из кожи вон...

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

У тебя да. Были притенении к оформлению поста?

ТС это не тутор "азов программирования". Это какой-то обзор интерфейса. Программирования в твоём туторе ни грамма нет.
полагаю, это связано с тем, что это только первый пост в серии?
Наверное, возможно стоило это обозначить? Или, всё-таки начать именно с программирования? В 2д движках можно запрогать движение плеера, например. В 3д, даже если управление из коробки - тоже что-то запрогать... Атаку? Чтоб было увлекательно

Ой а почему это пост пронумерован как "часть 1".

Ой а почему в посте сказано:

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

Ой а почему внезапно в конце поста мы пишем код на блюпринтах?


Нет ошибок друг мой, есть банальная желчь, либо ты настолько рассеяный что пропустил эти детали.


Еще вопросы?

показать ответы
3
Автор поста оценил этот комментарий

всегда найдётся человек, который будет восторгаться в ущерб логике и здравому смыслу :(

раскрыть ветку (1)
4
Автор поста оценил этот комментарий

всегда найдется человек, который будет исходить злобой, в ущерб логике и здравому смыслу :(

показать ответы
Автор поста оценил этот комментарий

Допустим. Со школы горю желанием сделать свою игру. Типа дарк соулс аля 2д. Рисовать умею, могу в анимацию чуточку. С движками тупее старика. Смогу ли я по вашим туторам создать рабочую болванку игры? Самое сложное в этом наверное будет создание минимального ИИ для врагов и для боссов.
Вот хочу красивую и мрачную такую же раздирающую задний проход.

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

кстати говоря, кто-нибудь использовал unreal engine 4 в связке с mingw?

раскрыть ветку (1)
2
Автор поста оценил этот комментарий
Можно поменять компилятор но для этого, придется привязать функции ввода и вывода кода из движка в сторонний компилятор. Точно так же можно привязать отдельное ide к движку. На форуме кто то этим занимался уже привязывая codeblocks и mingw как внешние обработчики.
В последней версии движка еще можно ручками настроить ide и компилятор через настройки проекта
1
Автор поста оценил этот комментарий

>Более того, можно убрать Event begin play из bp персонажа, и заложить событие отдельно в саму сцену или карту.

Глупее решения сложно найти. На каждой сцене будешь дублировать бп?

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Зачем дублировать, если можно создать мастер бп и прописать на каких сценах в каком порядке активировать какой event. Все в одном файле.


Я же говорю, не знаешь, не лезь.

5
Автор поста оценил этот комментарий

На самом деле довольно скудное описание, потому что не правильно много. Автор, тебе бы теорию подтянуть, там где ты хп получаешь функцией из плеера ты гетером берешь переменную - так и стоило описать.

Плюс ты бы начал с плюсов, минусов плюсов или блупринтов и тд.

Тот же Begin play - это не начало игры. Это функция, которой нельзя доверять. Она срабатывает в разное время. Она может сработать когда у тебя еще Construct (создание объекта) не сработало, либо когда уже сработало. Т.е. не надежная хренотень.

Чтобы не было: >"Если по какой то причине он пустой, значит либо вы допустили где то ошибку. Либо можете попробовать изменить значение переменной Health с 1.0 до 100.", нужно поставить Slider Range или Value Range у переменной в соответственные границы.

Про общие ошибки в архитектурных решениях я даже не пишу.

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Это только один из способов решения той или иной задачи.


Begin play это именно начало работы игры, после чего начинают проигрываться все скрипты после. Так что не надо фигню рассказывать.

This event is triggered for all Actors when the game is started, any Actors spawned after the game is started will have this called immediately.

Если кому то понадобиться более точные триггеры сцены, всегда можно использовать Event Actor либо другие варианты обозначения событий. Более того, можно убрать Event begin play из bp персонажа, и заложить событие отдельно в саму сцену или карту. Тем самым сделал последовательную активацию всех событий в заданном порядке. То что функция сработает или нет, то же решается разными способами. Все зависит от архитектуры которую ты выберешь.


нужно поставить Slider Range или Value Range у переменной в соответственные границы.

Это нужно делать только тогда, когда ты хочешь задать диапозон числовых значений. Пока параметр Health не прикручен к фиксированным значениям, мне диапозон нахрен не уперся. Потому что я всегда могу прикрутить рамки числовых значений параметра, отдельно в другом блюпринте, либо завязать данный параметр на другой кусок кода, например регенерацию жизней.


Про общие ошибки в архитектурных решениях я даже не пишу.

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

показать ответы
Автор поста оценил этот комментарий

а как делать в стиле might and magic 6

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Те же яйца, только меняем графическую составляющую интерфейса и графония на 2д

6
Автор поста оценил этот комментарий
Про низкоуровневые джаву и дотнет с вики копипаст?
раскрыть ветку (1)
5
Автор поста оценил этот комментарий
В целом все хорошо, конечно все зависит от продолжения. Есть только у Вас вырывающая глаз ошибка. Фортран, java и .net языки исключительно высокого уровня. Фортран и java транслируются в байт-код, но сами по себе языки не низкого уровня. На .net можно использовать спецефичный язык низкого уровня, однако .net сам по себе не совсем язык.
раскрыть ветку (1)
1
Автор поста оценил этот комментарий
Я не правильно мысль написал, хотел сказать - условно отнести к низким уровням. В net. Есть ретранслятор cil который может перевести в низкоуровневый код. В то же время сам cil является высокоуровневым языком, но на нем можно писать низкоуровневый код. Тоже самое с явой и фортраном.
12
Автор поста оценил этот комментарий
>>Тип Float означает, что переменная может изменять свои свойства в процессе работы. К примеру, наши жизни могут равняться в начале игры 100 а через пару минут упасть до 10 или возрасти до 200. Что бы это работало правильно, мы указываем тип переменной - плавающая (float).


Я маленько опешил от такого определения переменной типа флоат.
раскрыть ветку (1)
7
Автор поста оценил этот комментарий
То есть получить 0.1000 ты можешь, а вот 0.10000 то есть ста тысячные, нельзя
Иллюстрация к комментарию
раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Нолик забыл. Бывает.

6
DELETED
Автор поста оценил этот комментарий
"переводит язык в низкий уровень" "дисплей без наклона головы" максимально приближенная к машинному коду джава. Аффтар жги ещо
раскрыть ветку (1)
Автор поста оценил этот комментарий

А что не так?

3
Автор поста оценил этот комментарий
А английский текст откуда? Там описывается как раз-таки классический тип данных с плавающей запятой :)
раскрыть ветку (1)
2
Автор поста оценил этот комментарий

Из документации к движку. Я пояснил ниже все фишки.

6
DELETED
Автор поста оценил этот комментарий
"переводит язык в низкий уровень" "дисплей без наклона головы" максимально приближенная к машинному коду джава. Аффтар жги ещо
раскрыть ветку (1)
Автор поста оценил этот комментарий

Поскольку ты очередной быдлокодер, который знает всё лучше всех, вот прошу ознакомиться и отправиться в игнор.


1. Common Intermediate Language (CIL), formerly called Microsoft Intermediate Language (MSIL), is the lowest-level human-readable programming language using as translator in .net



2. Heads-Up Display, аббр. HUD (англ. head-up — предназначенный для просмотра без наклона головы, display — индикация)



3. Узнай что такое пакеты sun.misc.Unsafe и Varhandle класс в Java. Потом возвращайся.

показать ответы
6
Автор поста оценил этот комментарий
Float в блюпринтах может носить числовое, текстовое, и любое иное значение. В зависимости от того что ты хочешь.

А можно пояснение, в чем это выражено?


И как из

Float   Green   Green variables represent float data, or numbers with decimals such as 0.0553, 101.2887, and -78.322.

могло получиться

Тип Float означает, что переменная может изменять свои свойства в процессе работы.
раскрыть ветку (1)
2
Автор поста оценил этот комментарий

Очень легко, поясняю для тех кто в танке. Для этого нам понадобиться учебник по типам данных (data type).

В классических языках программирования Float - представляет арифмитическое число с плавающей запятой. В них заложена форма представления вещественных (действительных) чисел, в которой число хранится в форме мантиссы и показателя степени.


То есть другими языками, интерпритировать float иначе как арифмитическое число нельзя. Потому что Float относиться к вещественным арифметическим данным.


В Blueprints разрабы эпиков пошли другим способом о чем я писал комментарием выше. Float в блюпринтах является именно плавающей переменной в которую можно заложить все что угодно. А не только арифметические номерные знаки. Суда можно заложить слова, обьекты, цвета, музыку и многое другое. Потому как вы правильно взяли цитату из документации, там написано:

Represent float data, or numbers


Представляет плавающую информацию или номера (номерные числители). Эпики в своих блюпринтах используют адскую смесь из классического C++, Kismet и LingvoMath.


Например вот тут показан пример как можно с помощью типов команд из Kismet, изменить дефолтные свойства переменной Float:

https://docs.unrealengine.com/latest/INT/BlueprintAPI/Math/F...


Это раз.


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

https://docs.unrealengine.com/latest/INT/BlueprintAPI/Utilit...


Мы получаем тип данных в виде строки текстовых знаков, и выводим их как плавающую переменную.


Так же есть примеры, где показано как можно изменить float c цифровыми данными, в линейный цвет, процедуральный звук, и так далее.


Еще в движке есть интересная функция Array. Это массив переменных. Создав Array можно заложить 5-6 типов Float и экспортировать на выход данные Float в string,Float в Amplitude(аудио амплитуды), в exec (выполнение программы или скрипта) и так далее.


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


Вот пример. На скриншоте, где обьект на выходе, разбивается на Float, Vector, String и тд

Иллюстрация к комментарию
показать ответы
11
Автор поста оценил этот комментарий
Когда java стала языком низкого уровня? И когда дотнет вообще стал языком? Да java компилируется в байт код, да c# компилируется в cil, но сами языки от этого не стали низкоуровневыми, и то, сил это не низкий уровень, он только потом компилируется в машинный код. Половина текста вообще не несет в себе смысла. Сударь, я беру на себя ответственность сказать что вы не программируете с 2002 года. Человек, который пишет 15 лет на плюсах это гуру, а не тот, кто утверждает что Float это тип, который меняется в процессе выполнения работы, да еще и плавающий, и что тип переменной указывает на то, какие операции она должна выполнять. Скорее вы просто насмотрелись туториалов в ютюбе и решили написать свой. Плохо так делать, кто-то попробует так же и потом наплодит еще своих туториалов. И где тут вообще программирование?
раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Сударь, в игнор. Запарили уже своим неведением. Все вокруг такие ахуенные гуру, но когда просишь кого нибудь предложить свой вариант, или выложить хоть что то с гитхаба, каждый сдувается, ибо ничего сложнее Hello world не делали.


1. Common Intermediate Language (CIL), formerly called Microsoft Intermediate Language (MSIL), is the lowest-level human-readable programming language using as translator in .net


2. Узнай что такое пакеты sun.misc.Unsafe и Varhandle класс в Java. Потом подумай почему Java может использоваться и используется как low level.

показать ответы
16
Автор поста оценил этот комментарий

Чушь. float - переменная типа "с плавающей запятой". Записать в нее строку нельзя, можно только сконвертировать из строки (т.е. строку вида "12.34" привести в число 12.34). Хранить в ней цвет и т.п. нельзя, но можно одну компоненту цвета.


Операции отсюда https://docs.unrealengine.com/latest/INT/BlueprintAPI/Math/F... это все операции с дробными числами. Здесь https://docs.unrealengine.com/latest/INT/Engine/Blueprints/U... четко написано что float представляет "число с десятичными дробными знаками" т.е. дробное число.

раскрыть ветку (1)
2
Автор поста оценил этот комментарий

Для тебя чушь - всё что ты не делал и не использовал? Я привел ссылки и примеры из той же документации. В чем проблема?

показать ответы
21
Автор поста оценил этот комментарий
А что значит изменять свои свойства?

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

Я никогда не слышал, чтобы говорили пременная типа float в другом контексте. И, ок, а как тогда в движке называется переменная с плавающей запятой?
раскрыть ветку (1)
4
Автор поста оценил этот комментарий
Блюпринты это отдельный визуальный язык от эпиков. На первой картинке поста есть обьяснение.
В блюпринтах нет понятия 1 переменная 1 результат. Например блок ветвление (branch) обьеденяет в себе сразу и if else to и return. Float в блюпринтах может носить числовое, текстовое, и любое иное значение. В зависимости от того что ты хочешь.
Однако именно числовое значение float в бп ограниченно от 0.0 до любого значения не выше десяти тысячной после точки. То есть получить 0.1000 ты можешь, а вот 0.10000 то есть ста тысячные, нельзя
показать ответы
41
Автор поста оценил этот комментарий
"Тип Float означает, что переменная может изменять свои свойства в процессе работы."

Тс, это шутка такая?
раскрыть ветку (1)
5
Автор поста оценил этот комментарий
А что не так? В движке float это тип переменной. В с++ это тип с плавающей запятой наименьшего размера. В html, float переменная выравнивания элемента. Я шутки не вижу. Все зависит от синтаксиса
показать ответы
7
DELETED
Автор поста оценил этот комментарий
Что-то вы какой-то бред пишите. По самому UE ничего не скажу - я на другой стороне баррикад - Unity, но...так и хочется сказать: "что, б****?". Что по типам, что по компиляции, что по фреймворкам. Ну и...такое чувство, что бездумно, кусками откуда-то вырвали информацию, не обращая внимания на контекст, и перевели в google translate.
P.S.: Еще бы назвали float - "поплавок".
раскрыть ветку (1)
1
Автор поста оценил этот комментарий

if (iamidiot && cantreadnormal) {

  go to Ignore;

}


Как вы надоели Unity дебилы.

показать ответы