DLLBind и C# в UDK

UDK DLLBind и C#
Думал, что меня это как-то обойдет стороной, ан нет! В общем, назрела необходимость в подключении к UnrealScript через DLLBind внешней DLL-библиотеки. Писать на стандартном C++ как-то совершенно не улыбается, ведь на данный момент есть нечто более развитое и дружелюбное по отношению к программисту, как то C#, например. Кроме того, работая с движком Unity, я более-менее освоил этот язык. Особенно легко на него переходить после знакомства с Java.

Как же заставить UDK DLLBind работать с DLL-библиотеками, написанными на C#? Есть занятная реализация экспорта DLL из C# в пригодную для DLLBind библиотеку, но у меня этот способ не заработал, хоть я и бился над ним два дня. По прошествии двух дней у меня заработал-таки другой способ, который предлагает нам корпорация Microsoft в качестве стандартного решения — это C++/CLI.


( Теперь обо всем по порядку )

Создаем Locomotion систему в UDK

Locomotion системаПродолжая работать над постановкой стоп персонажа в UDK через инверсную кинематику (IK), мы плавно переходим к созданию так называемой Locomotion-системы для UDK. Вечно меня тянет в те области, в которых я вообще не разбираюсь! ;)

В чем же заключаются недостатки обычной IK-системы для постановки стоп?

Во-первых, она работает пост-фактум. Т.е. корректировка стопы осуществляется уже после того, как в анимации стопа поставлена на землю. А учитывая неровность поверхности — поставлена изначально неправильно. Стопа проваливается в землю и только после получения сигнала из анимации корректируется IK-контроллером. Смотрится это, честно говоря, не айс!

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

А в чем же заключается отличие Locomotion-системы от постановки стоп при помощи IK-контроллеров?


( Читать дальше )
  • +1
  • 05 ноября 2012, 14:20
  • dimanjy
  • 1

Анимационные нотификаторы в UDK: события в анимации

Анимация в UDKАнимационные нотификаторы в UDK (Anim Sequence Notifies) — крайне полезная, даже можно сказать, незаменимая вещь. Они дают разработчику обратную связь из анимационной последовательности (Animation Sequence) в UnrealScript в виде вызовов определенных событий (функций) при анимации. Благодаря нотификаторам мы всегда сможем знать, в каком состоянии находится наш персонаж (точнее, в каком положении находится его тело).

При помощи анимационных нотификаторов можно создавать такие вещи, как звук шагов персонажа, обработчики ударов в боевой системе и даже правильную постановку стоп на неровной поверхности с использованием инверсной кинематики (IK). Я уже писал про создание основы системы постановки стоп персонажа, теперь пришло время ее доработать с использованием Anim Sequence Notifies (анимационных нотификаторов в UDK).
Об этом, а также о других применениях Anim Sequence Notifies будет мой сегодняшний пост.


( Читать дальше )
  • 0
  • 30 октября 2012, 11:47
  • dimanjy
  • 4

Создание холодного оружия в UDK

Холодное оружие в UDKЕсли огнестрельное оружие встроено в Unreal Development Kit (UDK) по умолчанию и может быть использовано в собственной игре практически без изменений (за исключением, разве что самой модели оружия), то с холодным оружием (ножами, мечами, палками, дубинками и кусками арматуры) придется повозиться самому.

Проблема в том, что для холодного оружия в UDK нет встроенного механизма определения столкновений (коллизий — collisions). Да и не только для холодного оружия. Вообще нельзя отдельно для прикрепленных объектов просчитать столкновение. Считается только один единственный Collision Cylinder для всего персонажа, а прикрепленные объекты теряют свои коллизионные примитивы, даже если они у них были. Все это справедливо для режима ходьбы (PHYS_Walking) — так уж устроен движок Unreal Engine. Давайте разбираться, как это ограничение обойти.


( Читать дальше )

Паркур и лазанье в UDK: как это сделать?

Climbing systemЕсли вы внимательно следите за игровыми новинками, то не могли не заметить тенденции к объединению в современных тайтлах всех жанров и элементов геймплея в единое целое: это и стрелялка, и увлекательное приключение с неповторимым сюжетом и историей, и рукопашные схватки, ну и, конечно, жанр Экшн (Action) подразумевает динамичную акробатику с различными трюками — паркур да и только!

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


( Читать дальше )
  • 0
  • 23 сентября 2012, 13:52
  • dimanjy
  • 2

