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

问题描述 投票:0回答:3

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

Input.GetKeyUp(KeyCode.Escape)

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

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

unity3d unity-webgl
3个回答
1
投票

它应该工作,因为

来自Unity Manual webgl input:默认情况下,Unity WebGL将处理发送到页面的所有键盘输入,无论WebGL画布是否具有焦点。

可能是您禁用了WebGLInput.captureAllKeyboardInput(默认情况下已启用)在这种情况下,只需启用它即可。


1
投票

默认情况下,退出按钮用于退出全屏模式,这可能导致问题。我建议使用输入管理器(https://docs.unity3d.com/Manual/class-InputManager.html)并使用Escape作为正按钮定义一个按钮。


1
投票

正如@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.');
    }
});

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

最后一件事是在你加载的Scene中有一个GameObject,它提供了做的功能,无论你想做什么。 请记住,如果您不取消Escape键事件的分发,它将被发送到UnityPlayer,触发它退出全屏模式!而且你可能无法阻止Unity消费这个事件,所以请记住WebGLInput.captureAllKeyboardInput成员。

© www.soinside.com 2019 - 2024. All rights reserved.