Здравствуйте. Вы находитесь на сайте Unreal Level. Данный ресурс посвящен редакторам карт игр серии Unreal, UT и Gears of War. Основная цель сайта , помочь всем желающим освоить любой из редакторов вышеперечисленных серий. Наибольшим приоритетом на этом сайте, обладает редактор UnrealED for Unreal Engine 3 и редактор движка Unreal Engine 3.5, входящий в комплект разработки UDK, поскольку это наиболее актуальная на сегодняшний день технология.
Weapon System Technical Guide
автор: FACH | 1 Декабря 2010 | Просмотров: 6553

 

Автор: Джо Вилкокс, обновлено: Джеффом Уилсоном.

Перевод: LS

Оригинал: Weapon System Technical Guide

 

Введение

 

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

 

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

Для получения дополнительной информации по установки контента оружия смотрите: «Установка Оружия».

 

Инвентарь

 

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

 

Контролирование оружия менеджером инвентаря

 

Класс Weapon дочерний от класса Inventory. Есть два способа поместить оружие в инвентарь павна. Либо с помощью функцию Pawn.GiveWeapon(), либо через актеры DroppedFactory или PickupFactory. DroppedPickups - это актер, который создаются, когда оружие расположено в игровом мире. Т.е. когда игрок выбрасывает его из инвентаря (умышлено или в случае смерти). PickupFactory - представляет собой актер, который размещается на карте дизайнером. Эти актеры предназначены для передачи предметов инвентаря игроку и отвечают за их состояние в игровом мире.

 

DroppedPickup и PickupFactory оба передают пешке какую-либо вещь, класса Inventory. Это выполняется через функцию Item.GiveTo(). Данная функция сообщает InventoryManeger добавить данный предмет в инвентарь пешке через функцию Inventorymanager.AddInventory().

 

Второй способ дать павну оружие через Pawn.GiveWeapon(). Это вспомогательная функция, которая позволяет использовать не физические актеры (такие как GameInfo или Mutator), легко дать оружие павну без необходимости помещения оружия на уровень. Это достигается путем вызова InventoryManager.CreateInventory(), переходящей в класс оружия для создания.

 

После того, как Pawn получил оружие, его необходимо активировать, прежде чем использовать. Как правило, активация проходит через пользовательский ввод,  обычно через функции PlayerController.NextWeapon() или PlayerController.PrevWeapon() и InventoryManager.SwitchTo WeaponClass(). Эти функции выполняют определенную логику и когда принято новое оружие вызывается InventoryManager.SetCurrentWeapon().

Weapon System Technical Guide


 

SetCurrentWeapon() является главной отправной точкой активации оружия. Она принимает один параметр – DesiredWeapon, который содержит в себе ссылку на оружие, которое Вы хотите активировать и он всегда должен вызываться из локального клиента. После вызова инициируется часть кода, убирающая текущее оружие (возвращение его в инвентарь и деактивация). Рисунок выше показывает, как работает система.

 

InventoryManager использует свойство PendingWeapon для определения какое оружие будет выбрано после завершения последовательности putdown.SetCurrentWeapon() задает свойство и затем вызывает функцию Weapon.TryPutDown(). Она инициирует деактивацию оружия.

 

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


В случае успешной попытки SetCurrentWeapon() вызывает ServerSetCurrentWeapon() для инициации процесса на сервере. Этот процесс практически идентичен SetCurrentWeapon(), однако, две вещи необходимо учитывать. Во-первых, ServerSetCurrentWeapon() предполагает, что TryPutDown() выполнена успешно на уровне клиента. И второе, что следует принять во внимание, что учетная запись слушает сервера и ограничивает серверный запрос TryPutDown(), если InventoryManager управляется локально.


Все вышесказанное предполагает, что у пешки есть оружие. Если нет, то TryPutDown() пропускается и управление передается непосредственно к ChangedWeapon(). Прежде чем рассматривать ChangedWeapon() важно рассмотреть WeaponPuttingDown и другие состояния оружия.

 

Существуют шесть основных состояний оружия:

                -Inactive – обычно оружие находится в неактивном состоянии, когда оно не используется. По умолчанию это означает, что оружие спрятано, и оно не может использовать события StartFire()EndFire().

                - Active – оружие находится в руках и готово к стрельбе. Вызов события StartFire() из этого состояния инициирует последовательность действий для стрельбы.

                - WeaponEquipping – когда оружие активируется (путем вызова функции Activate()) оно переходит в состояние WeaponEquipping. Это состояние должно сопровождаться проигрыванием какой-либо анимацией «взятия» и любым эффектом. Время перехода в активное состояние контролирует TimeWeaponEquipping().

                -WeaponPuttingDown – это состояние определяет, как оружие будет убрано в инвентарь и деактивировано. Обычно это состояние вызывается из функции TryPutDown() или задержки проверки bWeaponPuttingDown. Подобно WeaponEquipping должно проигрывать любую необходимую анимацию и эффект. Время действия использует значение TimeWeaponPutDown().

                -PendingClientWeaponSet это особое состояние, которое используется только при входе в клиент.  Оружие переходит в это состояние, когда оно было активировано, но его первоначальная и важная информация не была воспроизведена. По истечению интервала времени оружие перейдет в состояние WeaponEquipping.

                -Firing в этом состоянии выполняется самая обширная работа. Вызывается событием StartFire, обычно указывается в FiringStatesArray как «Firing».

 

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

 

