Туториал по Unreal Engine. Часть 5: Простая игра на UE4

Если вы новичок в разработке игр, то вам поможет простая игра на UE4. Она научит вас реализации простых механик и тому, как объекты взаимодействуют друг с другом.

Автор оригинала: Tommy Tran

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

  • Бесконечно перемещать игрока вперёд
  • Генерировать препятствия, которые игрок должен избегать
  • Рандомизировать препятствия для создания вариаций
  • Создавать кнопку перезапуска, которая отображается, когда игрок сталкивается с препятствием

В результате у нас получится вот такая игра:

Спойлер
Туториал по Unreal Engine. Часть 5: Простая игра на UE4
[свернуть]

Учтите, что в этой части мы будем пользоваться Blueprints и UMG. Если вам нужно освежить свои знания, то прочитайте части, посвящённыеBlueprintsиUI.

Примечание:эта статья является одной из восьми частей туториала по Unreal Engine:

Приступаем к работе

Скачайтезаготовку проектаи распакуйте её. Перейдите в папку проекта и откройтеInfiniteMatrix.uproject.

Примечание:если откроется окно, сообщающее, что проект создан в более ранней версии Unreal editor, то всё в порядке (движок часто обновляется). Можно или выбрать опцию создания копии, или опцию преобразования самого проекта.

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

Спойлер
Туториал по Unreal Engine. Часть 5: Простая игра на UE4

[свернуть]

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

Движение игрока вперёд (простая игра на UE4)

Перейдите в папкуBlueprintsи откройтеBP_Player.

Чтобы двигать игрока вперёд, нужно добавлять в каждом кадре к местоположению игрока смещение.

Во-первых, нам нужно создать переменную, задающую скорость движения игрока вперёд. Создайте переменнуюFloatпо названиемForwardSpeedи задайте значение по умолчанию2000.

Туториал по Unreal Engine. Часть 5: Простая игра на UE4

Теперь перейдите в Event Graph и найдите нодEvent Tick. Создайте следующую схему:

Туториал по Unreal Engine. Часть 5: Простая игра на UE4

УмножаяForwardSpeedнаDelta Seconds, мы получимнезависимый от частоты кадроврезультат.

Примечание:если вам непонятно, что такое независимость от частоты кадров, то прочитайте часть туториала проBlueprints. Мы разбираем её в разделеНезависимость от частоты кадров.

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

Движение вдоль одной оси

Чтобы перемещать игрока, создайте нодAddActorWorldOffset. Измените значениеSweepнаtrue, нажав нафлажок.

Туториал по Unreal Engine. Часть 5: Простая игра на UE4

Если попробовать соединить результатFloatс входомDelta Location, то Unreal автоматически преобразует его вVector.

Туториал по Unreal Engine. Часть 5: Простая игра на UE4

Однако таким образом значение Float будет записано в компоненты X, Y и Z вектора. Для нашей игры движение вперёд должно выполняться только вдоль осиX. К счастью, можно разделить Vector на три компонентаFloat.

Убедитесь, что контактDelta LocationнодаAddActorWorldOffsetни с чем не соединён.Нажмите правой клавишей мышина контактDelta Locationи выберитеSplit Struct Pin.

Туториал по Unreal Engine. Часть 5: Простая игра на UE4

Наконец, соедините всё следующим образом:

Туториал по Unreal Engine. Часть 5: Простая игра на UE4

Подведём итог:

  1. В каждом кадре игра будет умножатьForwardSpeedиDelta Seconds, чтобы получать независимый от частоты кадров результат
  2. AddActorWorldOffsetбудет использовать этот результат для перемещения игрока вдоль осиX
  3. ПосколькуSweepвключён, игрок будет прерывать движение вперёд, когда его что-то блокирует

Нажмите наCompileи вернитесь в основной редактор. Если нажатьPlay, то вы начнёте двигаться сквозь туннель.

Спойлер
Туториал по Unreal Engine. Часть 5: Простая игра на UE4

[свернуть]


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

Создание системы спауна туннелей (простая игра на UE4)

