【问题标题】:Turning off multiple game objects at once in Unity在 Unity 中一次关闭多个游戏对象
【发布时间】:2013-12-30 12:02:05
【问题描述】:

我想通过一个方法调用一次关闭多个游戏对象及其所有关联的子对象。

我的想法是创建一个列表来保存我想要停用的所有游戏对象并将所有这些对象传递进去。但是,我正在尝试使用我的列表和 Im 实现实际的 SetActive 方法调用遇到一些问题。

这是我刚才的代码:

public List<GameObject> deactivate_Screen = new List<GameObject>(); 

void OnClick()
{       
    for( int i = 0; i < deactivate_Screen.Count; i++)
    {
        deactivate_Screen.SetActive(false);
    }
}

现在我很清楚这不起作用的明显原因。列表无法访问我试图实现的 SetActive 函数。但是,我无法实现我需要的功能。

有人可以告诉我我需要做什么,或者指出正确的方向来解决我的错误吗?

【问题讨论】:

    标签: c# list unity3d


    【解决方案1】:

    如您所见,SetActiveGameObject 的方法,而不是 List&lt;GameObject&gt; 的方法。

    您必须在每次迭代中为当前迭代的索引i 引用的游戏对象调用SetActive - 您可以使用List&lt;T&gt; indexer 访问该对象,即通过将索引放在方括号后面@ 987654330@.

    因此,每次迭代中的“当前项”为deactivate_Screen[i],因此您的循环应如下所示:

    for (int i = 0; i < deactivate_Screen.Count; i++)
    {
        deactivate_Screen[i].SetActive(false);
    }
    

    【讨论】:

      【解决方案2】:

      只需替换

      deactivate_Screen.SetActive(false);

      deactivate_Screen[i].SetActive(false);

      由于List本身不是游戏对象,但它的元素是List[0] List[1] List[2] List[3].....

      【讨论】:

        【解决方案3】:

        在您的循环中,您需要访问索引 i 处的列表元素:

        for( int i = 0; i < deactivate_Screen.Count; i++)
        {
            deactivate_Screen[i].SetActive(false);
        }
        

        或使用 foreach 循环

        foreach (var gobj in deactivate_Screen)
        {
            gobj.SetActive(false);
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-04-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多