untiy 协程开启两次,但两次传参不同
时间: 2024-03-22 11:08:07 浏览: 14
在 Unity 中,协程是以函数为基础的,每次调用协程实际上是启动一个新的实例。因此,可以通过将不同的参数传递给协程来实现多次调用协程并传递不同的参数。
下面是一个示例,展示如何通过启动两次协程,并分别传递不同的参数:
```csharp
IEnumerator MyCoroutine(int param)
{
Debug.Log("Coroutine started with param: " + param);
yield return new WaitForSeconds(1.0f);
Debug.Log("Coroutine resumed after 1 second");
}
void Start()
{
StartCoroutine(MyCoroutine(10));
StartCoroutine(MyCoroutine(20));
}
```
在上面的示例中,我们定义了一个带有参数的协程 `MyCoroutine`,并在 `Start` 方法中分别启动了两次该协程,并传递了不同的参数(10 和 20)。每个协程会输出相应的参数值。
需要注意的是,协程的执行顺序是非确定性的,所以无法保证哪个协程会先执行。如果需要按顺序执行协程,并且确保每次传递不同的参数,可以使用一个包含参数的数据结构(如结构体或类),在每次启动协程时传递不同的实例。
```csharp
struct CoroutineParam
{
public int param;
}
IEnumerator MyCoroutine(CoroutineParam param)
{
Debug.Log("Coroutine started with param: " + param.param);
yield return new WaitForSeconds(1.0f);
Debug.Log("Coroutine resumed after 1 second");
}
void Start()
{
CoroutineParam param1 = new CoroutineParam { param = 10 };
CoroutineParam param2 = new CoroutineParam { param = 20 };
StartCoroutine(MyCoroutine(param1));
StartCoroutine(MyCoroutine(param2));
}
```
在上面的示例中,我们使用一个结构体 `CoroutineParam` 来包含参数,并在每次启动协程时传递不同的实例。这样可以确保每个协程都具有不同的参数值。