Перейдите в Content Browser и зайдите в папкуBlueprints. Создайте новыйBlueprint Classс родительским классомActor. Назовите егоBP_TunnelSpawnerи откройте его.

Игра будет создавать туннели постоянно, поэтому неплохо было бы создатьфункциюдля спауна. Перейдите в панель My Blueprint и создайте новую функциюSpawnTunnel. Задачей функции будет спаун туннеля в указанном местоположении.

Чтобы передавать функции местоположение, функции нуженвходной параметр. Они будут отображаться при вызове функции как входные контакты.

Туториал по Unreal Engine. Часть 5: Простая игра на UE4

Также они будут отображаться как выходные контакты нодаEntryфункции.

Туториал по Unreal Engine. Часть 5: Простая игра на UE4

Давайте создадим входной параметр. Перейдите в граф функцииSpawnTunnel. Выберите нодEntryи перейдите в панель Details. Нажмите на значок+рядом с разделомInputs.

Туториал по Unreal Engine. Часть 5: Простая игра на UE4

Переименуйте входной параметр вSpawnLocationи смените его тип наVector.

Туториал по Unreal Engine. Часть 5: Простая игра на UE4

Чтобы создать туннель, добавьте нодSpawn Actor From Class. Нажмите нараскрывающийся список, расположенный справа от контактаClassи выберитеBP_Tunnel.

Туториал по Unreal Engine. Часть 5: Простая игра на UE4

Чтобы задать местоположение (координаты) спауна,нажмите правой клавишейна контактSpawn Transformи выберитеSplit Struct Pin. Затем соедините нодSpawn Actor From Classс нодомEntry:

Туториал по Unreal Engine. Часть 5: Простая игра на UE4

Теперь при вызове функцииSpawnTunnelона будет спаунить экземплярBP_Tunnelв переданном ей местоположении.

Давайте проверим, как это работает!

Проверка системы спауна туннелей

Переключитесь на Event Graph и найдите нодEvent BeginPlay. Добавьте нодSpawnTunnelи соедините его с нодомEvent BeginPlay.

В нодеSpawnTunnelзадайтеSpawn Locationзначение(2000, 0, 500).

Туториал по Unreal Engine. Часть 5: Простая игра на UE4

Теперь при запуске игры он будет спаунить туннель сверху и перед игроком. Нажмите наCompileи вернитесь в основной редактор.

Сначала удалитеBP_Tunnelиз уровня. Для этогощёлкнитенаBP_Tunnelв World Outliner. Затем нажмите на клавишуDelete, чтобы удалить его с уровня.

Затем перейдите в Content Browser.Перетащите левой клавишей мышиBP_TunnelSpawnerво Viewport. Благодаря этому его экземпляр появится на уровне.

Если нажать наPlay, то игра будет спаунить туннель сверху и перед игроком.

Спойлер
Туториал по Unreal Engine. Часть 5: Простая игра на UE4

[свернуть]


Закончив проверку, вернитесь кBP_TunnelSpawner. Сбросьте значенияSpawn LocatioнодаSpawnTunnelна(0, 0, 0).

После этого нажмите наCompileи вернитесь в основной редактор.

В следующем разделе мы настроим работуBP_Tunnel.

Настройка Blueprint туннеля (простая игра на UE4)

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

Спойлер
Туториал по Unreal Engine. Часть 5: Простая игра на UE4

[свернуть]

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

Давайте начнём с создания зоны триггера.

Создание зоны триггера

ОткройтеBP_Tunnelи перейдите в панель Components. Добавьте компонентBox Collisionи назовите егоTriggerZone.

Пока область коллизии довольно мала. Перейдите в панель Details и найдите разделShape. Задайте свойствуBox Extentзначения(32, 500, 500).

Туториал по Unreal Engine. Часть 5: Простая игра на UE4

Теперь задайте свойствуLocationзначения(2532, 0, 0). Это разместитTriggerZoneпрямо в конец меша туннеля. Это значит, что новый туннель должен будет создаваться только когда игрок достигнетконцатуннеля.

Туториал по Unreal Engine. Часть 5: Простая игра на UE4

Теперь настало время создать точку спауна.

Создание точки спауна

