【问题标题】:How to disable multiple images using script in Unity?如何在 Unity 中使用脚本禁用多个图像?
【发布时间】:2020-05-20 11:19:27
【问题描述】:

Screenshot of Unity hierarchy, Images stay on top of each other 我目前在 Unity 中禁用图像时遇到问题。我在同一个场景中有大约 26 个按钮,因此一个一个地使用 OnClick() 很乏味。单击一个按钮时,我试图禁用 25 个图像。例如,我单击按钮 A 显示图像 A。当我单击按钮 B 时,上一个图像并没有消失,而是停留在图像 B 下方。我尝试了 i.GetComponent<Image>().enabled = true;i.gameObject.SetActive(false); 但失败了。

public GameObject[] exceptions;
public void DisableImg()
{
    GameObject[] image = GameObject.FindGameObjectsWithTag("image");
    foreach (GameObject i in image)
    {
        i.gameObject.SetActive(false);
     //   i.GetComponent<Image>().enabled = true;
    }    

    foreach (GameObject g in exceptions)
    {
        g.gameObject.SetActive(true);
     //   g.GetComponent<Image>().enabled = true;
    }
}

【问题讨论】:

  • 我们需要知道您的图像和按钮对象的层次结构以帮助您......以及如何显示图像
  • 如果你持有点击的对象,然后在第一个 foreach 中比较它并检查 if(clickedImage != Gameobject) 然后将其写入 if 范围 i.gameObject.SetActive(false);

标签: image unity3d


【解决方案1】:

此代码将起作用,您没有正确标记图像,您必须在检查器中手动设置。

public GameObject[] exceptions;
public void DisableImg()
{
    GameObject[] image = GameObject.FindGameObjectsWithTag("image");
    foreach (GameObject i in image)
    {
        i.gameObject.SetActive(false);
     //   i.GetComponent<Image>().enabled = true;
    }    

    foreach (GameObject g in exceptions)
    {
        g.gameObject.SetActive(true);
     //   g.GetComponent<Image>().enabled = true;
    }
}

虽然每次都填充图像数组效率很低,除非您在游戏过程中动态添加和删除标记为“图像”的游戏对象。

void Start() {
        GameObject[] image = GameObject.FindGameObjectsWithTag("image");
}

您也可以在没有此启动函数的情况下填充数组,或者通过进入检查器在 DisableImg() 方法中填充数组,在组件中的图像上键入图像的数量,然后您可以将游戏对象拖放到数组中。

确保您的图像在检查器中被标记为这样,您可以单击下拉列表中的当前标签并向下滚动并创建一个新标签。然后您可以返回并将所有图像设置为具有该标签。

【讨论】:

  • 我确实标记了我的图像。也许有什么我想念的。谢谢你的建议。我会试试的
  • 更新:由于没有任何效果,我只是根据键盘行将所有图像放入 3 个单独的面板中,并在需要图像作为临时措施时使用 OnClick()。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-27
  • 2022-06-28
  • 1970-01-01
  • 2020-12-08
  • 1970-01-01
  • 1970-01-01
  • 2014-12-09
相关资源
最近更新 更多