【问题标题】:Buttons Not Responding After Being Set Inactive and Reactivated按钮在设置为非活动和重新激活后无响应
【发布时间】:2019-01-02 00:25:29
【问题描述】:

我正在使用 Unity 2019.1.1a,我相信它仍处于测试阶段。我正在设计一个2D游戏。 无论如何,我已将所有 UI 元素存储在画布内的一个空游戏对象中。

Quit-UI 是一个空的游戏对象。我从一开始就将其设置为非活动状态,这使得所有 GUI 都按预期消失。

[Header("UI Quit Controls")]
[SerializeField]
private GameObject quitImg;
[SerializeField]
private Button exit, resume;

private void Start()
{
    player = GetComponent<Rigidbody2D>();
    quitImg.SetActive(false);

}

quitImg 在我的检查器中设置为空游戏对象 Quit-UI。

Quit-BG 是我的 Red-ish UI 背景图像,Quit-FG 是我的黑色前景图像,而 QuitTxt 实际上是我的文本图像“Do you wish to quit”,而不是文本 UI。

当按下 Escape 时,此 UI 在更新功能内设置为活动状态。此操作显示所有相关 UI,因为游戏对象设置为 true:

 void Update()
      {

          if (Input.GetKeyDown(KeyCode.Escape))
    {

        quitImg.SetActive(true);           

    }

        }

我将按钮 OnClick() 设置为我的 PlayerMove 脚本脚本中的函数。 退出游戏按钮:

  public void ExitGame()
{

    SceneManager.LoadScene(1);

}

恢复游戏按钮:

  public void ResumeGame()
{

    quitImg.SetActive(false);
    exit.enabled = false;
    resume.enabled = false;

}

所以我的问题是按钮对点击没有反应。为什么会发生这种情况,我该如何解决?

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    我总是使用这样的结构来启用和禁用面板和按钮,从来没有遇到过问题。

    我在您的代码中看到问题的唯一时刻是,当您执行 ResumeGame 时,您同时禁用了 Button 组件

    exit.enabled = false;
    resume.enabled = false;
    

    但你再也不会启用它们了。

    但是你仍然可以看到他们的 UI,因为 Image 组件没有被禁用。

    一般来说,为了避免这种“误解”,您应该使用按钮的interactable 属性,例如

    exit.interactable = false;
    resume.interactable = false;
    

    这使Button 组件保持完整,不可点击,而是在视觉上“被阻止”,例如默认为灰色。从用户和开发人员的角度来看,这要好得多。


    但是在您的情况下,按钮是您禁用的对象的子级

    => 所以按钮无论如何都将不再是可交互/可见的,因此只需将quitImg 设置为非活动状态并完全摆脱这两行就足够了

    exit.enabled = false;
    resume.enabled = false;
    

    【讨论】:

    • ResumeGame() 实际上是我的取消按钮。所以当它弹出“你想退出”是/否时,ResumeGame() 将等效于否按钮,在这个例子中。所以我需要将元素设置为非活动状态。但是,我发现我不需要禁用按钮,因为禁用 quitImg 为我完成了这项工作。不幸的是,即使删除了 exit 和 resume 变量,我仍然遇到同样的问题。我什至尝试创建一个新的画布并将退出 GUI 放在上面。然后只禁用 QuitGUI 画布。结果相同。
    • 在您禁用对象之前它们是否正常工作?从您的脚本中,我不明白为什么会发生这种情况.. 可能是一个错误,但基本的东西不太可能突然不再起作用
    • 我明白你现在所说的按钮被禁用但图像不是。明天下班后我会试试你的建议。我会让你知道。非常感谢您的回复!
    • 是的,在我实现禁用/启用之前,这两个按钮都经过了测试。按钮根本不会对鼠标做出反应。没有突出显示或单击/按下。 100% 无反应。 Debug.Log() 也不返回任何信息。可能会检查 RaycastTarget 并检查 Interactable。就像您说的那样,图像已启用,但按钮未启用。明天我会进一步研究。
    • 我找到了我的问题的解决方案并发布了它,但是这里的答案中有很多有用的信息,我从你那里学到了一些新东西。感谢您抽出宝贵时间帮助我!
    【解决方案2】:

    这真的让我大吃一惊!但是,解决方案非常非常简单。 (我花了很长时间才发现问题哈哈)

    我删除了我不知道这是什么的事件系统。为了解决这个问题,我右键单击画布、选定的 UI 和 EventSystem。按钮功能已恢复,代码完美运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-28
      • 2021-02-03
      • 1970-01-01
      • 2021-07-30
      • 1970-01-01
      • 2013-07-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多