首页 > 解决方案 > 在 WEBGL 上与 Unity UI 交互时失去焦点

问题描述

当我在由 Unity 构建的 webGl 上运行我的应用程序时,我在与 UI 元素交互时失去了焦点。我有简单的十字准线,当菜单未启用时,我锁定了光标。

在此处输入图像描述

这是一个示例代码

if(isCanvasMode)
    {
      Cursor.visible = true;
      Cursor.lockState = CursorLockMode.None;
    }
    else
    {
      Cursor.visible = false;
      Cursor.lockState = CursorLockMode.Locked;
    }

在这个阶段一切都很好,我没有看到光标和导航按预期工作。当我打开菜单(isCanvasMode = true)时,一切正常,我可以用光标在菜单项上导航。当我关闭菜单并将 isCanvasMode 设置为 false 时出现问题,然后我失去焦点,当用鼠标在水平方向上导航时,光标突然移动到另一个屏幕(只有当我关闭菜单然后再次单击统一时它才能正常工作窗户)。如果这有什么不同,我正在使用 TextMeshPro Button。

在此处输入图像描述

在此处输入图像描述

标签: unity3duser-interfaceunity-webgl

解决方案


设法找到解决方案,以防万一有人面临类似问题。所以以前当我点击关闭按钮时,它调用了将光标设置为锁定状态的函数:

Cursor.lockState = CursorLockMode.Locked

解决方案:创建从 Button 类派生的自定义 Button 并覆盖 OnPointerDown 方法。代码将如下所示。

public override void OnPointerDown(PointerEventData eventData)
  {
    base.OnPointerDown(eventData);
    Cursor.lockState = CursorLockMode.Locked
  }

推荐阅读