Глава 20. Спецэффекты
За всё это время мы сделали много интересных вещей: от сбора предметов и убийств мобов до анимаций и спавна Арагога, но, кажется, чего-то не хватает. Какой-то изюминки.
Нам все время не хватало спецэффектов. Экран темнеет, Волшебник/Алхимик телепортируются, Журнал мигает, уведомляя о новом задании
В этой Главе мы научимся работе с тремя инстврументами:
<fade/>– Плавная заливка экрана каким-то цветом<teleport/>– Удаление NPC с эффектом телепортации. Только для Алхимика/Волшебника, остальные NPC просто исчезнут без эффекта<attention/>– Моргание иконки Журнала
В финале мы из всего этого до конца добьем квест Аарона (WarriorFirstQuest.xml – «Маленькая Проблемка»)
Шаг 1. Плавная заливка экрана <fade/>
Тег <fade/> плавно заливает экран каким-то цветов, затем держит заливку нужно время, а затем постепенно убирает ее. В официальных квестах он используется в стартовом квесте Tutorial, когда игрко только заходит в игру с нового персонажа и в конце перед Битвой с Повелителем Драконов. Мы же можем использовать его где нам угодно
<fade start="3" delay="1.5" reverse="1"><color name="white"/></fade>
Где:
Атрибуты
start– За сколько секунд залить экран цветомdelay– Сколько секунд держать заливкуreverse– За сколько секунд убрать заливку
Тег
<color/>– Цвет. Можно в форматеr="0.0"g="0.0"b="0.0"a="0.0"(от 0.0 до 1.0) илиname="ИмяЦвета"(см. GigaList)
Тег <fade/> ставьтся внутрь шага на уровень с текстовыми блоками, иконками и так далее. Отрабатывает он сразу же, когда игрок переходит на его шаг
Шаг 2. Удаление NPC с эффектом телепортации <teleport />
Данный тег удаляет NPC, с которым разговаривает игрок. Если это Волшебник или Алхимик, то они исчезнут с эффектом телепортации, все остальные — просто моментально пропадут без эффекта
Этот тег используется только внутри опций (кнопки и авто).
Пример:
<option to="#close" text="ОК"><teleport/></option>
Шаг 3. Моргание иконки Журнала <attention/>
Заставляет иконку «Журнала Квестов» моргать красным

