Показаны сообщения с ярлыком Статьи. Показать все сообщения
Показаны сообщения с ярлыком Статьи. Показать все сообщения

Звуковая атмосфера. Практика.


Давайте рассмотрим небольшой пример работы со звуком и поговорим о звуковом разнообразии.
Я делаю игру в жанре «квест», и тут очень важен звук, т.к. экшена по сути нет. В квестах приходится часто и в больших количествах открывать всевозможные ящики, сундуки, двери и т.д. Соответственно, у каждого такого действия есть свой звук, и очень важно правильно его подобрать. Вот вам пример: вы в пятидесятый раз открываете очередной ящик и опять слышите один и тот же мерзкий скрип. Это раздражает. Значит, звуки подобных действий нужно делать более разнообразными, чтобы они не набивали оскомину игроку.
У меня есть стол, в столе 3 ящика, с которыми можно взаимодействовать.
Coma
При открытии/закрытии ящика должен проигрываться соответствующий звук. Ищите, скачиваете, обрабатываете (это сырые звуки, их нужно немного обрабатывать) и импортируете в UDK как .wav файл.
Конкретно для ящиков я нашел 3 звука открытия и столько же для закрытия. Идея в том, чтобы каждый раз при взаимодействии с ящиком проигрывался разный звук.
Создаём для них SoundCue и засовываем в него наши звуки для открытия ящика (смотрите картинку).
SoundCue
Добавляем ноду «Random» и подключаем к ней наши звуки (по умолчанию там 2 выхода, но можно добавлять сколько угодно: правой кнопкой мыши на ноде->Add Input). Теперь при активации будет рандомно проигрываться один из трёх звуков, уже не плохо. Но давайте придадим каждому звуку ещё большую уникальность – добавляем ноду «Modulator». Она случайным образом подстраивает параметры звука при каждом воспроизведении. Поиграйте с настройками, можно получить довольно интересные результаты.
«Attenuation and Gain» я использую для эффекта затухания звука при удалении игрока от источника.
То же самое делаем для эффекта закрытия ящика.
Вот и всё. Таким простым методом можно заметно разнообразить звуковую палитру.


 Использование статьи возможно только с указанием сайта первоисточника и сайта переводчика rusudk.ru

Инвентарь и интерфейс в целом

Инвентарь и интерфейс в целом:
Сегодня я расскажу о реализации инвентаря и других приблуд.

Mouse Interface
Собственно там эпики показывают в примерах как приспособить UDK под другие жанры. И приводят скрипты с, так называемым, MouseInterface’сом. В конце статьи ссылка на исходники и карту-пример. Суть тут проста: роль прицела исполняет свободно перемещающийся по экрану курсор, а специальный actor принимает на себя различные события (наведение на него курсора, клик и т.д.). Вот собственно и всё.
Mouse Interface
Сам курсор находится во флеше. А данные о позиции курсора передаются из флеша в UnrealScript.
Я переписал данный код под свои нужды, добавив несколько простых функций.
Теперь об инвентаре.

По чести сказать, инвентарь не динамический. То есть, все элементы (предметы) уже находятся в кадре, просто они скрыты. Когда игрок подбирает очередной предмет, через Kismet отправляется команда в флеш, которая выполняет функцию активации предмета в инвентаре.
Довольно сомнительная система, но программист я никудышный.
Смена иконок прицела реализована так же. Эпиковский actor воспринимает события наведения/убирания курсора, таким образом можно запускать нужные функции по этим событиям.
Кстати о Flash.

У меня нет никакого желания изучать ActionScript, поэтому для наведения лоска (конкретно заюзал плавное исчезновение/появление муви клипов) я воспользовался бесплатной библиотекой TweenMax . Библиотека в 2х вариантах: для ActionScript 2.0 и 3.0. В архиве есть файлик PluginExplorer-v11.swf. В нём представлены все фичи которые она умеет. В каждом примере есть код для запуска нужной функции.


 Использование статьи возможно только с указанием сайта первоисточника и сайта переводчика rusudk.ru

Система сохранения и загрузки