Для задания местоположения точки спауна можно использовать компонентScene. Эти компоненты идеально подходят для задания местоположений, потому что у них есть только Transform. Кроме того, они видимы во Viewport, поэтому вы можете видеть, где находится точка спауна.

Перейдите в панель Components и убедитесь, что ничего не выбрано. Добавьте компонентSceneи переименуйте его вSpawnPoint.

Туториал по Unreal Engine. Часть 5: Простая игра на UE4

Меш туннеля имеет длину2500единиц по осиX, поэтому именно здесь должна быть точка присоединения. Перейдите в панель Details и задайте свойствуLocationзначения(2500, 0, 0).

Туториал по Unreal Engine. Часть 5: Простая игра на UE4

Следующее, что нужно сделать — создать функцию, которая спаунит туннель вSpawnPoint.

Создание туннелей в точке спауна

Нажмите наCompileи переключитесь наBP_TunnelSpawner.

СледующийBP_Tunnelдолжен спауниться вSpawnPoint самого дальнеготуннеля. Благодаря этому туннель всегда будет продолжаться.

Туториал по Unreal Engine. Часть 5: Простая игра на UE4

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

Откройте графSpawnTunnel.Нажмите правой клавишей мышина контактеReturn ValueнодаSpawn Actor From Class. ВыберитеPromote to Variableи переименуйте переменную вNewestTunnel.

Туториал по Unreal Engine. Часть 5: Простая игра на UE4

Теперь у нас всегда будет ссылка на самый дальний туннель.

Далее создайте новую функцию и назовите еёSpawnTunnelAtSpawnPoint. Создайте следующий граф:

Туториал по Unreal Engine. Часть 5: Простая игра на UE4

Эта схема будет получать самый новый туннель и местоположение его компонентаSpawnPoint, после чего спаунить новый туннель в этом местоположении.

ЧтобыBP_Tunnelмог обмениваться данными сBP_TunnelSpawner, ему нужна ссылка. Без передачи данныхBP_TunnelSpawnerне будет знать, где спаунить следующий туннель.

Создание ссылки на спаунер туннелей

Нажмите наCompileи закройте графSpawnTunnelAtSpawnPoint. Переключитесь наBP_Tunnel.

Добавьте новую переменную и назовите еёTunnelSpawner. В качествеVariable TypeвыберитеBP_TunnelSpawner\Object Reference.

Туториал по Unreal Engine. Часть 5: Простая игра на UE4

Нажмите наCompileи переключитесь наBP_TunnelSpawner.

Откройте графSpawnTunnelи добавьте обозначенные ноды:

Туториал по Unreal Engine. Часть 5: Простая игра на UE4

Теперь у каждого туннеля будет ссылка наBP_TunnelSpawner.

Далее нужно сообщитьBP_TunnelSpawnerо необходимости спауна следующего туннеля, когда игрок входит вTriggerZone.

Скриптинг зоны триггера

Нажмите наCompileи переключитесь наBP_Tunnel.

Перейдите в панель Components инажмите правой клавишейнаTriggerZone. ВыберитеAdd Event\Add OnComponentBeginOverlap. Это добавит в Event Graph следующий нод:

Туториал по Unreal Engine. Часть 5: Простая игра на UE4

Этот нод будет выполняться когда другойActorкасаетсяTriggerZone.

Сначала нам нужно проверить, является лиActor, касающийсяTriggerZone, игроком.

ПеретащитеконтактOther Actor. Отпустителевую клавишу мышив пустом пространстве и выберите в менюCast to BP_Player.

Туториал по Unreal Engine. Часть 5: Простая игра на UE4

Примечание:туннель спаунится вконцедругого туннеля, поэтому он приведёт к срабатыванию триггераTriggerZoneэтого туннеля.Cast to BP_Playerпредотвращает выполнение всех дальнейших нодов, еслиOther Actorявляется туннелем.

Теперь добавим обозначенные ноды после нодаCast to BP_Player:

Туториал по Unreal Engine. Часть 5: Простая игра на UE4

