设置为不活动并重新激活后,按钮无响应

时间:2019-01-02 00:25:29

标签: c# unity3d

我正在使用Unity 2019.1.1a,我相信它仍处于Beta版。我正在设计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。

enter image description here

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

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

 void Update()
      {

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

        quitImg.SetActive(true);           

    }

        }

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

enter image description here

  public void ExitGame()
{

    SceneManager.LoadScene(1);

}

“继续游戏”按钮:

enter image description here

  public void ResumeGame()
{

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

}

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

2 个答案:

答案 0 :(得分:1)

我一直使用这样的结构来启用和禁用面板和按钮,从来没有问题。

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

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

但是您再也不会启用它们。

但是,由于未禁用Image组件,您仍然可以看到其用户界面。

通常要避免这种“误解”,您应该使用按钮的interactable属性,例如

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

这可以使Button组件保持完整,不可点击,而在视觉上被“阻塞”,例如默认情况下变灰。从用户和开发人员的角度来看,这都是更好的方法。


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

=>因此,按钮无论如何将不再是可交互的/可见的,因此仅将quitImg设置为无效并完全摆脱这两行就足够了

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

答案 1 :(得分:0)

这真让我激动!但是,解决方案非常非常简单。 (只是我花了很长时间才找出问题大声笑)

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