识别每个IEnumerator的唯一性。

问题描述 投票:1回答:1

我的玩家角色产卵多种颜色的波,并试图检测即将到来的对象.这里是整体想法的小快照。

enter image description here

我已经产生了粉红色和蓝色的颜色波,用于测试目的,我已经使用IEnumerator(线程)来生成每个颜色波。我使用IEnumerator(线程)来生成每个颜色波,现在两个enumeratorsthreads分别工作,并正常完成了他们的工作。我对它们的工作没有任何问题。

现在我需要一些标识符或索引来唯一标识每个运行的线程,如何用c#来管理这个我不知道!

unity3d
1个回答
0
投票

你可以通过创建一个列表来实现 IEnumerator 对象,如

List<IEnumerator> coroutines = new List<IEnumerator>();

然后将每个coroutine添加到您的列表中

void Start()
{
    coroutines.Add(CoroutineOne());
    coroutines.Add(CoroutineTwo());
    foreach (var c in coroutines)
    {
        StartCoroutine(c);
    }
}

如果你添加一个 yield return null 的最后一行,然后你可以用以下方法检查它们是否达到了这个状态 IEnumerator.Current

IEnumerator CoroutineOne()
{
    for(int i = 0; i < 5; i++)
    {
        Debug.Log("one" + i);
        yield return new WaitForSeconds(1);
    }
    yield return null;
}

然后你在哪里管理他们

 void Update()
{
    for (int i = 0; i < coroutines.Count; i++)
    {
        if(coroutines[i].Current == null)
        {
            Debug.Log("Corutine " + i +" has finished");
        }
    }
}

编辑。

你可以用这个来管理你的活动的coroutine。

coroutines.RemoveAll(x => x.Current == null);

这将使你的列表中只保留活动的,你可以使用 coroutine.Count 以获取一次有多少个有效索引。

© www.soinside.com 2019 - 2024. All rights reserved.