Давайте посмотрим, что здесь происходит пошагово:

  1. КогдаActorкасаетсяTriggerZone, выполняется нодOn Component Begin Overlap (TriggerZone)
  2. НодCast to BP_Playerпроверяет, является ли касающийся актор игроком
  3. Если это игрок, тоBP_TunnelSpawnerсоздаст новый туннель. Его местоположение будет находится в компонентеSpawnPointпоследнего созданного туннеля.
  4. Поскольку старый туннель уже не нужен, игра удаляет его с помощью нодаDestroyActor

Нажмите наCompile, вернитесь в основной редактор и нажмитеPlay. Когда вы достигнете конца туннеля, игра создаст новый.

Спойлер
Туториал по Unreal Engine. Часть 5: Простая игра на UE4

[свернуть]

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

Создание нескольких туннелей

Первое, что нужно сделать — создать функцию, создающую определённое количество туннелей.

ОткройтеBP_TunnelSpawnerи создайте новую функцию с названиемSpawnInitialTunnels.

Чтобы спаунить определённое количество туннелей, можно использовать нодForLoop. Этот нод будет выполнять соединённые с ним ноды указанное количество раз. Добавьте нодForLoopи соедините его с нодомEntry.

Туториал по Unreal Engine. Часть 5: Простая игра на UE4

Чтобы нодForLoopвыполнялсяnраз, необходимо задать дляLast Indexзначениеn – 1.

В этом туториале мы будем спаунитьтритуннеля. Для выполнения трёх циклов задайтеLast Indexзначение2.

Туториал по Unreal Engine. Часть 5: Простая игра на UE4

Примечание:если не задать поляFirst IndexилиLast Index, то по умолчанию они будут равны0.
Когда игра начинается, игрок всегда должен находиться в туннеле. Для этого можно создать первый туннель в местоположении игрока.

Создание первого туннеля

Чтобы определить, был ли создан первый туннель, мы можем проверить, задано лиNewestTunnel. Если нет, то это значит, что первый туннель ещё не создан, потому чтоNewestTunnelзадаётся толькопослетого, как игра создаст туннель.

Чтобы выполнить эту проверку, добавим нодIsValid(на котором есть знак вопроса) после нодаForLoop.

Затем получим ссылку наNewestTunnelи соединим её с контактомInput ObjectнодаIsValid.

Туториал по Unreal Engine. Часть 5: Простая игра на UE4

ЕслиNewestTunnelне задан, то будет выполнен нодIs Not Valid, и наоборот.

Добавьте следующее и соедините ноды с контактомIs Not ValidнодаIsValid:

Туториал по Unreal Engine. Часть 5: Простая игра на UE4

Эта схема будет создавать туннель в местоположении Pawn игрока.

Затем нам нужно создать следующие туннели.

Создание следующих туннелей

Добавьте нодSpawnTunnelAtAttachPointи соедините его с контактомIs ValidнодаIsValid.

Туториал по Unreal Engine. Часть 5: Простая игра на UE4

Вот как выглядит готовый граф:

Туториал по Unreal Engine. Часть 5: Простая игра на UE4

Подведём итог:

  1. НодForLoopвыполняется три раза
  2. В первом цикле он спаунит туннель в точке расположения игрока
  3. В последующих циклах он спаунит туннель в точкеSpawnPointсамого нового туннеля

Теперь перейдите в Event Graph и удалите нодSpawnTunnel. Добавьте нодSpawnInitialTunnelsпослеEvent BeginPlay.

Туториал по Unreal Engine. Часть 5: Простая игра на UE4

Нажмите наCompile, вернитесь в основной редактор и нажмите наPlay. Теперь туннель стал гораздо длиннее!

Спойлер
Туториал по Unreal Engine. Часть 5: Простая игра на UE4

[свернуть]

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

Создание препятствий

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

Туториал по Unreal Engine. Часть 5: Простая игра на UE4

ОткройтеBP_Tunnelи перейдите в панель Components. Добавьте компонентStatic Meshи назовите егоWallMesh.

Перейдите в панель Details и измените его свойствоStatic MeshнаSM_Hole_01.

Затем задайте его свойствуLocationзначение(2470, 0, 0), расположив его таким образом в конце туннеля.