Cистема называется UltimateSaveSystem.
UltimateSaveSystem
В туторе подробное описание и пример использования. Там же ссылки на 2 архива. В первом скрипты, а во втором карта с примером.
При сохранении в папке ./Binaries\Win32\UserCode создаются файлы сохранений. Имеют расширение *.sav и суффиксы в названии. На каждый тип сохранённый данных создаётся свой файл с соответствующим суффиксом (векторы, булевые, целые и тд). Ну и при загрузке эти файлы просто считываются.
Эта система подойдёт новичкам, которые не нашли общий язык с UnrealScript. Так как всё делается через Kismet. В скрипты вообще лазить не надо.
Но если нужно сохранять большое количество данных (координаты кучи акторов, море переменных и т.д.), то эта штука не подойдёт. Одно дело сохранить позицию игрока и предметы в инвентаре, совсем другое городить сотни функций в Kismet пытаясь сохранить всё и вся.
В таких случаях есть другой способ.
Ссылка
Тут используется база данных, и весь процесс сохранения и загрузки описывается в скриптах. Этот метод более правильный и красивый. Очень подробно его рассмотрел Ogasoda в своих видео уроках (гугл в помощь).
Я выбрал первый вариант. Почему?
1. Мне требуется сохранять лишь позицию игрока и предметы инвентаря.

2. Мне лень разбираться в скриптовых дебрях второго метода.
Но, как всегда есть одно «но». Я не проверял как ведёт себя эта система на подгружающихся уровнях (Streaming). Возможно вообще не работает. А вот вторая в этом плане великолепно показала себя.
Выбор, как всегда, только за тобой.


 Использование статьи возможно только с указанием сайта первоисточника и сайта переводчика rusudk.ru

Обзор UDK

Обзор UDK:
В этой главе рассматриваются основная необходимая справочная информация, для того что бы начать разработку Unreal 3D игр под iOS и практические примеры, которые последуют в последующих главах. Для начала сделаем краткий обзор Unreal Development Kit(UDK), а так же ознакомим новичков со средой разработки. Охватим Unreal Editor который является средством управления и постройки уровня. Некоторые примеры, текстур, материалов, статик мэшэй, скелетных мешей и звуковых файлов, которые содержатся в UDK. Так же охватим информацию относящаяся к разработке игр на платформе iOS.

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

Первое, что понадобится сделать, это зайти на сайт UDK, расположенный по адресу http://udk.com и скачать последнюю бета-версию UDK. Примеры в этой книге корректно работают с июньской версией 2011г. UDK в настоящее время еще находится в бета фазе. После загрузки исполняемого файла, запустите программу установки. Дополнительно понадобиться установить Microsoft NEt Framework. Так же понадобиться скачать Remote UDK http://itunes.apple.com/us/app/udk-remote, который поможет при тестирования iOS игр.

Обзор Unreal Editor.

Если вы уже установили UDK, перейдите к панеле Пуск, найдите UDK Editor и запустите. Как только редактор загрузится вы увидите, что то похожее:

Это основной редактор, где вы строите свой уровень, а так же управляете игровыми ресурсами используемый в нем. В Unreal Editor можно запускать игры на мобильном просмоторщике, а также установить тип игры.

The Generic Browser

Я не буду описывать все кнопки на панеле инструментов UEditor. Будим касаться всего, что в контексте книги. Важно, взглянуть на  Content Browser, далее подробно опишем вкладку Actor Classes:
  • Content Browser — является основным интерфейсом с помощью которого, импортируют, выбирают и управляют ресурсами в UDK.
  • Actor Classes — эта вкладка содержит лист классов UnrealScript, имеет важное значение в этой книге.
  • Levels — Управляет уровнями, может состоят из одного или нескольких уровней.
  • Scene — Отображает объекты на текущем уровне в виде таблицы, где можно выбирать объекты и настраивать его свойства.
  • Layers — Позволяет группировать актеров, что позволит скрывать одних и просматривать других.
  • Start Page — Страница содержащая интернет-контент, связанный с UDK, такие как документация, новости, форумы и т.д.
Теперь давайте рассмотрит вкладку Actor Classes прежде чем перейдем к Content Browser.

Вкладка Actor Classes

Вкладка Actor Classes содержит базу готовых классов, которая является частью базового кода UDK, а так же те, ваши классы, после того как вы интегрируете их в систему.
Термин Actor в основном относится к объекту, созданному из класса Actor или объект созданный класса. Класс Actor очень важен, потому, что на нем реализуются геймплей игры, в том числе и код, необходимы для:
  • Отображения объекта
  • Анимации объекта
  • Физического воздействия и взаимодействия
  • Создания звуков
  • Создания и уничтожения Actor
  • Вывод сообщений

