在Unity中立即关闭多个游戏对象

时间:2013-12-30 12:02:06

标签: c# list unity3d

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

我的想法是创建一个列表来保存我想要停用的所有游戏对象并传递所有这些对象。但是,我正在尝试用我的列表实现实际的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函数。但是,我无法实现我需要的功能。

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

3 个答案:

答案 0 :(得分:3)

正确识别后,SetActiveGameObject的方法,而不是List<GameObject>的方法。

您必须在每次迭代中为当前迭代的索引SetActive引用的游戏对象调用i - 您可以使用List<T> indexer访问该对象,即放置方块索引位于deactivate_Screen后面的括号。

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

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

答案 1 :(得分:1)

只需替换

deactivate_Screen.SetActive(false);

deactivate_Screen[i].SetActive(false);

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

答案 2 :(得分:0)

在循环中,您需要在索引 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);
}