使用unity3d WEB GL构建转义输入键

时间:2017-03-15 00:45:51

标签: unity3d unity-webgl

我创建WEB GL游戏。游戏菜单由以下代码显示:

Input.GetKeyUp(KeyCode.Escape)

它在团结和windows构建中工作正常。在浏览器中,浏览器拦截了转义按钮,并且不显示菜单。

是否可以使此代码在WEB GL构建中运行?什么是标准" meny按钮"用于WEB GL游戏?

3 个答案:

答案 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.');
    }
});

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-interactingwithbrowserscripting.html

最后一件事是在加载的场景中有一个GameObject,该GameObject提供执行功能,无论您要执行什么操作。
简而言之,如果您不取消Escape键事件的分发,它将被发送到UnityPlayer,触发它退出全屏模式! 您可能还是无法阻止Unity使用此事件,因此请记住WebGLInput.captureAllKeyboardInput成员。