Есть три чекбоксов на этой вкладке:
  • Use ‘Actor’ as Parent. Если установлена галочка на этом параметре, будут отображаться только базовые классы, другими словами,  только классы построенные из Actor class.
  • Placeable Classes Only. Если установлена галочка на этом параметре, будут отображаться только классы, которые можно разместить в игровом уровне.
  • Show Categories. Если установлена галочка на этом параметре, будут отображаться различные классы, сгруппированные в категории, такие как физика(Physics) и навигация(Navigation).
Существует так же функция поиска, где вы можете найти дерево по имени класса. Мы еще не раз затронем этой вкладки.
Теперь давайте затронем Content Browser.

Content Browser и ресурсы UDK

Вкладка Content Browser является отправной точкой для импорта и работай с игровым контентом в UDK. Игровым контентом может быть звуки, текстуры и 3d модели, используемые в игре.

Импортирования нового контента

Можно импортировать новый контент, нажав на кнопку Import в нижнем левом углу. При нажатии на кнопку, открывается окно, с помощью которого вы можете указать на файлы, которые надо загрузить в систему UDK.
Примерами ресурсов которые могут быть импортированы в UDK, могут быть:
  • Звуковые файлы  .wav
  • Текстурные файлы .bmp, .pcx, .png, и .tga
  • Статик и скелетные мэши .fbx
  • Видео в формате .bik
  • Флеш фильмы .swf и .gfx

Поиск по ресурсам UDK

Вы так же можете отфильтровать объекты как по имени, так и по типу. В верхней части Content Browser есть окно поиска, который находится с парой стрелок,  где можно ввести название игровых ресурсов для поиска.

Ниже располагается Object Type(Тип объекта). Которорый содержит две вкладки, Fovorites(Избранное) и All Types(Все типы). В настоящее время отображаются все ресурсы, независимо от типа, так как стоит галочка на All
Давайте найдем текстуру, у которого в название содержится словосочетание blackwall. Установите галочку на против Textures, во вкладке Fovoritrs. Затем, введите слово «block» для поиска. И наконец, в Packages, который находится в нижнем левом углу, выберете UDKGame. Ваш Conten Browser должен показывать примерно следующее:

Если дважды черкнуть по текстуре, откроется окно, дающая вам больше информации о ресурсе. Например выберете текстуру под названием “T_BlockWall_02_D”

Текстурные ресурсы UDK.

Для iOS платформ, текстуры должны быть квадратные. Т.е. длина в пикселях должна быть равной ширине, например, 512×512 писклей. Текстуры создаются в графических редакторах, как Adobe Photoshop и сохраняется в форматах .bmp, .pcx, .png, и .tga, что бы система UDK могла принять формат при импорте. Оказавшись внутри, текстура может использоваться в качестве строительных блоков для материалов.
Снимите галочку с Textures и вставьте на против Materials, Найдите  и откройте двойным кликом материал под названием “M_BlockWall_02_D”. Откроется окно Unreal Material Editor.

Материалы в UDK

Material Editor используется для создания новых материалов с использованием тексту. В левой части редактора, есть сфера с текстурой. Вы можете вращать сферу, щелкнув левой клавишей по ней и перемещая мышь. Для отдалять и приближать сферу, нужно нажать по ней правой кнопкой мыши и перемещать мышь вперед или назад. Текстура на сфере, та что сейчас просматривается в Content Browser. Прокрутите нижнею часть редактора, пока не дойдете до раздела Mobile. Нажмите, что бы увидеть вложение, если оно не отображается.

На правой стороне свойства Mobile Base Texture находятся набор кнопок, эти кнопки так же используются во многих других местах по всему UDK.
  • Arrow. Кнопка со стрелкой, позволяет выбрав текстуру в Content Browser, затем установить, щелкнув по значку.
  • Magnifying Glass. Кнопка с изображением лупы. Позволяет найти текстуру через Conten Browser.
  • Clear Screen. Кнопка для отщистки.

Меши в UDK

Материалы используются для того, что бы покрывать поверхности статических либо скелетных мэшей, Мэшом является 3d объект, состоящий из набора вершин, который можно помесь в уровень игры. Скелетные мэши (skeletal mesh) так же включают в себя движущие части, называемые костями, которые как правило, используются для анимации 3D персонажа. Материалы придают поверхности цвет и текстуру.
Теперь давайте посмотрим на пример.
1. Вернитесь к подразделу Object Type > Fovorites, поставьте галку на против Static Meshes, и уберите галки с других типов.
2. Введите «Cube» в окне поиска. Отобразятся только статик мэши, которые содержат в имени «Cube».
3. Наконец, в Packages выберите пакет Engine. Вы увидите статик мэши. Двойной щелчке откроет Unreal Static Mesh Editor

