- Инди-студия создает красивый киберпанк-экшен с избиением роботов и бегом по стенам на Unreal Engine 4
- Больше интересных статей на Shazoo
- Видео от Shazoo
- Создаем 2D платформер при помощи Unreal Engine 4. Часть 1 — Игровой персонаж, движение
- Создание компонента движения для системы лазания в Unreal Engine
- Создаем 2D платформер при помощи Unreal Engine 4. Часть 1,5 — Прыжки
Инди-студия создает красивый киберпанк-экшен с избиением роботов и бегом по стенам на Unreal Engine 4
Случайно бродя по твиттеру в поисках интересных проектов, сегодня наткнулся на любопытный проект от канадской инди-команды Imagine Dreams. У игры пока нет финального названия, лишь рабочий тайтл — Project Kato, но выглядит он симпатично. Особенно для небольшой команды, о которой толком ничего неизвестно.
Судя по твиттеру, команда состоит из людей, которые работали над Total War, Crysis 2 и 3, Batman: Arkham Knight, Hitman 2 и другими играми. Project Kato задумывается как одиночная экшен-RPG в антиутопической киберпанковой колонии, где машины захватили общество и превратили людей в кибернетически усовершенствованных воинов и служак. Персонаж по имени Като решает собрать части того, что осталось от человечества, практикуя свои новые способности, которыми его наделили сами машины.
Общая концепция едва ли новая — это типичный троп про героя, которого создали антагонисты и теперь ему предстоит бросить вызов системе.
Разработчики планируют:
- Плавный геймплей, динамический и иммерсивный экшен
- Открытый мир
- Увлекательную историю
- Система способностей с древом скиллов
- Различное оружие и типы врагов
- Гигантских боссов
Очевидно, что Project Kato еще далека до релиза, но как минимум анимация боевой системы выглядит красиво.
Больше интересных статей на Shazoo
- 10 игр для iOS и Android, которые не стыдно попробовать PC и консольному геймеру
- 6 шикарных квестов в Cyberpunk 2077
- Гайд Cyberpunk 2077 — как получить легендарную моноструну бесплатно
- Гайд Cyberpunk 2077 — все вещи Джонни Сильверхэнда
- Гайд Cyberpunk 2077 — расположение легендарных киберимплантов
Видео от Shazoo
Источник
Создаем 2D платформер при помощи Unreal Engine 4. Часть 1 — Игровой персонаж, движение
Давайте подготовим раскадровки для 2х состояний: покой и бег, для этого необходимо удалить красный фон (нам ведь не надо, что бы персонаж перемещался всегда на фоне красного прямоугольника) и вырезать требующиеся части изображения, на выходе получая что-то вроде этого:
Из фоновых изображений пока вырезаем только пол:
Структурируем папки проекта и импортируем соответствующие изображения:
Далее необходимо из текстур извлечь, собственно, спрайты. Сделать это можно двумя способами: автоматически и вручную, замечу, что с автоматичемским извлечением может быть один нюанс: спрайты будут пронумерованы по возрастанию, но совсем не обязательно, что нумерация будет соответсвовать их положению в исходной текстуре, так что после извлечения рекомендую все тщательно проверить, что бы впоследствии не было артефактов анимаций. Поскольку у нас все же урок, сделаем все вручную.
Первым делом создаем еще пару папочек, на этот раз в “Sprites” → “Alucard”, внутри которой будут папки “Idle” и “Walking” с соответствующими спрайтами. Итак, создаем пустой спрайт, называем его “Idle_1” и открываем. Сразу же переходим в “Edit source region”, а в качестве текстуры-источника указываем текстуру «Alucard_Idle».
Один спрайт должен содержать один кадр анимации персонажа, так что скорректируем значения “Source UV” и “Source dimension”, что бы получить один кадр, либо просто дважды кликаем на нужно изображение, что бы автоматически определить его границы:
Проделываем то же самое с оставшимися кадрами покоя и ходьбы:
Из текстуры платфомы так же создаем спрайт, но, поскольку там всего одно изображение можно сделать просто через контекстное меню.
Самое время придать немного жизни нашим спрайтам! Для этого создаем “Animation flipbook”, даем ему имя и открываем. Добавляем соответствующие кадры по порядку и выставляем количество кадров в секунду по вкусу, мне нравится 6:
Повторяем для ходьбы и на выходе имеем 2 flipbook’а:
Теперь добавим на сцену нашу платформу, важно что в ее положении по компонента Y была равна 0. Далее добавим управление (в заготовке оно уже включено, но переназначим, как нам будет удобно): Edit → Project Setting → Input.
Переходим непосредственно к созданию персонажа. В папке “Blueprints” создаем новый BP, нас спросят, какой класс принта, выбираем “Character”, даем имя, открываем и направляемся в раздел “Components”. Добавляет к капсуле Flipbook, в качестве источника выбираем заготовленную Idle анимацию, так же добавляем SpringArm и к ней цепляем камеру, в принципе можно обойтись и без руки, но лучше с ней. Настраиваем размеры спрайтов и капсулы по вкусу, но капсулу лучше делать немного поменьше, что бы спрайт не парил над землей. У камеры убираем зависимость от контроллера и выставляем ортографический тип, глубину — по вкусу.
Компилируем, сохраняем. В настройках мира можно создать свой GameMode, либо поменять в уже существующем “Default Pawn Class” на только что созданного нами персонажа.
Теперь можно запустить и убедиться, что мы все сделали правильно и что наш персонаж нетерпеливо ожидает приказов.
Пора научить его передвигаться, для этого вновь открываем BP персонажа и переходим в раздел графа. Стоит отметить, что Blueprints – очень мощный инструмент, с его помощью можно обойтись в проекте без классического написания кода, но на деле это то же самое программирование, просто, собственно, писать надо будет разве что несколько имен, да значений. Итак, прежде всего надо добавить движение по вектору при событии MoveRight:
Тут происходит следующее: при воздействии на ось (у нас может быть два воздействия ± 1) происходит передвижение объекта по оси X на заданное воздействие. В принципе этого достаточно для передвижения, можно пробовать — компилируем, сохраняем, тестируем. Персонаж смещается вдоль оси, но без анимации, ведь мы не предусмотрели ее переключение.
Для переключения между анимациями нам необходимо заменить, собственно анимацию в flipbook нашего персонажа. Сделать это можно несколькими способами, но я предпочитаю наиболее универсальный и, как мне кажется, изящный. Создадим на графе Свое событие, назовем соответственно цели – “Update animation”.
Логика работы тут следующая: при вызове события во flipbook цели помещается заданная анимация. Сама анимация выбирается в зависимости от того, какая скорость у нашего объекта, если больше нуля — анимация ходьбы, иначе — покоя. Обновим и граф движения:
Появилось новое событие — “Event Tick”, оно происходит каждый кадр, соответственно каждый кадр у нас теперь происходит проверка необходимости смены анимации. Если сейчас запустить игру, то персонаж будет двигаться с анимацией бега, но всегда будет смотреть в одну сторону, исправим это:
Таким образом сегодня мы создали анимированного 2D персонажа, способного перемещаться по платформе. В дальнейшем добавим способность прыгать, сражаться и уничтожать врагов. Пожелания, комментарии и критика приветствуются.
UPD 1. По совету пользователя Torvald3d убрал билинейную интерполяцию на текстурах-исходниках персонажа. Просто заходим в импортированную текстуру и меняем фильтр на «ближайший».
Источник
Создание компонента движения для системы лазания в Unreal Engine
Здравствуйте меня зовут Дмитрий. Я занимаюсь созданием компьютерных игр на Unreal Engine в качестве хобби.
Как вы знаете недавно вышла Mirror’s edge 2. Судя по отзывам критиков игра получилась очень слабая. И вы наверно уже захотели сделать свой Mirror’s edge. Поэтому сегодня я расскажу как создать компонент движения, чтобы ваш персонаж двигался как героиня Mirror’s edge.
Здесь будет описано создание компонента движения (дальше КД) который позволит персонажу:
1) Запрыгивать на стену.
2) Бегать по стене.
3) Перескакивать через небольшие препятствия
4) Делать ускорение при непрерывном беге
5)Делать подкат при нажатие Shift
6) Скатываться с наклонных поверхностей
7) А также мы создадим интерактивный объект веревку по которой тоже можно будет скатится
Все исходники приведены в конце статьи.
Если вы впервые слышите о компоненте движения, то вам лучше всего пройти урок Epic Games там все очень подробно расписано.
В качестве базового объекта для КД я использовал UCharacterMovementComponent это компонент движения уже позволяет персонажу ходить плавать и летать.
Итак как мы видим КД является конечным автоматом который в зависимости от значения переменной ClimbingMode определяет ту или иную модель поведения. А теперь про основные методы:
DoJump — Вызывается если персонаж прыгает.
TickComponent — Самая важная функция, вызывается каждый кадр. Здесь работает основной код.
SetClimbMode — Переключает КД из одного состояния в другое
DefineClimbMode — Определяет в какое состояние должен переключится КД.
CanSetClimbMode — определяет сможет ли КД переключится в нужное состояние в данный момент.
CheckDeltaVectorInCurrentState — Получает вектор на который должен переместится персонаж и если в новых координатах персонаж все ещё может находится в заданном состояние то возвращает true, уточненные координаты и углом поворота персонажа в противном случае false.
MoveTo — Перемещает персонажа в нужное положение.
Объект UCharacterMovementComponent работает только в паре с объектом ACharacter. Поэтому класс нашего персонажа будет производным от ACharacter вот собственно и он.
И тут у нас возникает первая проблема. Дело в том что объект ACharacter порождает объект UCharacterMovementComponent в своем конструкторе. Но нам то нужен не UCharacterMovementComponent, а UClimbingPawnMovementComponent. Чтобы ACharacter породил UClimbingPawnMovementComponent нужно конструктор AClimbingCharacter изменить с такова:
Теперь ACharacter будет порождать то что нам нужно.
Это интересно: Вы наверно заметили слово Super, что оно означает? Слово Super заменят собой имя базового класса для объекта в котором его используют. То есть если я напишу Super::Tick() то это значит что я вызвал метод Tick из базового класса объекта.
Дальше я расскажу про основные методы:
Вас наверно привлек метод ChangeView. Да по нажатию кнопки F можно будет переключатся с вида от первого лица в вид от третьего. Хоть это и расходится с каноном.
Методы MoveForward, MoveRight, CameraPitch, CameraYaw, CrouchFunk, UnCrouchFunk, Jump отвечают за ввод с клавиатуры и мыши.
Метод NotifyActorBeginOverlap срабатывает когда персонаж пересекает какой то другой объект. Для всех интерактивных объектов я создал базовый класс AOverlapObject вот собственно и он:
Этот объект содержит в себе переменную типа EClimbingMode когда персонаж пересекает этот объект, его Компонент движения переключается в данное состояние.
Пока что я сделал только один интерактивный объект AZipLine это такая веревка за которую персонаж хватается и скатывается по ней вниз. Если вы играли в Mirror’s edge, то вы поняли о чем я говорю.
Метод OnConstruction аналогичен функции ConstructionScript в blueprint он также вызывается при перемещении эктора или его изменении. Правда есть небольшое отличие, если в блюпринте все добавленные объекты автоматически уничтожаются при каждом перестроении, то в c++ нужно самому уничтожать объекты.
Собственно на этом все как и обещал исходники. По многочисленным просьбам населения я разместил их на github.
Источник
Создаем 2D платформер при помощи Unreal Engine 4. Часть 1,5 — Прыжки
Полноценная «часть 2» будет посвящена боевой системе, но пока еще я не довел ее до нужного состояния, но и вовсе ничего не писать 2 недели не хотелось, так что пока займемся небольшим расширением способностей нашего персонажа.
В прошлой статье мы подготовили персонажа и простую сцену, научились перемещаться горизонтально, пришла пора научиться, если и не летать, то, как минимум, прыгать!
- Нашел новую раскадровку, переделал все спрайты Алукарда, теперь, как и положено, он в красном
- Добавил небольшие платформы, сделанные из текстуры пола для отработки прыжков
- Добавил фоновые картинки для атмосферы 🙂
Первым делом нам потребуется подготовить анимации. Как это делать, описано в части 1, для удобства я предпочитаю разделить прыжок на 2 условные части — прыжок и падение. До верхней точки в воздухе проигрываем первую анимацию, после, соответственно, вторую. Анимацию падения так же можно использовать при, собственно, падении с края обрыва или прочих препятствий. Подготавливаем Flipboocks, следует отметить, что скорость проигрывания и длительность показа отдельных кадров подбирается индивидуально.
Далее переходим, собственно, к отработке прыжков. Идем в Blueprint нашего персонажа, добавляем обработчик события прыжка — InputActionJump. Это простой обработчик нажатия клавиши, имеет два состояния — нажат и отпущен. В принципе, можно напрямую добавить функцию прыжка к нажатию клавиши, работать будет, но мы ведь стараемся делать хорошо, верно? В прошлый раз мы начали делать систему смены анимаций, она легко расширяется и может быть весьма гибкой, поэтому воспользуемся ею.
Что бы переключить анимацию, нам надо знать, что была нажата клавиша, так что добавляем на ввод булевую переменную и переводим в состояние истинности. Таким образом, отследим нажатие клавиши, после идет прыжок и обнуление (false) нашей переменной, с задержкой — анимация ведь занимает какое-то время.
На освобождение клавиши добавим другую булевую переменную — она нам потребуется позже. В итоге получаем простой алгоритм:
Расширяем нашу систему анимаций. У нас пояпилась новая возможность, так что добавим ветвление к выбору анимаций: проверим, может ли персонаж прыгать (встроенная функция, спасибо ребятам из Epic Games), если прыгать может — мы за земле, идем в уже существующую ветвь, если нет — мы в воздухе и анимации нужны другие.
Логика тут простая: если мы прыгать не можем, то надо определить по какой причине — мы либо прыгаем, либо падаем. В первом случае последовательно проигрываем прыжок/падение, во втором только падение.
Источник