Инверсная кинематика IK в UDK: Постановка стоп персонажа на поверхности

Создавая современную игру, нельзя упускать из виду такой важный момент, как соответствие положения ног персонажа поверхности, на которой он находится. Если персонаж стоит на лестнице, то одна нога должна стоять на одной ступеньке, а вторая — на другой. Аналогично при ходьбе по наклонной поверхности стопы должны находиться на разном уровне. Более того, поверхность стопы должна точно соответствовать нормали поверхности, на которой она находится.

Инверсная кинематика IK в UDKВ UDK есть встроенная поддержка постановки стоп, но она, почему-то, мало у кого работает, судя по множеству вопросов на официальном форуме Epic Games. У меня также не получилось заставить ее работать, да и в документации по скелетным контроллерам написано, что она годится только для стоящей на месте модели, а для ходьбы и бега все-равно придется шаманить.

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



( Итак, приступим... )

Процедурная (программная) анимация в UDK

Настало время заняться программированием анимации в UDK. Чтобы освоить этот аспект разработки игр на Unreal Engine, попробуем начать с чего-то простого, но в тоже время полезного. Создадим актера (Actor), который будет проигрывать различные заданные нами анимации в ответ на какое-либо внешнее воздействие или действие игрока. В качестве примера представим себе экскаватор, который игрок может заставить копать, нажав на рычаг или кнопку. Понятно, что экскаватор должен быть выполнен в виде модели со скелетной анимацией (SkeletalMesh). Если мы хотим заставить экскаватор ездить и при этом копать, то нам, возможно, придется использовать AnimTree и блендинг различных анимаций. Также вместо экскаватора можно представить себе какой-либо более-менее сложный роботизированный станок с механической рукой, или что-то в этом роде…

Для имитации простого механизма со скелетом я создал болванку, похожую на лапу экскаватора:

Простой SkeletalMesh в UDK



( Итак, приступим... )

Использование UDK NavMesh в алгоритме поиска пути

Алгоритм поиска пути в UDK NavMesh

И опять передо мной стоит задача реализации алгоритма поиска пути для игрового AI (ИИ) моих NPC (Non-player characters или попросту ботов). Напомню, сперва мной был выбран движок Unity для создания игры. Мне пришлось самостоятельно разрабатывать алгоритм поиска пути в Unity на базе A*. В UDK же все уже разработано до нас и доступно в Unreal Engine 3 через UnrealScript. Остается только во всем разобраться и научиться это правильно использовать.


( Читать дальше )

Применение архетипов Archetype в Unreal Engine (UDK)

Архетипы Archetypes в UDK (Unreal Engine 3)

После первых опытов программирования на UnrealScript в UDK 3 версии начинаешь задаваться вопросом, как сделать процесс отладки кода более быстрым. Ведь в отличие от Unity, где любые изменения моментально отражаются в редакторе, в UDK приходится каждый раз полностью перекомпилировать свои исходники, причем обязательно необходимо закрыть редактор UnrealEd, перекомпилировать, а затем вновь открыть редактор. Но не только, и даже не столько перекомпиляция кода требует более продуманного подхода. Дополнительная гибкость и скорость потребуется при создании игровых сущностей и их отладки: различных классов объектов, врагов и их разновидностей.


( Читать дальше )

Основы программирования на UnrealScript в UDK

Программирование геймплея на UnrealScript в UDK

Этот пост для тех, кто уже разобрался с основами работы в UDK, в частности в редакторе UnrealEd, и может свободно создавать любые игровые сцены, наполнять их объектами, логикой и персонажами при помощи UDK Kismet.

Следующий этап — это программирование логики самой игры, поведения игрока и игровых персонажей (NPC — Non Player Characters, или ботов). Логика игры заключается в отслеживании состояний игровых объектов и определении дальнейших действия, в зависимости от этих состояний. Например, нужно ли еще плодить врагов на уровне или игрок их всех перестрелял, нужно ли выдать дополнительное оружие игроку или начислить очки/бонусы, или же игрок победил, и нужно переходить к новому уровню.

За поведение игровых персонажей отвечает игровой AI (искусственный интеллект, или ИИ). AI отвечает за патрулирование территории, обнаружение и преследование игрока и ведение по нему огня на поражение, поиск пути на игровой карте и т.д. в зависимости от типа самой игры.

Итак, далее по порядку…


( Читать дальше )