Unity WebGL-预防<;帆布>;从吃掉所有鼠标/键盘输入?(HTML输入字段)

Unity WebGL-预防<;帆布>;从吃掉所有鼠标/键盘输入?(HTML输入字段),html,unity3d,input,unity-webgl,Html,Unity3d,Input,Unity Webgl,统一5.4 构建一个Unity WebGL应用程序(不是游戏),它处理Unity方面的所有3D内容,所有UI都是使用HTML/CSS/JS构建的。默认情况下,WebGLInput.captureAllKeyboardInput设置为true,这会导致需要键盘(文本)输入的任何输入字段被破坏,因为任何键盘控件都会自动被Unity占用,而不是转到输入字段。做 #if !UNITY_EDITOR && UNITY_WEBGL WebGLInput.captureAllKeyboardI

统一5.4

构建一个Unity WebGL应用程序(不是游戏),它处理Unity方面的所有3D内容,所有UI都是使用HTML/CSS/JS构建的。默认情况下,WebGLInput.captureAllKeyboardInput设置为true,这会导致需要键盘(文本)输入的任何输入字段被破坏,因为任何键盘控件都会自动被Unity占用,而不是转到输入字段。做

#if !UNITY_EDITOR && UNITY_WEBGL
WebGLInput.captureAllKeyboardInput = false;
#endif
修复了输入字段的问题,但会导致unity忽略所有键盘输入,即使在元素被聚焦后也是如此

tabindex="1"
将其修复为HTML输入字段上的键盘输入在聚焦时工作,Unity WebGL应用程序中的键盘控件在聚焦时也工作。(这些都是根据文档:)。这一切都很好

但是,Unity WebGL应用程序仍然会导致一些使用鼠标(而不是键盘)控件的输入字段出现问题。也就是说,我在input type=“range”字段(HTML5滑块)和input type=“number(使用键盘输入数字有效,但上下鼠标单击无效)上注意到了这一点


有什么解决办法吗?我基本上需要防止Unity WebGL画布不会自动获取所有鼠标输入,除非首先单击/聚焦元素(就像键盘控件的工作方式一样).Unity方面有什么需要修改的吗?或者我需要编写一些自定义JavaScript来处理所有输入,并确定它是用于Unity场景还是HTML UI?

我也有同样的问题,但我相信我已经找到了解决方法!最初我只是想使用OnApplicationFocus切换WebGLInput.captureAllKe但是OnApplicationFocus不适用于Unity的WebGL构建,所以我改为这样做

在游戏加载的第一个场景中,我有一个名为“GameControl”的脚本,在一个名为“GameControl”的游戏对象上

// In the Start function of this script I call a function on the webpage to let it know that the game has loaded.
void Start () {
    #if (UNITY_WEBPLAYER || UNITY_WEBGL) && !UNITY_EDITOR
    try {
        Application.ExternalCall("GameControlReady");
    } catch (System.Exception e) {
        Debug.LogError("GameControlReady function not on webpage"+e);
    }
    #endif
}

// This function will be called from the webpage
public void FocusCanvas (string p_focus) {
    #if !UNITY_EDITOR && UNITY_WEBGL
    if (p_focus == "0") {
        WebGLInput.captureAllKeyboardInput = false;
    } else {
        WebGLInput.captureAllKeyboardInput = true;
    }
    #endif
}
在网页上,我有以下javascript:

var gameReady = false;

// Called by Unity in GameControl's start function
function GameControlReady () {
    gameReady = true;
}

function FocusCanvas(focus) {
    if (gameReady) {
        SendMessage("GameControl", "FocusCanvas", focus);
    }
}
在网页的开头部分,我有以下内容

<script type='text/javascript'>
    document.addEventListener('click', function(e) {
        if (e.target.id == "canvas") {
            // Clicked on canvas
            FocusCanvas("1");
        } else {
            // Clicked outside of canvas
            FocusCanvas("0");
        }
    });
</script>

document.addEventListener('click',函数(e){
如果(e.target.id==“画布”){
//点击画布
FocusCanvas(“1”);
}否则{
//在画布外单击
FocusCanvas(“0”);
}
});

该解决方案工作正常,但每次都需要在unitywebgl或html控件中输入。