首页 > 解决方案 > 按钮在设置为非活动和重新激活后无响应

问题描述

我正在使用 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

解决方案


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

我在您的代码中看到问题的唯一时刻是当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;

推荐阅读