c# - 按钮在设置为非活动和重新激活后无响应
问题描述
我正在使用 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;
}
所以我的问题是按钮对点击没有响应。为什么会发生这种情况,我该如何解决?
解决方案
我总是使用这样的结构来启用和禁用面板和按钮,并且从来没有遇到过问题。
我在您的代码中看到问题的唯一时刻是当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;
推荐阅读
- javascript - 用于触发器数据库的猫鼬钩子或快速中间件?
- angular - 使 Angular 7 应用程序 seo 兼容
- css - css中的反转框边框如何使这个像素完美
- angular - 如何避免在任何 IE 版本上加载 Angular?
- excel - 从公式中获取的 Excel 值无法在 SUM 中计算
- python - 如何找到表标签中的“a”标签的下一个兄弟?
- c# - func?.Invoke() 是什么意思?
- xml - 将 JavaScript 添加到 XSL 文件,或者我可以使用什么 xsl 函数
- java - 使用ParameterizedPreparedStatementSetter时如何避免在Spring JdbcTemplate batchUpdate方法中添加元素?
- php - 查找元素存在于第一个数组中,而不存在于动态数组的第二个中