Туториал по Unreal Engine. Часть 5: Простая игра на UE4

Чтобы сделать игру интереснее, стены должны ещё и вращаться. Добавим новую переменнуюFloatи назовём еёRotateSpeed. ЗададимDefault Valueзначение30.

Переключитесь в Event Graph и найдите нодEvent Tick. Создайте следующую схему:

Туториал по Unreal Engine. Часть 5: Простая игра на UE4

Это заставитWallMeshповорачиваться каждый кадр на заданную величину.

Нажмите наCompileи вернитесь к основному редактору. Нажмите наPlay, чтобы увидеть, как поворачиваются стены.

Спойлер
Туториал по Unreal Engine. Часть 5: Простая игра на UE4

[свернуть]

Давайте сделаем игру ещё интереснее, добавив стенам вариативности.

Создание вариаций стен

Вместо создания нового Blueprint для каждой вариации, мы можем просто рандомизироватьWallMesh.

ОткройтеBP_Tunnelи создайте новую функцию под названиемRandomizeWall. Затем создайте следующий граф:

Туториал по Unreal Engine. Часть 5: Простая игра на UE4

Как следует из названия, нодSet Static Meshбудет задаватьWallMeshпереданный меш.

Чтобы создать список статичных мешей, можно использовать нодSelect.

ПеретащитеконтактNew Mesh. Отпустителевую клавишу мышина пустом пространстве и добавьте нодSelect.

Туториал по Unreal Engine. Часть 5: Простая игра на UE4

НодSelectпозволяет задать список вариантов. ВходIndexопределяет, какой вариант будет выводить нодSelect.

У нас есть четыре меша стен, поэтому нужно создать ещё два контактаOption. Это можно сделатьправым щелчкомна нодеSelect, выбравAdd Option Pin. Повторяйте эту операцию, пока у вас не будетчетыреконтакта Option.

Туториал по Unreal Engine. Часть 5: Простая игра на UE4

Теперь задайте каждому варианту следующие значения:

  • Option 0:SM_Hole_01
  • Option 1:SM_Hole_02
  • Option 2:SM_Hole_03
  • Option 3:SM_Hole_04
Туториал по Unreal Engine. Часть 5: Простая игра на UE4

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

Рандомизация стен

Для получения случайного числа можно использовать нодRandom Integer in Range. Этот нод возвращает значение>=Minи <=Max.

Добавьте нодRandom Integer in Rangeи соедините его с контактомIndexнодаSelect.

Туториал по Unreal Engine. Часть 5: Простая игра на UE4

ЗадайтеMaxзначение3. Это даст нам четыре возможных числа: 0, 1, 2 и 3.

Туториал по Unreal Engine. Часть 5: Простая игра на UE4

Чтобы добавить случайности, давайте придадимWallMeshслучайный поворот. Добавьте следующее после нодаSet Static Mesh:

Туториал по Unreal Engine. Часть 5: Простая игра на UE4

Это добавитWallMeshслучайный поворот в интервале от0до360градусов.

Вот как выглядит готовый граф:

Туториал по Unreal Engine. Часть 5: Простая игра на UE4

Подведём итог:

  1. НодSelectпередаёт список мешей
  2. С помощью нодаRandom Integer in Rangeвыбирается случайный меш
  3. НодSet Static MeshзадаётWallMeshвыбранный меш
  4. НодAddLocalRotationдобавляет смещение случайного поворотаWallMesh

Нажмите наCompileи закройте графRandomizeWall.

Переключитесь наBP_TunnelSpawnerи откройте графSpawnTunnel. Добавьте выделенный нод:

Туториал по Unreal Engine. Часть 5: Простая игра на UE4

Теперь при спауне туннеля у него будет случайный меш стены.

Закройте графSpawnTunnelи нажмите наCompile. Вернитесь в основной редактор и нажмите наPlay, чтобы увидеть вариации стен!

Спойлер
Туториал по Unreal Engine. Часть 5: Простая игра на UE4

[свернуть]

Если вы столкнётесь со стеной. то перестанете двигаться вперёд. Однако если продолжите двигаться и пройдёте сквозь отверстие, то снова начнёте двигаться вперёд.

