我正在使用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。
Quit-BG是我的红色UI背景图像,Quit-FG是我的黑色前景图像,QuitTxt实际上是我的文本图像“ Do you wish to quit”,而不是Text 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;
}
所以我的问题是按钮对单击无响应。为什么会发生这种情况,我该如何解决?
答案 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。按钮功能已返回,代码可以完美运行。