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