Следующим шагом будет отключение движения вперёд после столкновения игрока со стеной.

Обработка коллизий со стенами

Для включения и отключения движения вперёд можно использовать переменнуюBoolean. Она имеет всего два состояния:trueиfalse.

ОткройтеBP_Playerи создайте новую переменнуюBooleanпод названиемIsDead.

Перейдите к нодуEvent Tickи создайте нодBranch.

Теперь получите ссылку наIsDeadи соедините его с контактомConditionнодаBranch.

Туториал по Unreal Engine. Часть 5: Простая игра на UE4

Соедините нодEvent Tickс нодомBranch. Затем соедините контактFalseнодаBranchс нодомAddActorWorldOffset.

Туториал по Unreal Engine. Часть 5: Простая игра на UE4

Теперь когдаIsDeadравноtrue, игрок будет останавливаться.

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

Задание переменной IsDead

Нажмите наCompileи переключитесь наBP_Tunnel. В панели Componentsнажмите правой клавишей мышинаWallMeshи выберитеAdd Event\Add OnComponentHit. Это добавить в Event Graph следующий нод:

Туториал по Unreal Engine. Часть 5: Простая игра на UE4

Этот нод будет выполняться при столкновении другогоActorсWallMesh.

Во-первых, нам нужно проверить, является ли игрокомActor, столкнувшийся сWallMesh.

ПеретащитеконтактOther Actor. Отпустителевую клавишу мышина пустом пространстве и выберите в менюCast to BP_Player.

Туториал по Unreal Engine. Часть 5: Простая игра на UE4

ПеретащитеконтактBP_PlayerнодаCast to BP_Player. Отпустителевую клавишуна пустом пространстве и добавьте нодSet Is Dead.

ЗадайтеIsDeadзначениеtrue, поставивфлажок.

Туториал по Unreal Engine. Часть 5: Простая игра на UE4

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

Спойлер
Туториал по Unreal Engine. Часть 5: Простая игра на UE4

[свернуть]

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

Отображение кнопки перезапуска

Виджет, который мы будем отображать, называетсяWBP_Restart. Его можно найти в папкеUI. Вот как он выглядит:

Туториал по Unreal Engine. Часть 5: Простая игра на UE4

Чтобы отобразить или скрыть виджет, нам нужна ссылка на него. ОткройтеBP_Playerи создайте новую переменнуюRestartWidget. ИзменитеVariable TypeнаWBP_Restart\Object Reference.

Туториал по Unreal Engine. Часть 5: Простая игра на UE4

Затем перейдите в Event Graph и найдите нодEvent BeginPlay.

Добавьте нодCreate Widgetи задайтеClassзначениеWBP_Restart.

Теперь добавьте нодSet Restart Widgetи соедините всё следующим образом:

Туториал по Unreal Engine. Часть 5: Простая игра на UE4

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

Создание функции отображения

Создайте новую функцию и назовите еёDisplayRestart. Сделав это, создайте следующий граф:

Туториал по Unreal Engine. Часть 5: Простая игра на UE4

Подведём итог:

  1. Add to ViewportотображаетRestartWidgetна экране
  2. Set Input Mode UI Onlyпозволяет игроку взаимодействовать только с UI. Мы делаем так, чтобы игрок не мог перемещаться, пока он мёртв.
  3. Как можно понять из названия,Set Show Mouse Cursorпросто отображает курсор мыши

Для отображения кнопки перезапуска нам нужно просто вызыватьDisplayRestartпосле столкновения игрока со стеной.

Вызов функции отображения

Закройте графDisplayRestartи нажмите наCompile.

Переключитесь наBP_Tunnelи найдите нодOn Component Hit (WallMesh).

Добавьте нодDisplayRestartв конец цепочки нодов.

Туториал по Unreal Engine. Часть 5: Простая игра на UE4

Нажмите наCompileи закройтеBP_Tunnel. Вернитесь к основному редактору и нажмите наPlay. Когда игрок сталкивается со стеной, отображается кнопка перезапуска.

Спойлер
Туториал по Unreal Engine. Часть 5: Простая игра на UE4

