使用Unity3D Web GL构建逃脱输入密钥



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成员。

最新更新