在 WEBGL 上与 Unity UI 交互时失去焦点

Loosing focus when interacting with Unity UI on WEBGL

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

这是一个示例代码

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

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

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

Cursor.lockState = CursorLockMode.Locked

解决方法: 创建从 Button class 派生的自定义 Button 并覆盖 OnPointerDown 方法。代码看起来像那样。

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