4. В левой части окна, содержится куб, который можно вращать. Для этого надо удерживать правой кнопкой и перемещать мышь.
5. Нажмите левой кнопкой мыши и переместите назад и вперед, что бы отдалить и приблизить куб.
6. Вы можете просмотреть материал, используемый на кубе. перейдя в свойствах на раздел LODInfo. Если нажать на Magnifying Glass, откроется Content Browser в котором будет выделен используемый материал для этого статик мэша.

7.Как и раньше, двойной клик по материалу откроет Unreal Material Editor
Теперь, давайте поищем скелетным мэш.Впишите в запрос поиска «Jazz», В Object Type > Favorites в качестве типа поиска, надо указать Skeletal Mesh. Packages выбрать UDKGame.

После, в бразуре, вы должны будите увидеть скелетный мэш, под названием SK_Jazz. Дважды щелкните по нему, для открытия редактора Unrial AnimSet.
Также, в этом окне можно установить материал для скелетного мэша. Это можно сделать в левом окне с низу, в разделе Skeletal Mesh, опция Materials.


Системы частиц UDK

Системы частиц состоят из излучателя и частиц, который он излучает. Систему частиц принято использовать для создания эффекта выстрелов, взрывов и следов, который оставил снаряд.
Давайте взглянем на один пример.
  1. В Object Type выберите тип Particle Systems.
  2. В поисковом поле укажите fire. Убедитесь что в Packges указан UDKGame.
  3. Дважды щелкните системной частице fire, что бы увидеть окно UnrealCascade.
UnrealCascade имеет множество вариантов для создания ваших собственных излучателей. Здесь, настраиваются такие вещи, как тип, скорость, направление частиц.

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

Звуковые ресурсы в UDK

Теперь давайте поищем звуковые сигналы. Тип поиска укажем Sound Cues. Двойным щелчком мыши вы можете прослушать звуковой сигнал. Так же вы можете редактировать звук, щелкнув по нему правой кнопкой мыши и выбрав Edit Using Sound Cue Editor.
Примечание: Таким же образом, можно получить доступ к редактору для других игровых ресурсов, как статик мэш, материалы и т.п. Нажав правой кнопкой мыши по Edit Using EditorType. Вместо EditorType редактор соответствующий редактируемому ресурсу.

Редактор Sound Cue Editor позволяет смешивать разные наборы звуков в единый звуковой сигнал. Например, звуковой редактор имеет опции для циклов и случайной генерации звуков из групп. звуков


 Использование статьи возможно только с указанием сайта первоисточника и сайта переводчика rusudk.ru

Примеры Kismet

Примеры Kismet:
Kismet это мощная визуальная система сценариев, который позволяет дизайнерам с относительной легкостью дабавить на уровень добавить динамически и интересный геймплей. Этот документ содержит описание концепций и метод, которые, в сочетании со знанием всех доступных действий , условий , переменных и событий , помогут созданию новых и инновационных событий в игре.
Для получения дополнительной информации об использовании Kismet, посмотрите на Unreal Kismet руководство пользователя и KismetReference.

Концепция

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

Последовательности

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

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



Статья является переводом и правообладание на интеллектуальную собственность принадлежат  Epic Games, Inc. Использование статьи возможно только с указанием сайта первоисточника и сайта переводчика rusudk.ru

Камера от третьего лица в UDK

Камера от третьего лица в UDK: В UDK уже есть отличная камера от третьего лица. Осталось только заставить ее работать.

Сначала создадим класс своей игры. Назовем ее TPSGame.
Укажем что мы будем использовать свой PlayerController класс, а также свой Pawn класс. Дефолтный UTPawn заточен под игру от первого лица. Ставим значение bDelayedStart в false, чтобы игрок не ждал начала матча. Это нужно для однопользовательских игр.
class TPSGame extends GameInfo;

defaultproperties
{
  bDelayedStart=false;
  PlayerControllerClass=class'TPSPlayerController'
  DefaultPawnClass=class'TPSPawn'
}
Внимание! после того как мы отнаследовались от GameInfo карты от UT3 скорее всего с нашей игрой работать не будут. Можете попробовать отнаследоваться от UTDeathmatch или UTGame.