[свернуть]

Последним шагом будет перезапуск игры при нажатии на кнопку.

Перезапуск игры

При перезапуске игра должна выполнять два действия:

  1. Сбрасывать состояние игрока. Это включает в себя и скрытие кнопки перезапуска с экрана.
  2. Повторно создавать туннели. Таким образом игрок стартует с начала туннеля.

Давайте начнём со сброса игрока.

Сброс игрока

ОткройтеBP_Playerи создайте новую функциюRestartGame. Создайте следующий граф:

Туториал по Unreal Engine. Часть 5: Простая игра на UE4

Подведём итог:

  1. Set Is DeadприсваиваетIsDeadзначениеfalse. Это снова включает возможность движения вперёд.
  2. Remove From Parentудаляет с экранаRestartWidget
  3. Set Input Mode Game Onlyснова включает возможность управления в игре, чтобы игрок мог перемещаться
  4. Set Show Mouse Cursorскрывает курсор мыши

Теперь нам нужно снова создать туннели.

Повторное создание туннелей

Нажмите наCompileи закройтеBP_Player.

ОткройтеBP_TunnelSpawnerи перейдите в графSpawnInitialTunnels.

Во-первых, перед созданием новых туннелей нам нужно удалить уже имеющиеся.

Добавьте нодSequenceпосле нодаEntry. Соедините контактThen 1с нодомForLoop.

Туториал по Unreal Engine. Часть 5: Простая игра на UE4

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

Затем создайте следующие ноды:

Туториал по Unreal Engine. Часть 5: Простая игра на UE4

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

Наконец, соединим контактThen 0нодаSequenceс нодомGet All Actors of Class. Благодаря этому туннели удалятся до процесса создания.

Вот как выглядит конечный граф:

Туториал по Unreal Engine. Часть 5: Простая игра на UE4

Последнее, что нужно сделать — обработать нажатие на кнопку.

Обработка нажатий на кнопку

Нажмите наCompileи закройтеBP_TunnelSpawner.

Перейдите в Content Browser и найдите папкуUI.Дважды щёлкнитенаWBP_Restart, чтобы открыть его.

ВыберитеRestartButtonи перейдите к панели Details. Перейдите в разделEventsи нажмите накнопкурядом сOnClicked.

Туториал по Unreal Engine. Часть 5: Простая игра на UE4

Это создаст нодOn Clicked (RestartButton). Этот нод выполняется, когда игрок нажимает наRestartButton.

Воссоздайте следующую схему:

Туториал по Unreal Engine. Часть 5: Простая игра на UE4

Подведём итог:

  1. Get Owning Player Pawnвозвращает Pawn, которым в текущий момент управляет игрок
  2. Cast to BP_Playerпроверяет, принадлежит ли Pawn к классуBP_Player
  3. Если это так, то он вызывает функциюRestartGame. Эта функция сбрасывает игрока и скрывает кнопку перезапуска.
  4. Get All Actors of ClassиGetвозвращаетBP_TunnelSpawnerи вызываетSpawnInitialTunnels. Эта функция удаляет все существующие туннели и спаунит новые.

Примечание:Вам может быть интересно, почему я не использовал переменную-ссылку дляBP_TunnelSpawner. Главная причина заключается в том, чтоBP_Tunnelне связан сWBP_Restart. Для нашей простой игры проще реализовать такой способ, чем выяснять, где хранить переменную-ссылку.

Нажмите наCompileи закройте Blueprint editor. Нажмите наPlay, чтобы проверить работу кнопки перезапуска!

Спойлер
Туториал по Unreal Engine. Часть 5: Простая игра на UE4

[свернуть]

Куда двигаться дальше?

Скачать готовый проект можноздесь.

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

Попробуйте также реализовать простые классические игры типаPongиTetris. Механика этих игр проста, но может вызывать сложности в реализации.

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

Автор перевода PatientZero

Поделится

Добавить комментарий

Мы используем cookie-файлы для наилучшего представления нашего сайта. Продолжая использовать этот сайт, вы соглашаетесь с использованием cookie-файлов.
Принять