【问题标题】:Showing menu make the cursor disappear显示菜单使光标消失
【发布时间】:2017-09-17 02:24:33
【问题描述】:

单击时光标消失,如下所示:

如何重现:

  • 获取 Game Jam 菜单模板: https://www.assetstore.unity3d.com/en/#!/content/40465
  • 使用从标准导入的 FPS 控制器添加另一个场景 资产。
  • 在 UI 中勾选“更改场景” -> 启动选项组件。

  • 按下退出键并触摸滑块,任何单击都会使 光标消失。

看起来像这样:https://imgur.com/a/hefmP

如果我在 FPS 控制器中勾选鼠标外观 -> 锁定光标,则不会发生这种情况,但我也会在我的 FPS 游戏中看到光标。

我尝试在暂停和取消暂停时添加Cursor.lockState = CursorLockMode.Locked; Cursor.visible = false; 和相反的内容,但它没有帮助。可能是因为MouseLook.cs 也在更新它们:

我宁愿不将 FPSController 和暂停菜单结合起来,它们也在不同的场景中。

那么在进入暂停菜单时我还能如何解锁光标呢?是否有可以在这里使用的事件模式?

它也会使场景变暗,但这是另一个问题。

【问题讨论】:

  • 请注意,这是 C# 而不是 unityscript,最好发布代码而不是截图。
  • 我一定是误点击了 unityscript 标签。我没有几行代码可以在这里写。这是统一团队制作的标准资产和场景的问题......如果有人愿意,我会上传这个带有这两个场景的最小项目。 @程序员

标签: c# unity3d


【解决方案1】:

它已被MouseLook 脚本修改,该脚本用于FirstPersonController 脚本。一种解决方案是修改MouseLook 脚本,但简单的资产更新会终止该修改。

此问题的正确解决方案是在打开任何菜单时禁用FirstPersonController 脚本,然后在关闭该菜单时重新启用它。此外,当您禁用它时,手动将Cursor.lockState 设置为None 并将光标设置为可见。

下面是一个简单的函数来处理它。您的每个菜单 openclose 按钮都应链接到以下功能。 当您调用它时,使用打开按钮将false 传递给它,并使用关闭按钮将true 传递给它

void enableFPS(bool enable)
{
    GameObject fpsObj = GameObject.Find("FPSController");
    FirstPersonController fpsScript = fpsObj.GetComponent<FirstPersonController>();

    if (enable)
    {
        //Enable FPS script
        fpsScript.enabled = true;
    }
    else
    {
        //Disable FPS script
        fpsScript.enabled = false;
        //Unlock Mouse and make it visible
        Cursor.lockState = CursorLockMode.None;
        Cursor.visible = true;
    }
}

【讨论】:

  • 它可以工作,但现在它们是强耦合的,这在统一中很常见吗?
  • 是的。这就是 Unity FPS 的恼人行为。如果您不喜欢它,请编写您自己的 FPS 代码并使用它。使用您自己的 FPS,您可以确保它不会以这种方式运行。
猜你喜欢
  • 2022-12-01
  • 2010-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-11
  • 2012-08-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多