Далее нужно изменить настройки в DefaultGame.ini.
[Engine.GameInfo]
DefaultGame=TPSGame
DefaultServerGame=TPSGame
PlayerControllerClassName=TPSPlayerController
Листинг файла TPSPawn.uc. Тут мы используем стандартные ассеты доступные в UDK для того, чтобы получить 3D модель робота.
class TPSPawn extends GamePawn
  config(Game);

simulated function name GetDefaultCameraMode( PlayerController RequestedBy )
{
  return 'ThirdPerson';
}

defaultproperties
{
  Components.Remove(Sprite)
  Begin Object Class=DynamicLightEnvironmentComponent Name=MyLightEnvironment
    ModShadowFadeoutTime=0.25
    MinTimeBetweenFullUpdates=0.25
    AmbientGlow=(R=.01,G=.01,B=.03,A=1)
    AmbientShadowColor=(R=0.10,G=0.10,B=0.10)
    LightShadowMode=LightShadow_ModulateBetter
    ShadowFilterQuality=SFQ_High
    bSynthesizeSHLight=TRUE
  End Object
  Components.Add(MyLightEnvironment)

  Begin Object Class=SkeletalMeshComponent Name=InitialSkeletalMesh
    CastShadow=true
    bCastDynamicShadow=true
    bOwnerNoSee=false
    LightEnvironment=MyLightEnvironment;
    BlockRigidBody=true;
    CollideActors=true;
    BlockZeroExtent=true;
    PhysicsAsset=PhysicsAsset'CH_AnimCorrupt.Mesh.SK_CH_Corrupt_Male_Physics'
    AnimSets(0)=AnimSet'CH_AnimHuman.Anims.K_AnimHuman_AimOffset'
    AnimSets(1)=AnimSet'CH_AnimHuman.Anims.K_AnimHuman_BaseMale'
    AnimTreeTemplate=AnimTree'CH_AnimHuman_Tree.AT_CH_Human'
    SkeletalMesh=SkeletalMesh'CH_LIAM_Cathode.Mesh.SK_CH_LIAM_Cathode'
  End Object

  Mesh=InitialSkeletalMesh;
  Components.Add(InitialSkeletalMesh);
}
Наконец файл TPSPlayerController.uc в котором мы указываем какой класс камеры использовать для камеры игрока.
class TPSPlayerController extends GamePlayerController
  config(Game);

defaultproperties
{
  CameraClass=class'TPSPlayerCamera'
}
Теперь собственно класс игровой камеры TPSPlayerCamera.uc. Метод FindBestCameraType возвращает камеру которую мы хотим использовать.
class TPSPlayerCamera extends GamePlayerCamera;

protected function GameCameraBase FindBestCameraType(Actor CameraTarget)
{
  return ThirdPersonCam;
}

defaultproperties
{
  ThirdPersonCameraClass=class'TPSThirdPersonCamera'
}
Листинг TPSThirdPersonCamera.uc. Очень веселый листинг. =)
class TPSThirdPersonCamera extends GameThirdPersonCamera;

defaultproperties
{
  ThirdPersonCamDefaultClass=class'TPSThirdPersonCameraMode_Default'
}
Ну и наконец последний файл TPSThirdPersonCameraMode_Default.uc.
class TPSThirdPersonCameraMode_Default extends GameThirdPersonCameraMode_Default;

var float FOV;

function float GetDesiredFOV( Pawn ViewedPawn )
{
  return FOV;
}

defaultproperties
{
  FOV=80.f;
  PawnRelativeOffset=(x=30,y=10,z=-40)
  BlendTime=0.3
}
Компилим, запускаем и радуемся.

Итак вкратце:
  • PlayerCamera это всего лишь обертка содержащая в себе все возможные типы камер которые у вас будут использоваться. В методе FindBestCameraType вы сможете выбирать тип камеры который нужно использовать в данный момент.
  • GameCameraBase (в нашем случае GameThirdPersonCamera) это и есть класс описывающий функциональность камеры. Каждый тип камеры может иметь несколько режимов.
  • GameThirdPersonCameraMode (в нашем случае GameThirdPersonCameraMode_Default) класс описывающий режим камеры.

 Использование статьи возможно только с указанием сайта первоисточника и сайта переводчика rusudk.ru

NavMesh'им ботов

NavMesh'им ботов:

Что такое Navmesh

Navmesh это замена стандартному способу поиска путей по вейпойнтам.
Плюсы новой системы:
  • Более быстрый поиск пути.
  • Более точный поиск пути.
  • Более быстрые проверки по ObstacleMesh и WalkableMesh.
  • Простота создания NavMesh с точки зрения дизайнера уровней.
