icon

TV (адаптация под телевизор)

Для начала ознакомьтесь с первой главой документации Яндекса для игр под TV.
PluginYG покрывает все требования платформы.

Рекомендую для примера демо сцену, которую можно найти внутри папки с модулем TV.

Есть симуляция на ПК, которая работает в Unity Editor и её можно активировать для тестирования в браузере. А еще есть система навигации по кнопкам, которую можно использовать не только для адаптации под TV, но и просто для игры под ПК. Навигация осуществляется с помощью клавиатуры или мыши.

Отслеживание нажатий кнопок на пульте

При нажатии кнопки на пульте — сработает событие onTVKeyDown<string key>. Пример:

using YG;

private void OnEnable()
{
    YG2.onTVKeyDown += OnKeyDown;
}

private void OnDisable()
{
    YG2.onTVKeyDown -= OnKeyDown;
}

private void OnKeyDown(string key)
{
	switch(key)
	{
		case "Left":
			// Была нажата кнопка "стрелка налево"
			break;
		case "Right":
			// Была нажата кнопка "стрелка направо"
		break;
	}
}
Также можно подписаться на событие отжатия кнопки onTVKeyUp<string key>.
События возвращают строку с названием кнопки. Весь список возвращаемых кнопок:
Up
Left
Down
Right
Enter
MediaRewind
MediaPlayPause
MediaFastForward

Кнопка «назад» и выход из игры

Для кнопки назад используется отдельный ивент onTVKeyBack.

Выход из игры осуществляется двойным нажатием на кнопку пульта Back. Так должно быть по правилам Яндекс Игр.
Если нажать на пульте кнопку Back до того как игра загрузится, то выход из игры будет при одном нажатии кнопки.

Для выхода из игры используйте метод ExitTVGame();.

Симуляция

В настройках плагина → General Simulation в опции Device выберите TV.

Для симуляции на сайте в браузере — к ссылке игры добавьте: &payload=tvtest. Должно получиться примерно так: https://yandex.ru/games/app/123456&payload=tvtest

В симуляции следующие кнопки на клавиатуре будут играть роль пульта: ←↑→↓ или WASD, Enter, Backspace.
Отключить управление WASD можно поправив скрипт TVKeyController.

Навигация по кнопкам

Вы можете воспользоваться навигацией от плагина. Плагин в свою очередь использует навигацию Unity. Вы можете настроить её для кнопок в компоненте Button:

В папке модуля Example → Prefabs найдите префаб Menu Navigation. На нём прикреплены компоненты Menu Navigation, Visual Select Button и Cursor Select Button.

Menu Navigation

Главный компонент контролирующий навигацию по кнопкам. Скрипт действует по логике слоёв кнопок. При старте сцены все активные кнопки что есть на сцене добавляются в нулевой слой. При открытии окна/нового меню в игре, кнопки из нулевого слоя перестают быть интерактивными, чтобы на них нельзя было нажать и навести фокус. А кнопки содержащиеся в новом открытом окне — добавляются на новый слой. При закрытии окна, последний слой от этого окна удаляется, а кнопки из предыдущего слоя активируются. При нажатии на кнопку Back последний активный слой закрывается.

Использование системы слоёв

Для открытия и закрытия окна/нового слоя - используются методы OpenWindow(GameObject openLayerObj) и CloseWindow.
Допустим, в игре есть главное меню с кнопками «играть», «настройки» и т.д. Это будет нулевой слой.
На событие клика по кнопке «настройки» повешайте метод OpenWindow и укажите объект, который будет являться новым окном/слоем.
Для закрытия последнего открытого слоя используйте метод CloseWindow.

Дополнительные методы для добавления и удаления одной кнопки из списка слоёв

Методы AddButtonList и RemoveButtonList для добавления и удаления из списка слоёв. В метод необходимо передать ссылку на кнопку. Есть перегрузка, в которой можно указать номер слоя. Если не заполнить, то слой будет нулевым.

Навигация без использования слоёв

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

Если не использовать слои, то выделение мышью будет выделять кнопки только те, что были активными при старте сцены, то есть кнопки нулевого слоя.

Чтобы новые открытые кнопки так же выделялись мышкой без использования слоёв, можно использовать компонент Button Dynamic Select. Подробнее о нём ниже.

Динамические кнопки

Добавьте компонент Button Dynamic Select на объект с кнопкой, которая может динамически появляться и исчезать. При активации такая кнопка будет добавляться в последний из слоёв.

Описание параметров компонента Menu Navigation

  • Us Button — укажите кнопку, на которую будет направлен фокус при старте сцены (необязательно).
  • Exit Game Obj — укажите объект, который будет становиться активным, при нажатии на кнопку Back. Используйте это для открытия меню выхода из игры. Меню выхода откроется, если не открыты другие слои. В ином случае последний открытый слой закроется.
  • Navigation On Desktop — использовать ли навигацию на ПК. В таком случае визуальное выделение кнопки будет только в момент наведения мыши на кнопку. Но если на клавиатуре нажать кнопки навигации, то визуальное выделение останется.
  • Navigation On Mobile — использовать ли навигацию на мобильных устройствах. Визуального выделения не будет, но сохранятся звуки которые вы возможно повесили на события нажатия кнопки.
  • Событие On Back Button — привяжите своё событие вместо активации объекта - меню выхода из игры. Подходит для ситуации, когда открыта сцена — например уровень. И надо выйти из уровня в главное меню, а не из игры.
  • Layers — заполнять не нужно. Показывает слои когда игра запущена.

Остальные компоненты дополнительные, вы можете сделать свои скрипты на их основе.

  • Visual Select Button — визуализирует обводку над кнопкой. Требуется указать спрайт и размер. Также можно указать — будет ли отрисовка на ПК или мобильных устройствах.
  • Cursor Select Button — выделяет кнопки при наведении на них мышкой. У данного компонента есть Unity Events для привязки своих событий. Например, вы можете проигрывать звук при наведении и нажатии.