i创建Web GL游戏。游戏菜单由以下代码显示:
Input.GetKeyUp(KeyCode.Escape)
它在Unity和Windows构建中都可以正常工作。在浏览器中,Escape按下浏览器截获,并且未显示菜单。
是否可以使此代码在Web GL构建中起作用?网络GL游戏的Standart" Meny Button"是什么?
它应该起作用,因为
来自Unity手册WebGL输入:默认情况下,Unity WebGL将处理所有键盘输入,无论WebGL帆布是否有重点。
可能是您禁用WebGLInput.captureAllKeyboardInput
(默认情况下是启用)在这种情况下,它可以启用它并且应该起作用。
默认情况下使用逃生按钮来退出全屏模式,也许是导致问题的。我建议使用输入管理器(https://docs.unity3d.com/manual/class-inputmanager.html),并使用Escape定义一个按钮。
正如@pasotee所述,逃生密钥可以消耗。由浏览器以及Unity Player撰写,例如Chrome使用F1键打开"帮助"选项卡。Unity Player绝对使用逃生来退出其全屏模式。
所以简短的答案是。不,你不能。
Unity默认情况下正在聆听所有密钥,是的,但是当浏览器(例如浏览器)不会将其发送到画布或执行环境时,从未得到事件您的代码。或在这种情况下,他们应该真正将手册修复到" [..]所有按钮,除了逃生和浏览器相关的hotkeys除外》:
https://docs.unity3d.com/manual/webgl-input.html
长答案是,您可以在JavaScript中拦截"逃生"键事件,然后将功能调用传递到此处提到的统一播放器中:
jQuery
$(document).on('keyup',function(evt) {
if (evt.keyCode == 27) {
alert('Esc key pressed.');
}
});
https://jsfiddle.net/mqhva/1/
香草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-interactingwithbrowserserscripting.html
,最后一件事是在加载的场景中拥有一个游戏对象,该场景提供了用于执行的功能,无论您想做什么。
毫无疑问,如果您不取消逃生密钥事件的分布,它将发送到触发其退出全屏模式的Unityplayer!,您可能无法防止Unity无论如何都无法消费此事件,请记住WebGLInput.captureAllKeyboardInput
成员。