Итак начнем.

 

Что нужно, чтобы NavMesh заработал?

  1. Наличие NavMesh в уровне. (см. Туториал по NavMesh для дизайнеров by redbox )
  2. Реализация передвижения по NavMesh в коде.

 

Добавляем ботам возможность искать путь по NavMesh

Итак, добавляем две функции в контроллер ботов которые определены в базовом классе GameAIController.
event bool GeneratePathToActor( Actor Goal, optional float WithinDistance, optional bool bAllowPartialPath )
{
  // Clear cache and constraints (ignore recycling for the moment)
  NavigationHandle.PathConstraintList = none;
  NavigationHandle.PathGoalList = none;

  // Create constraints
  class'NavMeshPath_Toward'.static.TowardGoal( NavigationHandle, Goal );
  class'NavMeshGoal_At'.static.AtActor( NavigationHandle, Goal );

  // Find path
  return NavigationHandle.FindPath();
}

event bool GeneratePathToLocation( Vector Goal, optional float WithinDistance, optional bool bAllowPartialPath )
{
  // Clear cache and constraints (ignore recycling for the moment)
  NavigationHandle.PathConstraintList = none;
  NavigationHandle.PathGoalList = none;

  // Create constraints
  class'NavMeshPath_Toward'.static.TowardPoint( NavigationHandle, Goal );
  class'NavMeshGoal_At'.static.AtLocation( NavigationHandle, Goal );

  // Find path
  return NavigationHandle.FindPath();
}
Поиском пути по NavMesh управляет NavigationHandle который находится в контроллере. Для того чтобы NavigationHandle мог найти путь ему нужну указать как его искать. В данном случае мы используем два ограничителя (NavMeshPath_Toward, NavMeshGoal_At). Для правильной работы NavigationHandle обязательно должен иметь ограничители типов NavMeshPathGoalEvaluator и NavMeshPathConstraint. Вы можете написать новые классы ограничителей сами, чтобы получить нестандартный поиск пути.

 

Поехали

Путь мы нашли и теперь нам нужно сказать боту, что ему пора бы пойти... по этому пути. =)
Я покажу передвижение ботов по NavMesh на примере замены стандартного состояния AIController ScriptedMove на ScriptedMove с использованием NavMesh.
var() Vector TempDest;

...

