-
Notifications
You must be signed in to change notification settings - Fork 0
Home
Базовый набор для создания туториалов в игре по сути представляет собой надстройку над Менеджером хранения данных и обеспечивает низкоуровневые базовые функции для отображения и сохранения состояния страниц туториала.
Данный набор не предназначен для туториалов со сценарием. Подразумевается, что компонент, нуждающийся в пояснении, сам при своей инициализации пытается открыть туториал. Если туториал уже открывался и был завершен, то действие будет прервано и компонент продолжит свое нормальное исполнение. Таким образом каждый туториал имеет уникальную реализацию для компонента, последовательность появления туториалов зависит только от внутриигровой логики и никак не регламентируется менеджером.
Интерфейс менеджера. Главный метод bool SetCurrentPage(ITutorialPage)
должен вызываться компонентом в момент инициализации. Метод принимает страницу туториала (см. ниже) и возвращает true
, если страница туториала будет отображена, или false
, если страница по какой-либо причине не отображается (туториал уже был показан или произошел технический сбой при загрузке).
Остальные методы интерфейса носят вспомогательный характер, и позволяют отследить текущее состояние: отображается ли в данное время туториал, идентификатор отображаемой страницы страницы.
Интерфейс страницы туториала. Не следует путать страницу туториала с экземпляром страницы туториала. Страница туториала несет в себе служебную идентификационную информацию (Id), метод для инстанцирования экземпляра страницы и событие завершения страницы туториала.
Страница туториала является более низкоуровневой абстракцией, нежели экземпляр страницы. Это обусловлено тем, что менеджер может отменить показ страницы туториала, причем это будет происходить в абсолютном большинстве случаев. Поэтому инстанцирование экземпляра страницы, подразумевающее загрузку ресурсов и ряд других действий, выделено в отдельный метод, который вызывается только в момент показа страницы туториала. Если страница не открывается, то вызов bool SetCurrentPage(ITutorialPage)
сводится к проверке булевого флага.
Если менеджер решает отобразить страницу туториала, он вызывает ее метод bool InstantiatePage(Transform, Action<GameObject>)
. Если метод возвращает true
, это означает, что страница будет создана. В этом случае ввод/вывод должен быть заблокирован, чтобы пользователь не имел возможности произвести какие-либо действия до показа страницы. Поскольку показ страницы туториала может быть сопряжен с задержкой на загрузку дополнительных ресурсов, метод сообщает о завершении инстанцирования через коллбек, в который возвращается экземпляр страницы.
Если bool InstantiatePage(Transform, Action<GameObject>)
возвращает true
, Менеджер начинает отслеживать событие CloseTutorialPageEvent
страницы, чтобы отследить ее завершение. Решение о завершении страницы, как правило, возлагается на экземпляр страницы туториала. В событие CloseTutorialPageEvent
передается флаг. Если флаг установлен, это означает, что страница завершилась и больше не должна отображаться, в противном случае требуется просто закрыть страницу, она будет повторно показана при последующем вызове bool SetCurrentPage(ITutorialPage)
.
Для отключения туториала достаточно задать в настройках проекта переменную среды DISABLE_TUTORIAL
.
В дополнение к базовому набору присутствует графический компонент FrameImage
, позволяющий создавать затенения с "окошками" для высветления участков сцены. Компонент представляет собой UI, похожий на Image, но разделенный на девять прямоугольных полигональных областей. Компоненту задается текстура, созданная таким образом, чтобы иметь в середине окно нужной формы.
FrameImage
имеет поля FrameXMin
, FrameXMax
, FrameyMin
, FrameYMax
, позволяющие задавать границы "окна". Геометрия компонента перестраивается таким образом, чтобы центральный прямоугольный фрагмент соответствовал этим границам.
К недостаткам компонента относится практическая невозможность создания окна, чьи границы выходят за пределы компонента.