Unity 6.3
0 онлайн 17 гостей 3 в системе
Вход

Ввод в Web

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

Поддержка геймпада и джойстика

Веб поддерживает следующие входы для геймпада:

Веб также поддерживает джойстики для браузеров, которые поддерживают HTML5 Gamepad API.

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

Сопоставление контроллера

Отображение веб-контроллера игры для старой системы ввода соответствует спецификации W3, где расположение отображения кнопок расположено следующим образом:

Кнопки Описание
кнопки[0] Нижняя кнопка в правом кластере = CROSS (X)
кнопки[1] Правая кнопка в правом кластере = CIRCLE
кнопки[2] Левая кнопка в правом кластере = SQUARE
кнопки[3] Верхняя кнопка в правом кластере = TRIANGLE

Примечание:, поскольку Web соответствует спецификации W3, может быть несовместим с другими платформами, и требует иного подхода, если вы нацеливаетесь на несколько платформ одновременно, таких как Windows и Web. Дополнительные сведения см. в документации W3 по Remapping.

Сенсорная поддержка

Unity Web реализует ,Input.touches, и другие связанные APIs в браузерах и устройствах с поддержкой сенсорных экранов. По умолчанию мобильные устройства отображают на сенсорном экране клавиатуру для ввода текста в поля ввода UI. Чтобы отключить это поведение, используйте свойство ,WebGLInput.mobileKeyboardSupport,.

Ввод данных с клавиатуры и обработка фокуса

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

Следующие примечания относятся к конкретным вводам с клавиатуры, как описано ниже:

Поведение ввода с клавиатуры Описание
HTML элементы (например, текстовые поля) Если вы добавите элементы HTML (например, текстовые поля) на веб-страницу, предназначенную для получения ввода с клавиатуры, это может привести к ошибкам. Unity потребляет события ввода, прежде чем остальная часть страницы сможет их получить.
Чтобы элементы HTML получали ввод с клавиатуры, установите WebGLInput.captureAllKeyboardInput на false. Таким образом, приложение получает ввод только в том случае, если Web Canvas имеет фокус.
Эскорт клавиша Некоторые браузеры, такие как Safari, блокируют возможность использования Эскорт клавишу, чтобы переключиться на полноэкранный режим, потому что Эскорт клавиша защищена в веб-среде. Другие браузеры, например Google Chrome, могут вести себя непредсказуемо. Когда браузер находится в полноэкранном режиме, пользователю доступна только клавиша Эскорт В зависимости от типа вашего браузера, нажатие на кнопку Эскорт ключ может не всегда вызывать событие для пересылки из браузера в приложение.
HideMobileInput HideMobileInput вариант в TextMeshPro (также известного как TMP) не действует на веб-платформе. Этот параметр не влияет ни на что, потому что в браузерах виртуальную клавиатуру вызывает именно текстовое поле ввода. Веб-платформа создаёт текстовое поле ввода, чтобы вызвать виртуальную клавиатуру, когда плеер Unity ожидает ввода текста. Поле ввода появляется над виртуальной клавиатурой, как и на других платформах. Поскольку виртуальная клавиатура зависит от мобильного поля ввода текста, скрытой на веб-платформе она быть не может.

Поддержка мобильных датчиков

Для браузеров и мобильных устройств с поддержкой сенсорных экранов Unity Web включает поддержку следующих сенсоров:

Важно: Браузеры разрешают ввод данных сенсоров только в безопасных контекстах, что означает, что вы должны обслуживать страницу через HTTPS. Единственным исключением является http://localhost, который вы можете использовать во время разработки.

Поддержка блокировки курсора

Веб-платформа Unity поддерживает блокировку курсора, которая использует HTML5 API Element.requestPointerLock. Используйте блокировку курсора, чтобы заблокировать курсор мыши в центре игрового окна. Когда курсор заблокирован, он скрывается в Unity и не перемещается при движении мыши. Это особенно полезно для игр от первого лица, где курсор мыши обычно используется для управления ориентацией угла игрока.