После того, как оружие убрано, вызывается InventoryManager.ChangedWeapon() (из функции WeaponIsDown() состояния WeaponPuttingDown). Функция ChangedWeapon отвечает за фактическое изменение свойств оружия и вынесение каких-либо уведомлений. Наконец она активирует новое оружие.

 

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

После того, как вызвано Weapon.Activate(), оружие переходит в состояние WeaponEquipping. Из приведенного выше списка мы можем увидеть, что это состояние отвечает за инициацию оружия для использования и воспроизведение любой анимации «взятия» или эффекта. Это состояние контролируется функцией TimeWeaponEquipping(). Именно в этой функции прописано прикрепление меша оружия и проигрывание анимации. Для  EquipTime установлен таймер и когда он истекает, вызывается функция WeaponEquipped(). После оружие переходит в активное состояние и готово к использованию.

 

Weapons

 

Очевидно, что сам класс Weapon и дочерние от него классы, являются основными в системе оружия UE. Они содержат всю логику для определения, как оружие должно функционировать и вести себя. По большей части все вращается вокруг концепции выстрела. Однако, это может помочь воспринимать концепцию «огня» в более широком плане, чем «использование оружия». Абстрактная идея оружия в Unreal идет дальше узкого представления об огнестрельном оружии и держит направлении больше в сторону какого-либо предмета, который игрок может использовать для выполнения определенного действия в игре. Конечно если Ваша игра - шутер, это недолжно быть проблемой и терминология очень хорошо подойдет к Вашей концепции. В случае же если игра использует другие идеи, что может быть оружием или для чего его можно использовать, то эта абстракция упростит Вам путь.

 

Weapon Firing Mode

 

Оружие в Unreal может иметь несколько режимов. По умолчанию это «огонь» (Fire) и «альтернативный огонь» (Alt Fire) и выполняются они по нажатию левой и правой кнопки мыши соответственно. Каждый режим стрельбы может вести себя совершенно по-разному. Например, Link Gun. В основном режиме стреляет снарядами из плазмы, а в альтернативном же выпускает постоянный поражающий луч. Эти режимы абсолютно разные и за каждый ответственен свой участок кода. Оружие может иметь больше, чем два режима стрельбы, при условии, что существует механизм описывающий использование каждого из режимов. Дополнительные режимы не встроены в систему по умолчанию. Поэтому необходимо создать новые привязки для системы ввода (т.е. для клавиатуры или мыши) и вполне возможно, что для облегчения функциональности новым методам это будет необходимо.

 

Weapon Fire Type

 

То, каким образом оружие стреляет и наносит урон (или влияет на что-либо) контролируется типом огня текущего режима стрельбы. По умолчанию Unreal имеет два различных типа стрельбы: Instant Fire (мгновенный) и Projectile Fire (выстрел снаряда). Название «мгновенный» выстрел говорит само за себя. Мгновенно просчитывается след от попадания и рассматривается урон или иной желаемый эффект. Второй тип тоже метко назван. Когда инициируется тип стрельбы Projectile Fire, рождается новый снаряд и отправляется в направлении, куда нацелено оружие. Урон или иной желаемый результат просчитывается при попадании снаряда во что-либо.

 

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

 

The Firing Sequence

 

После того, как оружие будет в активном состоянии, оно может воспринимать событие стрельбы от класса Player Controller. Прежде чем смотреть участок кода, отвечающий за стрельбу, следует обратить внимание на объявленные переменные в классе Weapon.uc, а также на перечень функций, таких как HasAmmo(). По умолчанию система оружия UE3 содержит только функции-пустышки для обработки боеприпасов и фактическое осуществление должно происходить уже в игровых скриптах.

 

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

 

 

Часть 2

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

#1 написал: LS
3 Декабря 2010 14:39 | ICQ: Не Указано |


Группа: Активист
Регистрация: 25.06.2010
FACH посмотри, там в третьей части целый блок функций и свойств из Weapon.uc и UDKWeapon.uc пропущен!
Публикаций: 0 | Комментариев: 12      
#2 написал: FACH
3 Декабря 2010 16:41 | ICQ: 562039160 |


Группа: Администраторы
Регистрация: 27.06.2009
млять, чертов лаганый двиг...
Сча все проверю...


--------------------
Публикаций: 134 | Комментариев: 778      
#3 написал: seaman
7 Декабря 2010 13:40 | ICQ: Не Указано |


Группа: Посетители
Регистрация: 16.07.2010
Здорово.
Это справочник, а справочник все же лучше иметь на родном языке, чтобы при первом взгляде было видно где что.
Спасибо.
Публикаций: 0 | Комментариев: 4      
Информация
Посетители, находящиеся в группе Гости, не могут оставлять Комментарии в данной новости...






При копировании материалов, активная ссылка на UNREAL-LEVEL.RU обязательна!
© 2008—2012, UNREAL-LEVEL.RU. Все права защищены.