Для того что бы понять, как создать игру типа side scrolling platformer на UDK следует обратить внимание на пакет, с созданным примером для того что бы показать, как создать платформер на UDK.

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

Этот стартовый пакет содержит код примера создания игры платформера на основе движка Unreal-Engine в среде UDK.

 

Что включено?

Неуправляемый человеком, а искусственным интеллектом персонаж (SPG_AIPawn) – Это персонаж. Который будет следовать за игроком. При столкновении с игроком он будет взрываться и наносить ущерб игроку. Игрок должен будет стрелять по ним, что бы не быть убитым.

Камера сбоку (SPG_Camera + SPG_CameraProperties) – Эта камера добавляет смещение которое хранится в SPG_CameraProperties и движется за игроком. Камера развернута так, что бы наблюдать за игроком со стороны.

Информация о типе игры использующая архетип игрока и оружия (SPG_GameInfo) – Информация об игре создается на основе архетипов персонажа игрока и об данном ему оружии. Архетипы позволяют быстро настраивать параметры в самом редакторе без надобности рекомпиляции всего кода.

Менеджер инвенторя (SPG_InventoryManager) – Менеджер инвентаря получаемого персонажем, базируется на архитипах.

Управление игроком (SPG_PlayerController) – Контроллер отвечающий за перемещение игрока, блокирует движение по осям, позволяя двигаться только в одной плоскости и меняет разворот игрока (по координатам, смотрит назад/смотрит вперед).

Персонаж игрока (SPG_PlayerPawn) – Это сам персонаж игрока для платформера, меняет значения только влево и только вправо. Так же позволяет целить прицел вверх\вниз. А так же обрабатывает в коде когда оружие стреляет.

Оружие (SPG_Weapon) – Это класс оружия на архитипе, для возможности расстраивать параметры в редакторе UDK.
HUD (SPG_HUD) – Часть графического интерфейса, пример который отображает количество жизней у игрока.

Поднять  что либо (SPG_HealthPickup) – Простой пример подбораиз NPC (персонажи, боты) случайно выпадающих предметов после их смерти.

 

Структура кода

Как работает камера?
Камера работает на основе настроек локации и поворота в SPG_Camera. Данный класс камеры используется при описании контроллера игрока (PlayerController) как камера по умолчанию.

Каждый кадр просчитывает функцию UpdateViewTarget (ОбновитьВидЦели). SPG_Camera устанавливает позицию камеры по свойству позиции цели (персонаж игрока), а так же добавляет смещение (по оси вверх\вниз, влево\вправо, ближе\дальше), которое настраивается в архетипе SPG_CameraProperties.  Архетип позволяет управлять смещением прямо из редактора, избавляя от перекомпиляции кода проекта.

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


Как работает игра?
Тип игры следует выставить в редакторе Unreal для того, что бы играть непосредственно в редакторе. А что бы выставить этот тип игры по умолчанию, то вам следует именить настройки конфигурации движка. SPG_GameInfo хранит ссылки на два архетипа, один отвечает за настройку персонажа игрока и оружия.  

Когда проходит инициализация персонажа, он создается из архетипа.

Когда инвентарь по умолчанию дается персонажу, архетип оружия дается персонажу.
SPG_GameInfo так же определяет класс управления игроком и класс графического интерфейса по умолчанию.


Как работает искусственный интеллект?
В этом стартовом пакете, персонажи (боты) просто бегут и взрываются при контакте с персонажем игрока. Для этого требуется самая простая логика, а AIControllers не требуется вовсе. (Вся логика поведения описана в SPG_AIPawn).

По умолчанию у бота выставлена физика падения (PHYS_Falling). Что гарантирует падение бота на землю, если он был «рожден»/создан в воздухе. Когда он падает на землю или другой предмет, то наступает событие Landed (на земле), в это время боту выставляется физика “в полете” (PHYS_Flying). Что облегчает настройку скорости и ускорения, для того, что бы бот гонялся за игроком (При этом, нужно заметить, что бот может свободно бегать во воздуху как по земле, из-за установленной физики. Это можно проверить, например установив в настройках у своего персонажа высоту прыжка и запрыгнув на ящики или попробовав перепрыгнуть бота).

На каждый тик (Tick, функция)  персонаж бот проверяет, имеет ли он врага. Это этого не произошло, то логика ищет локального игрока и его персонажа. Если у бота есть враг и он летит, то ему устанавливается поворот лицом в сторону врага, а так же установит скорость и ускорение в сторону врага.

Когда бот будет убит, то вызывается функция PlayDying. Эта функция включает режим RagDoll (персонаж начинает использовать возможности PhysicsAsset просчитывая поведение физики своего тела) для своего скелетного меша.

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


Как работает управление игроком?
Управление игроком сделано в SPG_PlayerController.PlayerWalking.PlayerMove. Используя ось вращения камеры мы можем создать движение игрока в пределах координат видимости камеры. Т.к. это платформер со стороны со смещением камеры, то нам нужно смещение по координате Y и значение aStrafe. Это позволяет игроку двигаться только влево или вправо.

Игрок перемещается в направлении в зависимости от установленного желаемого поворота. Это гарантирует, что персонаж игрока развернут влево или вправо в зависимости от его движения.

В функции UpdateRotation устанавливается поворот персонажа игрока в желаемую сторону, в зависимости от движения мыши.


Как работает оружие?
Оружие в примере работает так же, как и оружие в UT3.

Оружие сначала создается и потом дается игроку, выполняется функция ClientGivenTo.  В ней SPG_Weapon прикрепляет меш оружия к персонажу игрока от третьего лица.

Когда игрок стреляет оружием, создается состояние стрельбы, которое вызывает ProjectileFire (стрельба снарядами). Снаряд создается в локации и положении возвращаемом функцией GetWeaponStartTraceLocation и GetAdjustedAim. В нашем случае они возвращают расположение сокета и его поворот, что гарантирует выстрел снаряда из правильного места и в нужном направлении.

Когда оружие стреляет, то вызывается функция PlayFireEffect, которая активизирует  отображение вспышки выстрела. А когда оружие перестает стрелять, то вызывается StopFireEffect, который отключает это отображение.

 

Как использовать этот пример игры? (как создать свою игру)

  1. Скачайте UDK
  2. Установите UDK
  3. Скачайте пример игры
  4. Распакуйте содержимое пакета в директорию с установленным UDK (например: С:\UDK\UDK-2012-02). Если архиватор при распаковке сообщит,  что такие директории существуют, ответьте утвердительно на вопрос перезаписи совпадающих файлов.
  5. Откройте DefaultEngine.ini в директории UDKGame\Config блокнотом или аналогичной программой

    

     6. Найдите значение EditPackages в параметре [UnrealEd.EditorEngine] и добавьте новый параметр + EditPackages=StarterPlatformGame

    

     7. Запустите Unreal Frontend (в папке Binaries)

     8. После запуска нажмите Script – Full Recompile

    

     9. После успешного завершения заходите в Редактор UDk, открывайте карту StarterPlatformMap (UDKGame – Content - StarterPlatformGameContent)

 

     10. Нажимаете в редакторе F8 или внопку PlayOnEditior, после чего запустится игра.

Понравилось? Расскажи друзьям!

Нам пишут:

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

Надежда Завьялова
ИП, Завьялова Надежда Павловна
Scroll to top