Примечание: Поскольку поддержка блокировки курсора в браузерах варьируется, ознакомьтесь с документацией Mozilla по Элемент: requestPointerLock() метод.

Активировать блокировку курсора

Чтобы заблокировать курсор, используйте свойства Cursor.lockState. Например, следующий код переводит курсор в заблокированное состояние при нажатии пользователем левой кнопки мыши:

void Update()
{
    if (Input.GetMouseButtonDown(0))
    {
        Cursor.lockState = CursorLockMode.Locked;
    }
}

Блокировка курсора должна быть активирована взаимодействием пользователя. Дополнительные сведения см. в Дополнительные соображения по полноэкранному режиму и блокировке курсора.

Отключить блокировку курсора

Нажмите Эскорт, чтобы разблокировать курсор.

Блокировка курсора

Свойство stickyCursorLock обычно используется в играх от первого лица, поскольку оно полезно для поддержания режима блокировки курсора независимо от поведения браузера.

Используйте stickyCursorLock чтобы гарантировать, что состояние Cursor.lockState оставался постоянным, даже если браузер снимает блокировку курсора с холста Unity (обычно с помощью клавиши Эскорт), в этом случае курсор снова блокируется при следующем фокусировании холста.

Поэтому, если задать для WebGLInput._stickyCursorLock значение true, объект Cursor.lockState останется в состоянии CursorLockMode.Locked, даже если HTML-элемент холста Unity разблокирует курсор.

Если вы установите WebGLInput._stickyCursorLock на false, то произойдет следующее:

  • Cursor.lockState остаётся синхронизированным с состоянием блокировки курсора в браузере.

  • Если пользователь нажмет Эскорт для отмены блокировки курсора, то Cursor.lockState изменится на CursorLockMode.None.

Примечание: В Веб, stickyCursorLock по умолчанию установлен на true.

Полноэкранный режим

Используйте полноэкранный режим в игре для выполнения следующих действий:

  • Используйте весь экран для игры.

  • Скрыть элементы интерфейса браузера — адресную строку, вкладки и т. п.

  • Скрыть элементы Unity player UI, такие как заголовок и панель инструментов.

Веб-платформа Unity поддерживает полноэкранный режим, который использует HTML5 API, Element.requestFullscreen.

Примечание: Поскольку поддержка браузера для полноэкранного режима варьируется, обратитесь к документации Mozilla по Элемент: requestFullscreen() метод.

Активация полноэкранного режима в Веб

Чтобы включить полноэкранный режим, используйте свойство Screen.fullScreen. Например, следующий код переключает игру в полноэкранный режим, когда пользователь нажимает клавишу F:

void Update()
{
    if (Input.GetKeyDown(KeyCode.F))
    {
        Screen.fullScreen = true;
    }
}

Примечание: Свойство Screen.fullScreen по умолчанию имеет значение false.

Полноэкранный режим должен активироваться взаимодействием пользователя. Для получения дополнительной информации см. Дополнительные соображения по полноэкранному режиму и блокировке курсора.

Выход из полноэкранного режима

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

Дополнительные соображения для полноэкранного режима и блокировки курсора

По соображениям безопасности браузеры позволяют блокировать курсор и включать полноэкранный режим только после инициированного пользователем события, такого как щелчок мыши или нажатие клавиши.

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

Поэтому Unity вызывает запрос при следующем событии, инициированном пользователем, вместо события, вызвавшего блокировку курсора или запрос полноэкранного режима.

Чтобы включить блокировку курсора или полноэкранные режимы с лучшими результатами, используйте события mouse/key down для запуска ответов вместо событий mouse/key up. Таким образом вы можете гарантировать, что отложенный запрос будет запущен соответствующим событием mouse/key up, если не событием, инициированным пользователем ранее.

Для реализации требуемого поведения также можно использовать компонент UI.Button в Unity: создайте подкласс Button, который переопределяет метод OnPointerDown.

Примечание: Некоторые браузеры могут отображать сообщение об уведомлении или просить пользователя предоставить разрешение, прежде чем он сможет перейти в полноэкранный режим или заблокировать курсор.

Дополнительные ресурсы