Этот тег тоже используется только внутри <option>.
Пример:
<option to="#close" text="ОК"><attention/></option>
Шаг 4. Добавляем спецэффекты в Квест
Теперь применим всё это на практике. В квесте от Аарона (WarriorFirstQuest.xml – «Маленькая Проблемка») в шаг battle_aragog_step в самый верх добавим <fade/> со следующими значениями атрибутов и белым цветом:
<step id="battle_aragog_step"><fade start="3" delay="1.5" reverse="1"><color name="white"/></fade>. . .</step>
Как видите, у нас сначала проноситься надпись «АРАГОГ УЖЕ ЗДЕСЬ», а затем экран заливается белым, скрывая момент появления Арагога.
В шаг after_aragog_step в квесте Аарона добавим тег <attention/>, чтобы после убийства Арагога начинал моргать Журнал, намекая игроку, что туда надо заглянуть
<step id="after_aragog_step"><desc>Пока, и ещё раз спасибо за помощь</desc><option to="#close" text="Ок"><spawnmobs value="true"/><attention/></option>. . .</step>
Задания на закрепление
- Сделайте простой квест, где Алхимик сначал дает игроку задание, а затем телепортируется, после чего иконка Журнала начинает мигать
- Добавьте
<attention/>и<teleport/>в задания квеста от Волшебника (MyQuest.xml– «Основной Квест»), добавьте туда<fade/>если посчитаете нужным
Заключение
В этой небольшой Главе мы научились трем простым интсрументам. Не смотря на их простоту, они способны добавить немного кинематогрофичности в ваши квесты. Например, какие-то переходы в новые сюжетные Акты, спавн мобов или вспышки во время битвы. В общем, возможных сфер применения вагон и маленькая тележка
Итоговый код Главы
(WarriorFirstQuest.xml – «Маленькая Проблемка»)
<?xml version="1.0" encoding="UTF-8"?><quest npc="Warrior" title="Маленькая Проблемка"><complete quest="Основной Квест" step="go_to_warrior_step" /><step id="#start"><desc>Привет, Наездник Дракона. Полагаю, тебя послал Волшебник. \nЧтож у меня есть для тебя небольшое заданьеце</desc><option to="small_problem_step" text="?"><journal /></option></step><step id="small_problem_step"><desc>Видишь ли, у меня тут появилась небольшая проблемка. Говорят, что на дне земных провалов на тамошних деревьях растут самые вкусные яблочки. Я бы и рад туда спуститься, но там сидит огромный паук – Арагог. \nЯ, понимаешь ли, даже мелких паучков страшусь, а тут аж огромный Паучище\nВ общем, не мог бы ты мне немножко подсобить с этой маленькой проблемкой? Я готов немно...</desc><rewards type="Display"><reward exp="500"/><reward item="Gold Coin" count="30"/></rewards><option to="before_aragog_step" text="Да"/></step><step id="before_aragog_step"><desc></desc><label>[FF0000]А-А-А-А! ОН УЖЕ ЗДЕСЬ![-]\n\nКто не спрятался — я не виноват!</label><option to="battle_aragog_step" text="!!!"/></step><step id="battle_aragog_step"><fade>
<color name="white"/>
</fade>
<info><label>Убей [FF0000]Арагога[-]</label><kill enemy="GiantSpider" count="1"/></info><label location="HUD">[FF0000]АРАГОГ УЖЕ ЗДЕСЬ![-]<persist /><lerp loop="false" reverse="false" speed="2" start="0" wait="0"><from><scale x="50" y="50"/><position x="-1300" y="0"/><rotation angle="0"/></from><to><scale x="50" y="50"/><position x="1300" y="0"/><rotation angle="0"/></to></lerp></label><option auto="#close"><clearmobs/><spawnmobs value="false"/><spawn mob="GiantSpider" distance="3"/></option><option auto="after_battle_aragog_step"><kill enemy="GiantSpider" count="1"/><spawn mob="Warrior" distance="5" /></option><option auto="battle_aragog_step" start="3"><delay sec="3" /><existmobs name="GiantSpider"><inverse/></existmobs></option></step><step id="after_battle_aragog_step"><desc>Да ты мне жизнь спас! Так ещё я смогу насладиться тамошними яблочками в провалах!\nДержи, ты заслужил</desc><option to="after_aragog_step" text="Ок"/><rewards type="Award"><reward exp="500"/><reward item="Gold Coin" count="30"/></rewards></step><step id="after_aragog_step"><desc>Пока, и ещё раз спасибо за помощь</desc><option to="#close" text="Ок"><spawnmobs value="true"/><attention/></option><info><label>Иди к Волшебнику и проверь, есть ли у него задания</label></info><option auto="before_find_bed_step"><complete quest="Основной Квест" step="after_pig_go_warrior"/></option></step><step id="before_find_bed_step"><desc>Слу-у-ушай...</desc><option to="find_bed_step" text="Ок"/></step><removestep id="find_bed_step"><intro>Можешь найти мне кровать? Да, обычную кровать. Моя что-то в совсем уж печально состоянии</intro><desc>Так ты найдешь кровать?</desc><finish>Спасибо, Наездник Дракона. Эта кровать мне очень пригодиться</finish><remove item="Bed" count="1"/><rewards><reward exp="777"/></rewards><option to="#end" text="Ок"/></removestep><step id="#end"><desc>Ну а теперь пока, Наездник Дракона. Был рад повидаться.\nИди к Волшебнику, может, у него есть какое-то задание для тебя</desc><option to="#close" text="Пока"/></step></quest>
Отличный гайд, но осталось несколько вопросов:
1) Куда делся раздел с кастомным магазином из прошлой версии руководства. В 13.5.0? Его больше нельзя кастомизировать?
2) У Фуза в 13.5.0 есть свой магазин, следовательно, они тоже стали квестовыми НПС и для них можно делать кастомные квесты. Или нельзя?
1) Кастомные магазины полностью убраны (даже для Алхимика, Фуза и Крестьян). Теперь игра не будет подгружать квесты, содержащие в коде тег <store>
В логах будет писать:
Skipped custom quest ‘ИмяКвеста’ from file [Путь до XML-файла квеста]: NPC stores are not allowed in custom quests
UnityEngine.DebugLogHandler:Internal_Log(LogType, LogOption, String, Object)
UnityEngine.Logger:Log(LogType, Object)
UnityEngine.Debug:LogWarning(Object)
QuestManager:AddUserQuests(XmlSerializer, String)
d__77:MoveNext()
UnityEngine.SetupCoroutine:InvokeMoveNext(IEnumerator, IntPtr)
2) Да, для Фуза можно теперь тоже делать квесты. Список Квестовых NPC только что обновил, просто изначально забыл добавить
Из нюансов: У них пока что нет своего портрета, поэтому будет видно просто имя