我创建WEB GL游戏。游戏菜单由以下代码显示:
Input.GetKeyUp(KeyCode.Escape)
它在团结和windows构建中工作正常。在浏览器中,浏览器拦截了转义按钮,并且不显示菜单。
是否可以使此代码在WEB GL构建中运行?什么是标准" meny按钮"用于WEB GL游戏?
答案 0 :(得分:1)
它应该有效,因为
来自Unity Manual webgl input:默认情况下,无论WebGL画布是否具有焦点,Unity WebGL都会处理发送到页面的所有键盘输入。
可能是您已禁用WebGLInput.captureAllKeyboardInput
(默认情况下已启用)在这种情况下,只需启用它即可。
答案 1 :(得分:1)
默认情况下,退出按钮用于退出全屏模式,这可能导致问题。我建议使用输入管理器(https://docs.unity3d.com/Manual/class-InputManager.html)并使用Escape定义一个按钮作为肯定按钮。
答案 2 :(得分:1)
如@pasotee所述,Escape键可能已经被使用。浏览器以及Unity Player都可以使用,例如Chrome使用F1键打开“帮助”选项卡。 Unity Player肯定使用Escape退出其全屏模式。
所以简短的答案是。不,你不能。
默认情况下,True会监听所有键,这是真的,但当上层应用程序(例如浏览器)未将其发送到Canvas或执行环境时,Unity永远不会获取事件-又名Unity3d Player不会将其发送到您的代码。或者,在这种情况下,他们应该将手册真正修复为“ [..]除Escape和与浏览器相关的热键之外的所有按钮”:
https://docs.unity3d.com/Manual/webgl-input.html
长答案是,您可能会拦截JavaScript中的'Escape'键事件,并将函数调用传递到Unity Player中,如下所述:
jQuery
$(document).on('keyup',function(evt) {
if (evt.keyCode == 27) {
alert('Esc key pressed.');
}
});
香草JS
var msg = document.getElementById('state-msg');
document.body.addEventListener('keypress', function(e) {
if(e.key == "Escape"){
msg.textContent += 'Escape pressed:'
}
});
https://jsfiddle.net/etcjwaf5/
最后,您将需要此信息,以从Javascript调用Unity:
SendMessage('MyGameObject', 'MyFunction');
SendMessage('MyGameObject', 'MyFunction', 5);
SendMessage('MyGameObject', 'MyFunction', 'MyString');
https://docs.unity3d.com/Manual/webgl-interactingwithbrowserscripting.html
最后一件事是在加载的场景中有一个GameObject,该GameObject提供执行功能,无论您要执行什么操作。
简而言之,如果您不取消Escape键事件的分发,它将被发送到UnityPlayer,触发它退出全屏模式! 您可能还是无法阻止Unity使用此事件,因此请记住WebGLInput.captureAllKeyboardInput
成员。