state ScriptedMove
{
  Begin:
    // while we have a valid pawn and move target, and
    // we haven't reached the target yet

    while( Pawn != None && ScriptedMoveTarget != None && !Pawn.ReachedDestination(ScriptedMoveTarget) )
    {
      if( GeneratePathToActor(ScriptedMoveTarget) )
      {
        //NavigationHandle.DrawPathCache(,TRUE);

        // check to see if it is directly reachable
        if( NavigationHandle.ActorReachable( ScriptedMoveTarget ) )
        {
          // then move directly to the actor
          MoveToward( ScriptedMoveTarget, ScriptedFocus );
        }
        else
        {
          // move to the first node on the path
          if( NavigationHandle.GetNextMoveLocation( TempDest, Pawn.GetCollisionRadius()/**0.8f*/) )
          {
            //DrawDebugCoordinateSystem(TempDest, rot(0,0,0),25.f,TRUE);
            MoveTo( TempDest, ScriptedFocus );
          }
          else
          {
            //give up because the nav mesh did not have anything for you in the path
            `warn("NavigationHandle.GetNextMoveLocation failed to find a destination for to"@ScriptedMoveTarget);
            ScriptedMoveTarget = None;
            break;
          }
        }
      }
      else
      {
        //give up because the nav mesh failed to find a path
        `warn("FindNavMeshPath failed to find a path to"@ScriptedMoveTarget);
        ScriptedMoveTarget = None;
      } 
    }  

    // return to the previous state
    PopState();
}
Все. Изучайте и экспериментируйте.


Экспорт 3d моделей из Blender в UDK




Здравствуйте! Предлагаю вашему вниманию урок по экспорту статичных моделей (static meshes) из 3д пакета Blender в популярную среду разработки игр и презентаций -  Unreal Development Kit (UDK).
 На момент написания урока, актуальная версия Blender, в которой работает скрипт экспорта 3д моделей в формат .ase — 2.59. Актуальная версия UDK - 1.0.9656.0,  вышедшая в марте 2012 года.
Для начала нам нужно скачать официальную сборку Blender 2.59,  которая находится в репозитории официального сайта программы . Там найдете нужную версию блендера, с учетом разрядности вашей операционной  системы. После чего скачиваем последнюю версию скрипта, для экспорта моделей в .ase формат, который находится на сайте http://campagnini.net. Актуальная версия скрипта на момент написания статьи — 1.41. После скачивания скрипта, поместите его в папку блендера “addons”. Путь к папке такой: blender-2.59/2.59/scripts/addons. Сразу предупрежу — не пытайтесь ставить скрипт на другие версии блендера, поскольку распознан он не будет! Поберегите свои нервы и время, и делайте все, как написано в данной статье. Есть еще один важный момент: в сборках последних версий блендера активно используется новый тип просчета геометрии, называемый BMesh, в связи с чем возникла проблема обратной совместимости. Поэтому, рекомендуется делать модели для UDK прямо в блендере версии 2.59! Тем более, что функциональных различий в версиях блендера, от 2.59 до 2.62 (последняя актуальная версия блендера на данный момент) не так уж и много, точнее, они не столь значительны для создания игровых моделей.
Поскольку урок описывает тему экспорта геометрии из блендера и её импорта в юдк, я
не стану затрагивать моменты создания самой 3д модели и текстур для нее.
Предположительно, у вас уже должна быть модель для экспорта, я лишь опишу те
моменты, которые нужно учесть, перед экспортом. Во-первых, UV-развертка, её нужно сделать обязательно. Во-вторых,  нужно назначить материал для вашей модели. В-третьих, геометрия модели не должна состоять из различных объектов, перед экспортом все раздельные части нужно объединить в один объект (join meshes). На четвертом моменте я заострю внимание, поскольку он касается создания коллайдера для вашей 3д модели. Это не обязательный, но все же, важный момент, думаю, вы и сами это понимаете. Итак, у нас есть игровая модель, у которой все при себе: карты цвета, блеска и нормалей, оптимизированная сетка, но для полного счастья нам не хватает коллайдера (ограничителя движений персонажа, проще говоря — твердое тело). Сделать его очень просто, достаточно создать клон объекта и назвать его «UCX_нужное дописать» в поле имени объекта.


Именно приставка “UCX_” в начале названия     объекта и отвечает за то, что игровой движок распознает объект как коллайдер. Однако, клонировать сложный по структуре объект в качестве коллайдера нерационально — это удар по оптимизации и быстродействию. Поэтому, мы будем создавать коллайдер из примитивов. На примере своей модели, я заполнял простыми боксами те места, с которыми будет взаимодействовать мой персонаж. Если персонаж в силу геймплея не сможет достать до места в объекте, где возможно требуется столкновение, то коллайдер туда создавать не нужно.



 








Когда общая форма объекта-коллайдера будет выстроена, соедините все части в один объект. Теперь осталось экспортировать нашу прелесть в .ase формат. Открываем пользовательские настройки (Ctrl+Alt+U), переходим в раздел Add-Ons и ищем в списке аддон, который называется ASCII Scene Exporter. Активируем его, поставив галочку в пункте Enable an addon.  Перед экспортом убедитесь, что масштаб и поворот объектов применены (Ctrl+A > Rotate & Scale), а то в игровом движке моделька может отобразиться совсем не так, как вы того ожидали. Выделяем наши объекты (напомню, что основной объект не может состоять из разных частей-объектов, иначе экспорта не будет!), затем File > Export > Ascii Scene Sxport. В появившемся окошке мы можем указать путь, куда будет произведен экспорт, а также произвести несколько настроек экспортера, таких как масштаб, автотриангуляция (советую отключать, поскольку ваша модель в блендере будет триангулирована, а это не очень-то нам и нужно), и перепросчет нормалей. На этом наши мытарства в блендере закончены, можно переходить в UDK.

Создаем новый проект, пусть это будет шаблон Midday Lighting.


Теперь нам нужно создать комплект (Package), в котором будет наша моделька из блендера с её текстурами и прочими плюшками. Открываем контент браузер, сочетанием клавиш Ctrl+Shift+F, нажимаем правой кноакой мышки по папке UDKGame, в появившемся списке выбираем Import и импортируем нашу модельку. В появившемся окне даем нашему новоиспеченному комплекту вменяемое название, после чего жмем Ok, после чего появится еще одно окно, в котором также жмем Оk. Комплект создан, давайте сохраним его, от греха подальше. Сейчас наш комплект находится в папке NewPackages. Кликаем по нему правой кнопкой мышки, в появившемся списке выбираем Save, сохраняем комплект (по умолчанию комплект предлагают сохранить в папке Content, советую путь не изменять, во избежание ошибок загрузки комплекта движком).

Теперь наш комплект переместился в папку Content, в контент браузере, это хороший знак. Выбираем наш комплект, в правом окошке обозревателя контента мы можем видеть наш объект, пока он без текстур и материалов. Можете кликнуть по нему два раза левой кнопкой мышки и повертеть во вьювере, если хочется. Далее, создаем материал. В окне обозревателя контента кликните правой кнопкой мышки, после чего появится большой список предлагаемого инструментария, нам пока нужен New Material.







































Дайте новому материалу понятное и желательно не длинное имя (нам ведь вручную его прописывать придется для объекта). Откроется редактор материалов, однако пользы от него в данный момент мало, нужно еще загрузить текстуры, однако сам редактор материалов не закрывайте, просто отодвиньте его влево, чтобы он не загораживал нам окно обозревателя контента. Снова жмем правую кнопку мышки в окне обозревателя контента, на этот раз выбираем из списка строчку Import, она находится в самом верху. Выбираем нужную нам текстуру и ничего нигде не меняя жмем Ok, после чего текстура добавится в окно обозревателя контента, то есть в наш комплект. Проделываем операцию по импорту текстур столько раз, сколько требуется. Когда все необходимые текстуры будут импортированы в наш комплект, можете смело начинать перетаскивать текстуры в редактор материалов (можно конечно не перетаскивать, а создать в редакторе материалов ноды для изображений, потом к ним   прописать названия наших текстур, но это долго и нудно). Теперь, когда текстуры находятся в редакторе материалов, нам нужно их правильно подсоединить к основному принимающему ноду, для этого справа-налево нужно перетаскивать соединяющие линии (коннекторы) от нодов текстур, к ячейкам основного нода.















                                                       
  В левом окошке окна редактора материалов, мы можем покрутить шарик с нашим материалом, чтобы воочию видеть его свойства и настраивать по своему хотению.
Дам парочку советов по работе с нодами материалов: Чтобы переместить нод,
зажмите Ctrl и перетаскивайте его с помощью зажатой левой кнопки мышки. Чтобы
отсоединить нод, зажмите Alt и оттяните левой кнопкой мышки коннектор в том
месте, куда он соединяется (а не оттуда, откуда выходит). Наигравшись вдоволь, нажимаем галочку Apply changes to original material. Материал сохранится, но окно редактора материалов не закроется, можете его закрыть или свернуть. Материал успешно создан! Теперь нам нужно его применить к нашей модельке, тут есть два пути: 1. Перетаскиваем нашу модельку в сцену, а затем перетаскиваем материал на нее — быстро и просто, но, не совсем правильно! Дело в том, что мультиматериалы, если таковые имеются в нашей модельке, мы таким образом не применим, он будет заменяться на новый, поэтому используем второй вариант. 2. Открываем просмотрщик моделей, клацнув по нашей модельке левой кнопкой мышки 2 раза, затем открываем вкладку LODInfo > [0] > Elements > [0] и в поле названия материала (там где none) вписываем название нашего материала. Если название материала набрано корректно, то наша моделька сразу преобразится, на ней будет видна текстура.

Закрываем вьюпорт. Дело осталось за малым - поместить нашу выстраданную модель в сцену. Собственно, тут все просто как никогда! Перетащите модельку из окна обозревателя контента в сцену, отмасштабируйте модель, настройте позицию, запеките освещение – Ctrl+Shift+; (если будут сообщения об ошибках, пропускайте, они не столь критичны) и можете смело запустить тест игровой сцены (Ctrl+G).


На этом все, дорогие друзья! До новых встреч!
С уважением, Yani-X.

















UDK-content Разные передвижные средства а так-же оружие.


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





UDK движок возможности технологии

State-of-the-Art Animation
Unreal Engine 3 дает вам полную свободу анимации. Скелетная система анимации Unreal Engine 3 дает поддержку до четырех костей на вершину и позволяет для смешивания десятка анимаций одновременно.


Artificial Intelligence
Добавить жизни в ваш игровой мир с помощью толпы системы Unreal Engine 3  которая может моделировать сотни персонажей в сцене в режиме реального времени.

Savegames using the configuration system (Система сохранений)

Обзор
Конфигурация системы Unreal Engine довольно мощная и зачастую требует сохранения многих переменных. Эта статья представляет собой метод создания системы сохранения игр для RPG, созданных на UDK.