что такое абилки в играх
Абилка
Абилка (в английском – ability) – популярный в компьютерных играх термин, обозначающий какие-либо способности или умения персонажей. Это могут быть самые разные умения, такие как способность разными способами атаковать оппонентов, оглушать их, накладывать полезные эффекты на своих союзников и все в таком духе. Условно абилки можно разделить на две категории:
Как правило, абилки в играх можно прокачивать (особенно если вы играете в RPG, где развитие персонажа чуть ли не самый важный элемент геймплея). Каждый новый уровень или выполнение других условий, позволяющих разблокировать очки навыков, и вот вам уже дают возможность выучить новую способность. Уникальные наборы абилок для персонажей именуются билдами и оказывают существенное влияние на стиль отыгрыша. Одного героя, если есть такая возможность, можно сделать танком, другого – дд. К сожалению, когда дело касается онлайн игр, разнообразие исчезает – всегда есть наиболее мощные комбинации способностей (метовые), которые помогут одержать победу над врагами, а если не будете их придерживаться, то проиграете.
Далеко не в каждой игре геймерам предоставляют доступ сразу ко всем абилкам – на некоторые (обычно это самые мощные способности – ультимейты) установлено ограничение по уровню. Только достаточно прокачавшись и прокачав ветку умений, можно будет открыть сильное усиление. К примеру, в популярной МОБА-игре Dota 2 только персонажи 6+ уровня смогут вкачать “ульт”. Если бы такие способности стали доступными с самого начала, это убило бы весь баланс.
Примеры употребления
“Этот персонаж имеет отличную абилку, позволяющую накладывать баффы на членов своей пати”.
“На десятом уровне можно будет выбрать между пассивной абилкой на шанс критической атаки и перманентным повышением уровня здоровья на 100 единиц”.
“Абилки на защиту от физических атак лучнику лучше не брать, так как до них мечники все равно не добираются”.
Лексикон/Жаргон ДОТЫ (1,2)
26 Oct 2011 в 15:46
26 Oct 2011 в 15:46 #1
В русском Дота-сообществе укоренились следующие термины:
Дамагер (от англ. Damage) — см. «ДэмэджДилер».
Даун-лодырь (от англ. Download) — см. «качер».
Дизэйблер — (от англ. Disabler) — тип героев, обладающие скилами нейтрализующими противника на некоторое время.
ДропХакер (от англ. Drop Hack) — игрок использующий запрещённую программу для кика игроков из игры.
ДэмэджДилер — (от англ. DamageDealer) — тип героев, обладающих потенциалом нанесения высокого урона.
Дэнаинг (от англ. Denying) — добивание своих крипов, имеющих низкий уровень хп, для того, чтобы противник не получил за них опыт и золото.
Дэф (от англ. Defence) — защита точки, вышки, линии.
Имба (от англ. Imbalanced) — несбалансированный предмет\герой\заклинание\etc в карте, обычно употребляется в значении «чересчур сильный».
Итемы (от англ. Item) — вещи усиливающие параметры и/или способности героя и/или дающие новые скилы.
ИтемБилд(от англ. ItemBuild) — набор итемов для героя.
НоуЛайфер (от англ. No life) — задрот, тратящий всё свободное время на компьютер. Пренебрегающий гигиеной, питанием, здоровьем, друзьями и уроками русского языка.
Нуб (от англ. Noob) — новичок, человек, который играет в ПЕРВЫЙ раз или около того.
Нюк (от англ. Nuke) — скилл, наносящий ощутимый дамаг за применение. Так же используется как глагол «нюкать».
Рандомайзер/Рандомщик (от англ. Random) — как правило, весьма опытный игрок. Рандомит из-за трёх причин: не знает кого сейчас выбрать/золото в начале важнее нужного героя/так интереснее. Нередко рандомайзером называют игроков, которые случайно в замесе заюзали скилл раньше времени или не в тему, но результатом стало уничтожение вражеского героя. В принципе, любое случайное убийство героя может быть расценено как рандомайзерство.
Аббревиатуры
Некоторые Герои из Dota 2:
Список героев
1. Кунка/Адмирал (анг. Kunka/Admiral)
2. Бистмастер/Бист/Бм/Bm (анг. Beastmaster)
4. Шейк/Шейкер/ec/es (анг. версия Earthshaker)
5. Акс (анг. версия Axe)
11. Свен (анг. версия Sven)
12. Тини/Тиник (анг. версия Tiny)
13. Баланар (анг. версия Night Stalker)
20. Урс/Урса (анг. версия Ursa)
21. Хуск/Хускар (анг. версия Huskar)
22. Мясо/Пудж (анг. версия Pudge)
24. Селедка/Сельдь (анг. версия Slardar)
25. Скелет (анг. версия Skeleton King)
26. Клок/Хвост (анг. версия Clockwerk)
27. ДК/DK (анг. версия Dragon Knight)
30. Тайд (анг. версия Tidehunter)
33. Ск/Скорп (анг. верся Sand King)
34. Чен (анг. версия Chen)
42. Цмка/Рулай/Цм/Cm (анг. версия Crystal Maiden)
43. Потма/Мирана (анг. версия Mirana)
44. Пак (анг. версия Puck)
45. Тинкер (анг. версия Tinker)
46. Атропос (анг. версия Bane)
47. Дум (анг. версия Doom Bringer)
48. Варлок (анг. версия Warlock)
49. Лион (анг. версия Lion)
50. Коза (анг. версия Enchantress)
51. Зевс/Дед (анг. версия Zeus)
52. Фурион/Фура (анг. версия Nature`s Prophet)
54. Эни/Энигма (анг. версия Enigma)
55. Лич (анг. версия Lich)
56. Некр (анг. версия Necrolyte)
57. Бруда/Мамка (анг. версия Broodmother)
58. Лина (анг. версия Lina)
59. Электро Панда/Шторм/cc/ss (анг. версия Shotm Spirit)
60. Вр/Врка
62. Тхд/Джакиро (анг. версия Jakiro)
63. Пугна (анг. версия Pugna)
64. Банша (анг. версия Death Prophet)
66. Ланая (анг. версия Lanaya)
67. Морта/Морда (анг. версия Mortred)
70. Дазл (анг. версия Dazzle)
71. Вивер/Жук (анг. версия Weawer)
74. Раста (анг. версия Shadow Shaman)
75. Сир/Заяц (анг. версия Dark Seer)
76. Снайп/Снайпер (анг. версия Sniper)
78. Леший/Лешрак (анг. версия Lechrac)
79. Вд/ Вич (анг. версия Withc Doctor)
84. Джага/Юра (анг. версия Juggernaut)
86. Сикер (анг. версия Bloodseeker)
87. Боня/Боник (анг. версия Clinkz)
88. Спекта/Спетра (анг. версия Spectre)
91. Морф (анг. версия Morphling)
94. Войд (анг. версия Faceless Void)
95. Веник/Веномансер (анг. версия Venomancer)
96. Сф/Невер/Невермор (анг. версия Shadow Fiend)
98. Магина/Антимаг (анг. версия Anti-Mage)
99. Рики/Крыса (анг. версия Rikimaru)
102. Вайпер (анг. версия Viper)
103. АА/Аппарат (анг. версия Ancient Apparition)
106. Траха/Тракса (анг. версия Drow Ranger)
109. Венга/Снежок (анг. версия Vengeful Spirit)
110. Разор (анг. версия Razor)
113. Гуля/Найкс (анг. версия N`aix)
Пока не всех написал. Это в процессе. надо же отдыхать.
Как устроены абилки в War Robots
Привет! Меня зовут Владимир Попов, и я клиентский разработчик на проекте War Robots.
War Robots существует уже несколько лет: за это время в игре появились десятки новых мехов. И, конечно, ни один из них не был бы уникальным без собственного набора способностей.
О том, как устроена и как эволюционировала система способностей в нашей игре, просто и без особых технических подробностей я расскажу в этой статье.
Для начала погрузимся в историю и посмотрим на старый вариант реализации — сейчас он уже не используется на проекте.
Старая абилка могла существовать только в двух состояниях: активном и неактивном. К каждому состоянию можно было закрепить свое действие.
Рассмотрим пример абилки Jammer (англ. «помехи»). Она была в свое время, например, у робота Stalker. Работала она следующим образом:
Тогда мы поняли, что нужно что-то менять. И разработали новую систему. В ней каждая абилка стала представляться набором из нескольких связанных объектов. Функционалось разделилась на стейты абилки и компоненты стейтов.
У любой абилки есть мастер. Это ее центральный объект. Он связывает остальные объекты абилки с внешним миром и наоборот. И все основные решения тоже принимает он.
Стейтов может быть любое количество. По существу стейт здесь мало чем отличается от состояния «активна»/«неактивна» в старой версии. Но теперь их может быть любое количество, а предназначение их стало более абстрактным. Одновременно у абилки может быть активен только один стейт.
Основным новшеством по сравнению со старой системой стали компоненты. Компонент описывает какое-то действие. У каждого стейта может быть любое число компонентов.
Как работают новые абилки?
Одновременно абилка может находиться только в одном из стейтов. Мастер занимается их переключением. Компоненты, которые линкуются к стейту, реагируют на активацию/деактивацию стейта и в зависимости от этого могут либо начать выполнять некое действие, либо прекратить его выполнять.
Все объекты стали настраиваемыми. Геймдизайнер может как угодно миксовать стейты и компоненты между собой и таким образом получать новую абилку из предустановленных блоков. Программисты теперь нужны только для того, чтобы создать новый компонент или стейт, что сильно облегчает написание кода. Теперь они работают с небольшими сущностями, описывают какие-то простые элементы и не собирают абилку сами — этим стали заниматься геймдизайнеры.
Со временем и этого нам стало мало, и схема абилки преобразовалась в следующий вид:
Мастер, стейт и компоненты остались на своих местах, но к ним добавились новые элементы.
Первым делом бросается в глаза то, что мы добавили каждому стейту и компоненту условия. Для стейтов они определяют дополнительные требования для выхода из стейта. Для компонентов они определяют, может ли этот компонент выполнить свое действие.
Контейнер зарядов (чарджей) содержит в себе заряды, перезаряжает их, останавливает перезарядку при необходимости и предоставляет заряды стейтам для пользования.
Таймер используется тогда, когда несколько стейтов должны иметь общее время выполнения, но при этом их собственное время выполнения не определено.
Важно заметить, что все объекты абилки являются опциональными. Технически для работы абилки достаточно лишь мастера и одного стейта.
Абилок, которые целиком собраны без привлечения программистов, не так много, но разработка в целом стала заметно дешевле, ведь программисты теперь пишут очень маленькие вещи: например, один новый стейт или два компонента, — остальное же переиспользуется.
Подытожим, какие составляющие части абилок у нас есть и что они из себя представляют:
Мы не стали придумывать что-то совершенно новое для UI. Устроен он у нас так.
У мастера есть свой UI. В нем определяются какие-то элементы, которые должны быть в UI всегда и не зависят от того, какой стейт сейчас активен.
У каждого стейта есть своя пара в UI. UI стейта отображается только тогда, когда его стейт активен. Он получает данные о своём стейте и может тем или иным образом выводить их. Например, стейты с длительностью обычно имеют полосу и текст в своем UI, которые отображают оставшееся время.
В случае, когда стейт ждет внешней команды для продолжения работы абилки, его UI отображает кнопку. И ее нажатие отправляет команду в стейт.
Теперь разберем работу абилок на конкретных примерах. Для начала рассмотрим робота под названием Inquisitor.
Мы имеем четыре стейта, которые сменяются друг за другом. Над стейтами вы видите их отображение в UI. У двух из них вы видите компоненты, которые к ним относятся. Другие два стейта просто не имеют компонентов.
Флоу работы абилки:
Другой пример — Phantom. Здесь многое происходит аналогично Inquisitor, но все же есть свои нюансы:
Таким образом, казалось бы, наша система эволюционировала от простого к сложному, однако тем самым упростилась жизнь и программистов, и геймдизайнеров. Помощь первых теперь нужна по большей части при добавлении небольших компонентов, вторые же получили большую автономность и теперь могут самостоятельно собирать новые абилки из уже имеющихся стейтов и компонентов. При этом игроки тоже получили профит в виде более разнообразных и комплексных способностей мехов.
Словарь геймера: переводим с игрового на русский
Содержание
Содержание
Друг-геймер опять говорит на непонятном языке? Собирает какой-то лут, вечно ему не хватает то маны, то хила, то хр. Если вы хотите понимать окружающих геймеров или сами только-только вступаете на путь бойца геймпада — вот вам геймерский словарь. Пригодится!
Общие понятия
Игровой сленг — часть компьютерного сленга. Большинство терминов прискакало из английского языка, навалом аббревиатур, какие-то слова прошли сквозь горнило просторечия — так, Quake стала «Квакой», Warcraft 3 — «Вариком», Sid Meier’s Civilization — «Цивой». Геймерскому сленгу присуща краткость, а потому он усваивается на лету. Вот увидите, со временем и вы будете отличать бафф от перка и со знанием дела комментировать количество fps в FPS.
Начнем с общих терминов и названий жанров игр.
В Shadow of the Colossus все противники уникальные, все — боссы!
Аббревиатуры
Все аббревиатуры взяты из английского. Некоторые в русском потеряли признаки аббревиатур — XP у нас просто «экспа», а NPC — «непись».
AP (action points) | очки действия |
DLC (downloadable content) | цифровое дополнение к игре |
FPS (first-person shooter) | шутер от первого лица |
fps (frames per second) | количество кадров в секунду |
HP (health points) | очки здоровья |
MP (mana points) | очки маны, магической энергии |
NPC (non-player character) | неигровой персонаж |
PvE (player versus environment) | кооперативный (совместный) мультиплеер |
PvP (player versus player) | соревновательный мультиплеер |
QTE (quick time event) | серия команд, быстро высвечивающихся на экране |
RPG (role-playing game) | ролевая игра |
TPS (third-person shooter) | шутер от третьего лица |
XP (experience points) | очки опыта |
Чтобы fps в Assassin’s Creed Valhalla радовал при разрешении выше Full HD, нужна GeForce RTX 3000-й серии.
Не стоит злоупотреблять аббревиатурами. В них-то как раз эмоций нет, в отличие от сленговых слов. Представьте себе такой диалог:
А: Ты как, прошел Detroit: Become Human?
Б: Нет, ненавижу QTE!
А: Далеко продвинулся в The Outer Worlds?
Б: Не, RPG не для меня вообще, все эти HP, MP… возня с характеристиками бесит.
А: Ну а что нравится? PUBG, Fortnite?
Б: Какой PUBG, я больше по PvE!
Сленг по жанрам
Жанры от A до Z исследовать не станем, остановимся на трех популярных — шутерах, ролевых играх, файтингах. Шутеры и файтинги востребованы и на соревновательной сцене, где вокруг них сформировалось мощное сообщество, что вылилось во множество специфических слов.
Шутеры:
инвиз | невидимость |
казуал | массовый игрок, в отличие от хардкорщика |
кемпер (кэмпер) | игрок, который подолгу сидит в засаде |
киллстрик | серия убийств и награда за нее |
кишка | коридор, часть карты (локации) в форме зигзага |
нуб | новичок |
обвес | различные улучшения для «пушки» |
респаун | возрождение после убийства / сама точка возрождения |
стрейф | перемещение боком |
танк | герой с хорошими показателями защиты и здоровья |
фраг | 1) очко за убийство, 2) сраженный противник |
хедшот | попадание в голову |
хилер | герой-медик |
читер | игрок, получивший преимущество нечестным путем |
Ролевые игры:
абилка | способность |
бафф | временное усиление характеристик |
дамаг | урон |
кастовать | произносить заклинание |
квест | задание |
крафтинг | создание предметов |
лут | добыча |
перк | бонус к навыку |
прокачка | набор опыта |
скилл | 1) навык, 2) мастерство игрока |
спелл | заклинание |
статы | параметры героя |
level up | повышение уровня |
Лут — примета не только RPG. Взять Borderlands — игры серии разработчики любовно именуют «лутер-шутерами».
Файтинги:
дэш | рывок |
комбо | непрерывная серия ударов |
мувлист | список приемов |
проджектайл | огненный шар или другой предмет, брошенный с дальней дистанции |
ростер | список бойцов |
спешел | специальная атака |
супер | самая сильная атака бойца |
фаталити | добивание в Mortal Kombat |
В файтингах можно крутить комбо, зубрить спешелы, с наслаждением копаться в ростере и бомбардировать противников проджектайлами в мультиплеере, пока GeForce RTX 2070 Super не задымится. Хотя зачем RTX 2070 Super, хватит и народной GTX 1060 с 6 ГБ памяти. Благо, виртуальные драки нетребовательны к железу.
Железный сленг
К слову о железе! Тут у нас целый пласт геймерского сленга.
бокс, ящик | консоль семейства Xbox |
видяха | видеокарта |
консольщик | тот, кто в основном играет на консолях |
моник | монитор |
пекарь | тот, кто в основном играет на PC |
плойка, сонька | консоль семейства PlayStation |
проц | центральный процессор |
хард | жесткий диск |
А: Старые плойка с ящиком не тянут Cyberpunk 2077.
А: Ждать, пока поляки выпустят версии для PS5 и XSX или менять проц и видяху на компе на что-нибудь поновее!
Чаты, киберспорт, MMO
Общение в чатах распространено в киберспортивных дисциплинах и массовых многопользовательских играх. Также для киберспорта и MMO свойственны стремление обособиться, отделиться от «не своих», как итог — самобытный жаргон чуть ли в не каждой игре. Вот самые популярные фразы и выражения.
дроп | предметы, выбитые из монстров |
гринд | нудная прокачка |
катка | матч |
кулдаун | время для перезарядки умения |
маунт | ездовое животное, транспорт |
моб | рядовой противник |
пати | отряд игроков |
рарный, рарность | редкий предмет |
сет | набор (брони) |
afk (away from keyboard) | отошел, не на связи |
bb (buy buy) | пока-пока |
first blood | первое убийство в матче |
gg (Good game!), гг | комплимент по ходу или по итогу матча |
ggwp (Good game, well played!) | вежливое прощание после матча |
glhf (Good luck, have fun!) | вежливое приветствие перед матчем |
Посмотрите нарезку с финала одного из турниров по League of Legends. Что-нибудь поняли из слов комментатора? А мы ведь предупреждали, что в каждой киберспортивной дисциплине — свой жаргон!
Какие слова из игрового сленга с ходу приходят в голову вам?
Gameplay Ability System: как мы используем плагин для разработки Survival RPG
В Social Quantum сейчас кипит работа над новыми проектами, которые мы разрабатываем на Unreal Engine 4. Для одной из этих игр мы активно используем плагин Gameplay Ability System (далее GAS). Многие о нем слышали, но редко применяли для своих проектов. Этому есть несколько причин: количество документации, объемность и сложность подсистемы. Наша команда решила подготовить серию материалов, где мы подробно расскажем об опыте работы и развеем некоторые мифы.
Для начала разберем самые базовые принципы GAS и основные ее сущности, а также копнем чуть дальше, чем «делаем зелье для пополнения здоровья».
Плюсы и минусы
Плагин GAS до версии 4.22 был в статусе «Unsupported», сейчас это упоминание сменилось на бету-версию. Но практика показывает, что он очень широко используется крупными игроками индустрии, например, в Fortnite.
Несмотря на присутствие слова «Ability» в названии, возможности системы очень широки и использовать ее можно для любых геймплейных взаимодействий, не только в MOBA/MMO играх. Примером тому наш Survival проект, где на базе абилок построены все действия игрока (перекаты, пинки, удары, стрельба, перезарядка, взаимодействие с объектами уровня и т.п.). Основные плюсы, которые вы получаете при использовании этой системы:
Включение GAS
Рестартуем анрил и можно переходить непосредственно к абилкам.
Абилка Ролл
Я старался не рассматривать «простые» абилки и эффекты, которые только и делают, что модифицируют значения аттрибут сета.
Механика затронет некоторые нюансы взаимодействия сущностей, расширения функционала геймплей эффектов и реакций на них. Приступим, но для начала убедимся, что:
Для начала создадим новый класс персонажа, который впоследствии станет базовым для игрока и мобов. Сразу же добавим в него AbilitySystemComponet и реализуем интерфейс AbilitySystemInterface.
Я намеренно буду опускать директивы include для улучшения читаемости.
После завершения, главное не забыть унаследовать сгенерированного темплейт-проектом персонажа от только что созданного класса.
Т.к. мы хотим накладывать на персонажа эффекты и тем самым управлять его скоростью, создаем простенький AttributeSet, который позволит эти значения изменять.
Несколько пугает наличие макросов. Все они объявлены в файле AttributeSet.h. Если вкратце — GAMEPLAYATTRIBUTE_PROPERTY_GETTER добавляет геттер для аттрибута, GAMEPLAYATTRIBUTE_VALUE_GETTER/GAMEPLAYATTRIBUTE_VALUE_SETTER добавляют геттер и сеттер для значения аттрибута. Таким образом мы добавили 2 аттрибута в наш AttributeSet. Это MoveSpeed — скорость бега, Health — здоровье.
Добавим AttributeSet к нашему, только что созданному, классу персонажа:
Теперь свяжем изменения значений AttributeSet с реальной скоростью передвижения персонажа в CharacterMovementComponent.
На данном с c++ пока можно остановиться. Компилируем и открываем проект в UE4. Создаем новый Gameplay Ability Blueprint:
Я назвал свою абилку GA_CharacterRoll.
Добавляем в EventGraph абилки событие CommitExecute. Данный эвент вызывается автоматически при успешном запуске абилки (прошли проверки на Required/Blocked теги, успешно списались косты, применились кулдауны). Следом за ним добавляем геймплей таску PlayMontageAndWait. По эвенту OnCompleted сразу заканчиваем абилку. Таким образом, при запуске скилла мы проиграем монтаж, а по его концу завершим абилку. Для начала неплохо.
Осталась последняя часть — замедлить всех персонажей, которых мы задели в процессе кувырка. Для начала изменим CollisionResponse нашей капсулы для Pawn канала на время действия абилки. По окончанию, разумеется, вернем все назад.
Момент пересечения с другими Pawn будем отслеживать в кастомной GameplayAblityTask.
Для этого вернемся в c++ и напишем чуть-чуть кода:
Статический метод WaitForComponentOverlap создает экземпляр нашей таски. На вход мы принимаем компоненту для которой будем отслеживать Overlap эвенты, затем через функцию NewAbilityTask создаем и инициализируем ее. В методе Activate подписываемся на Overlap эвенты компоненты и по их наступлению вызываем делегат OnOverlap. Стоит обратить внимание, что в аргумент мы отдаем не самого актора, а структуру FGameplayAbilityTargetDataHandle. Это специальная структура, которая указывает на цель, содержит либо акторов либо точку в мире, над которыми необходимо совершить некоторые действия ( в нашем случае — наложить эффект). Т.к. эффекты мы применяем к акторам, используем FGameplayAbilityTargetData_ActorArray и в массив добавляем Overlap актора. В методе OnDestroy отписываемся от всех эвентов на которые подписались.
Возвращаемся в анрил, самое время создать эффект замедления. Создаем новый блюпринт и наследуем его от GameplayEffect класса.
Атомарная сущность которая манипулирует аттрибут сетом и тегами того, на кого накладывается эффект. Стоит разобрать параметры геймлей эффекта более подробно:
Всего бывает 3 вида эффектов: Instant, Infinite, Has Duration. Этим управляет параметр DurationPolicy.
Важно помнить, что все манипуляции с AttributeSet, которые производят Infinite и Has Duration эффекты (для простоты просто Duration эффекты) будут отменены при снятии эффекта.
Так же Duration эффекты могут иметь период. В таком случае они будут применяться раз в указанный период, при этом все изменения что они производят будут трактоваться как Instant эффекты.
Как уже упоминалось ранее, эффекты могут накладывать или снимать теги (Granted Tags), автоматически сниматься при условии наличия тех или иных тегов (RemovalTag Requirements), а также снимать с таргета другие эффекты, которые удовлетворяют условиям Remove Gameplay Effects with Tags или Remove Gameplay Effect Query.
На самом деле это не весь функционал геймплей эффектов, я упустил моменты с GameplayEffectExecutionCalculation, стаками эффектов, переполнением стаков, Immunity тегами, GameplayCue и много другое. Часть из этого будет упомянуто в этой статье дальше, часть будет затронуто в дальнейших статьях.
Возвращаемся в эвент граф абалки GA_CharacterRoll и в самый конец дописываем только что созданную геймплей таску и наложение эффекта:
Я добавил Roll и Kick экшены. Теперь добавим персонажу возможность активировать абилки по наступлению этих событий. Для этого опять вернемся в c++. Первым делом создадим enum который будет описывать действия:
В класс персонажа добавим маппинг экшена на абилити
и в BeginPlay «выдадим» персонажу все абилки, что мы наконфигурировали
Самое интересное — нужно зарегистрировать соответствие между именами Action Mapping и индексами EGASInputActions. Сделать это можно в методе SetupPlayerInputComponent, достаточно добавить туда строку:
Возвращаемся в анрил, открываем блюпринт персонажа и настраиваем для способность GA_CharacterRoll
Вот и все, можно запускать и проверять только что созданную способность.
Абилка пинок
Начнем с создания новой абилки, создаем блюпринт, наследника GameplayAbility. В эвент CommitExecute добавляем таску на проигрывание монтажа и таску ожидания GameplayEvent. Сам по себе GameplayEvent это событие, которое имеет тег и некоторые данные (Payload).
Конкретно в данном случае мы ожидаем эвента Event.Montage.Kick. Давайте напишем код, который этот эвент будет посылать. Для этого создадим новый блюпринт (BP_AnimNotify_SendGameplayEvent) и унаследуем его от AnimNotify. В Variables добавим одну публичную переменную с именем EventTag и типом GameplayTag. Переопределим функцию Received_Notify и отправим наш новый GameplayEvent актору на котором сработал данный нотифай.
Теперь в монтаж пинка можно добавить наш новый нотифай, значение EventTag сделаем равным Event.Montage.Kick:
Продолжим создание абилки. По наступлению GameplayEvent осталось всего-то определить цель и наложить на нее эффект падения. Перейдем к его созданию.
Рассмотрим более комплексный подход к обработке эффектов, когда нам не требуется модификация какого-либо атрибута, однако нужно каким-то гейм-механическим образом реагировать на применение того или иного эффекта. Для этого создадим новый класс эффекта в c++:
Манипулировать будем «силой» пинка, чем она больше, тем дальше отбрасывает нашу цель. В нашем базовом классе персонажа подпишемся на делегат OnGameplayEffectAppliedDelegateToSelf — он вызывается, когда геймплей эффект применяется на овнера AbilitySystemComponent (однако только на сервере, стоит это помнить).
В обработчике проверяем что на нас пытаются наложить knockback эффект, если это так — применяем уже знакомый RootMotionSource в направлении, противоположном
источнику эффекта. Переходим в редактор и создаем блюпринт KnockbackGameplayEffect.
В блюпринте настраиваем силу и длительность эффекта. Осталось проиграть анимацию падения. Для всех «косметических» эффектов (звуки, партиклы, анимации и пр.) в GAS предусмотрена механика GameplayCue. Работает она так же, посредством геймплей тегов, с единственным ограничением: тег должен быть в категории GameplayCue. Добавим новую геймплей кью в наш эффект.
Нажимаем Add new напротив интересующего нас тега (GameplayCue.Knockback) и создаем Gameplay Cue Notify Static обработчик. Переопределяем OnActivate функцию и проигрываем в ней монтаж падения.
Все, на этом эффект падения закончен. Можно добавить код по его активации в блюпринт абилки:
Не буду сильно останавливаться на функции GetTarget. На самом деле, для определения целей в GAS существует отдельная механика (TargetActor), но пока что реализуем этот функционал самым простейшим способом — LineTrace.
Падение мы реализовали. Теперь нужно сделать так, чтобы во время этого наша цель потеряла возможность двигаться. Для этого добавим последний эффект — стан. Создаем новый блюпринт от класса GameplayEffect. Все что он буддет делать — это накладывать на персонажа тег Effect.Stun на нужное количество времени.
Перейдем в c++ и напишем обработчик данного события:
Подписываемся на событие изменения тега Effect.Stun, если количество тегов больше нуля — выключаем всю AI логику у персонажа, если меньше или равно нулю — включаем.
Дело за малым, добавляем применение второго эффекта на цель:
Финальный вид скилла:
Как видите, Gameplay Ability System открывает множество возможностей для разработчиков. В следующем материале мы подробно разберем мультиплеер составляющую GAS и таргетинг.