Unity Web 支持来自各种设备的不同类型的输入,包括游戏手柄、操纵杆、触摸屏、键盘和运动传感器。
Web 支持以下游戏手柄输入
Web 还支持支持 HTML5 游戏手柄 API 的浏览器的操纵杆。
某些浏览器仅在应用程序处于焦点状态时用户与设备交互后才允许访问输入设备。这种类型的安全措施可防止用户将连接的设备用于浏览器指纹识别目的。因此,请确保您的应用程序指示用户在调用 Input.GetJoystickNames() 以检查已连接的设备之前按下游戏手柄/操纵杆上的按钮。
Web 游戏控制器用于控制游戏中的物体和角色的设备。
查看 词汇表 针对旧输入系统的映射与 W3 规范 一致,其中按钮映射布局如下所示
按钮 | 描述 |
---|---|
buttons[0] | 右侧集群中的底部按钮 = CROSS (X) |
buttons[1] | 右侧集群中的右侧按钮 = CIRCLE |
buttons[2] | 右侧集群中的左侧按钮 = SQUARE |
buttons[3] | 右侧集群中的顶部按钮 = TRIANGLE |
注意:由于 Web 遵循 W3 规范,它可能与其他平台不一致,如果您同时针对多个平台(例如 Windows 和 Web),则需要采用不同的方法。有关更多信息,请参阅关于 重新映射 的 W3 文档。
Unity Web 在支持触摸的浏览器和设备中实现 Input.touches 和其他相关 API。默认情况下,移动设备会在触摸屏上显示一个软键盘,供用户在 UI(用户界面) 允许用户与您的应用程序交互。Unity 目前支持三种 UI 系统。 更多信息
查看 词汇表 输入字段中输入文本。要禁用此行为,请使用 WebGLInput.mobileKeyboardSupport 属性。
默认情况下,Unity Web 处理 Web 页面接收的所有键盘输入,无论 Web 画布是否具有焦点。这允许用户使用基于键盘的应用程序,而无需点击 Web 画布。
以下说明适用于特定键盘输入,如下所述
键盘输入行为 | 描述 |
---|---|
HTML 元素(例如文本字段) | 如果您在旨在接收键盘输入的网页中引入 HTML 元素(例如文本字段),则可能会导致错误。Unity 会在页面其余部分接收输入事件之前使用这些事件。 要使 HTML 元素接收键盘输入,请将 WebGLInput.captureAllKeyboardInput 设置为 false 。这样,只有在 Web 画布具有焦点时,应用程序才会接收输入。 |
Esc 键 | 某些浏览器(如 Safari)会阻止使用 Esc 键切换到全屏模式,因为 Esc 键在 Web 环境中受到保护。其他浏览器(如 Google Chrome)的行为可能不可预测。当浏览器处于全屏模式时,用户只能使用 Esc 键退出全屏模式。根据浏览器类型,点击 Esc 键可能并不总是触发从浏览器转发到应用程序的事件。 |
HideMobileInput |
HideMobileInput 选项在 TextMeshPro (也称为 TMP)输入字段中对 Web 平台没有影响。此选项没有影响,因为您需要一个 文本输入字段允许用户输入文本字符串的字段 更多信息查看 词汇表 来触发浏览器中的虚拟键盘。当 Unity 播放器需要文本输入时,Web 平台会实例化一个文本输入字段来触发虚拟键盘。文本输入字段会出现在虚拟键盘上方,类似于其他平台。由于虚拟键盘依赖于移动文本输入字段,因此它无法在 Web 平台上隐藏显示。 |
对于支持触摸的浏览器和移动设备,Unity Web 包括对以下传感器的支持
重要:浏览器仅在安全上下文中允许传感器输入,这意味着您必须通过 HTTPS 提供页面。唯一的例外是 http://localhost
,您可以在开发期间使用它。
Unity Web 平台支持光标锁定,它使用 HTML5 API Element.requestPointerLock
。使用光标锁定将鼠标光标锁定到游戏窗口的中心。当光标被锁定后,它在 Unity 中显示为隐藏,并且当鼠标移动时不会移动。这对于第一人称游戏尤其有用,在第一人称游戏中,鼠标光标通常用于控制玩家视角的方向。
注意:由于浏览器对光标锁定的支持各不相同,请参阅 Mozilla 关于 Element: requestPointerLock() 方法 的文档。
要锁定光标,请使用 Cursor.lockState
属性。例如,以下代码会在用户点击鼠标左键时将光标切换到锁定状态
void Update()
{
if (Input.GetMouseButtonDown(0))
{
Cursor.lockState = CursorLockMode.Locked;
}
}
光标锁定需要通过用户交互来激活。有关更多信息,请参阅 全屏模式和光标锁定的其他注意事项。
按 Esc 键解锁光标。
stickyCursorLock
属性通常用于第一人称游戏,因为它对于无论浏览器行为如何都保持光标锁定模式非常有用。
使用 stickyCursorLock
确保 Cursor.lockState
的状态是持久的,即使浏览器从 Unity 画布(通常使用 Esc 键)释放光标锁定也是如此,在这种情况下,光标在下次画布处于焦点时再次被锁定。
因此,如果您将 WebGLInput._stickyCursorLock
设置为 true
,则即使 Unity 画布 HTML 元素解锁光标,Cursor.lockState
也会保持在 CursorLockMode.Locked
状态。
如果您将 WebGLInput._stickyCursorLock
设置为 false
,则会发生以下情况
Cursor.lockState
与浏览器的光标锁定状态保持同步。
如果用户按 Esc 键取消画布光标锁定,则 Cursor.lockState
会更改为 CursorLockMode.None
。
注意:在 Web 中,stickyCursorLock
默认设置为 true
。
在您的游戏中使用全屏模式以执行以下操作
为您的游戏使用整个屏幕。
隐藏浏览器用户界面 (UI) 元素,例如地址栏和选项卡。
隐藏 Unity 播放器 UI 元素,例如标题栏和 工具栏Unity 编辑器顶部的按钮和基本控件行,允许您以各种方式与编辑器交互(例如缩放、平移)。 更多信息
查看 词汇表。
Unity Web 平台支持使用 HTML5 API Element.requestFullscreen
的全屏模式。
注意:由于浏览器对全屏模式的支持各不相同,请参阅 Mozilla 关于 Element: requestFullscreen() 方法 的文档。
要启用全屏模式,请使用 Screen.fullScreen
属性。例如,以下代码会在用户按 F 键时将游戏切换到全屏模式
void Update()
{
if (Input.GetKeyDown(KeyCode.F))
{
Screen.fullScreen = true;
}
}
注意:Screen.fullScreen
属性默认设置为 false
。
全屏模式需要通过用户交互来激活。有关更多信息,请参阅 全屏模式和光标锁定的其他注意事项。
要退出全屏模式,请再次按 Esc 键,或将鼠标指针悬停在屏幕顶部以访问地址栏和选项卡。
出于安全考虑,浏览器只允许您在用户发起的事件(例如鼠标点击或按键)后锁定光标和启用全屏模式。
由于 Unity 不支持独立的事件和渲染循环,因此它会延迟事件处理,直到浏览器不再承认从 Unity 脚本直接响应触发它的事件发出的全屏或光标锁定请求。
因此,Unity 会在下一个用户发起的事件(而不是触发光标锁定或全屏请求的事件)时触发请求。
要以更好的结果启用光标锁定或全屏模式,请使用鼠标/按键按下事件来触发响应,而不是使用鼠标/按键抬起事件。这样,您可以确保延迟请求会通过相应的鼠标/按键抬起事件(如果没有更早的用户发起的事件)来触发。
您还可以使用 Unity 的 UI.Button 组件来实现所需的行為,方法是创建 Button
的子类,并覆盖 OnPointerDown
方法。
注意:某些浏览器可能会显示通知消息或提示用户在进入全屏模式或锁定光标之前授予权限。