gpt4 book ai didi

c# - 如何停止不断添加游戏对象的 foreach 循环

转载 作者:行者123 更新时间:2023-12-05 05:29:49 25 4
gpt4 key购买 nike

在 unity 3d 中,我有 2 个标记为角色的游戏对象。我只想将这两个游戏对象添加到名为 characterList 的列表中。我尝试使用 foreach 循环来做到这一点,如下面的代码所示。但是这个循环不断地不断地一遍又一遍地添加这两个游戏对象。添加这 2 个或更多实际存在于场景中的游戏对象后,如何让它停止?

private GameObject character;

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


void Start()
{
foreach(GameObject character in GameObject.FindGameObjectsWithTag("Character"))
{
characterList.Add(character);
}
}

最佳答案

运算符(operator):

But then this loop keeps going on endlessly adding these two gameobjects over and over again.

您已将 characterList 声明为 public field,因此它受制于 Unity 序列化:

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

我怀疑发生的事情是当你:

  • 运行游戏(如果您的脚本被标记为 [InitializeOnLoad],则运行游戏)并将代码添加到集合中

  • 您直接从编辑器中进行更改

...Unity 将保留下一次运行的更改,从而导致从上一次运行添加的 2 个加上当前执行的另外 2 个。这将在每次运行时以对数方式增加。

一个简单的解决方法是将您的字段定义为 private,如下所示:

private List<GameObject> characterList = new List<GameObject>();

Unity 将忽略它,不会尝试序列化它,也不会在编辑器中显示该成员,从而避免意外添加。

关于c# - 如何停止不断添加游戏对象的 foreach 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74838959/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com