我创建了WEB GL游戏。游戏菜单由以下代码显示:
Input.GetKeyUp(KeyCode.Escape)
它在团结和windows构建中工作得很好。在浏览器中,浏览器拦截了转义按钮,并且不显示菜单。
是否可以使此代码在WEB GL构建中运行?什么是WEB GL游戏的标准“meny按钮”?
它应该工作,因为
来自Unity Manual webgl input:默认情况下,Unity WebGL将处理发送到页面的所有键盘输入,无论WebGL画布是否具有焦点。
可能是您禁用了WebGLInput.captureAllKeyboardInput
(默认情况下已启用)在这种情况下,只需启用它即可。
默认情况下,退出按钮用于退出全屏模式,这可能导致问题。我建议使用输入管理器(https://docs.unity3d.com/Manual/class-InputManager.html)并使用Escape作为正按钮定义一个按钮。
正如@pasotee所提到的,Escape键可能已经消耗掉了。通过浏览器以及Unity播放器,例如,Chrome使用F1键打开“帮助”选项卡。 Unity播放器肯定使用Escape退出其全屏模式。
所以简短的回答是。不,你不能。 默认情况下,Unity正在侦听所有键,true,但是当上层应用程序(如浏览器)不将其发送到Canvas或执行环境时,它永远不会获取事件 - 也就是说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
最后一件事是在你加载的Scene中有一个GameObject,它提供了做的功能,无论你想做什么。
请记住,如果您不取消Escape键事件的分发,它将被发送到UnityPlayer,触发它退出全屏模式!而且你可能无法阻止Unity消费这个事件,所以请记住WebGLInput.captureAllKeyboardInput
成员。