gpt4 book ai didi

c# - 我的协程并不是真正的例程。为什么这个函数只被调用一次?

转载 作者:行者123 更新时间:2023-12-01 18:52:53 24 4
gpt4 key购买 nike

我编写了一个脚本来在我的统一游戏中生成游戏对象。它使用协程。为什么我的spawnWaves()只被调用一次?这是我的脚本:

using UnityEngine;
using System.Collections;

public class GameController : MonoBehaviour {

public GameObject[] hazards;
public Vector3 spawnValues;
public float spawnInterval;

// Use this for initialization
void Start ()
{
StartCoroutine(SpawnWaves(spawnInterval));
}

IEnumerator SpawnWaves(float interval)
{
Vector3 spawnPosition = new Vector3(Random.Range(-spawnValues.x, spawnValues.x), spawnValues.y, spawnValues.z);
Quaternion spawnRotation = new Quaternion(Random.Range(-Mathf.PI, Mathf.PI), Random.Range(-Mathf.PI, Mathf.PI), Random.Range(-Mathf.PI, Mathf.PI), Random.Range(-1f, +1f));
Instantiate(hazards[Random.Range(0, 3)], spawnPosition, spawnRotation);

yield return new WaitForSeconds(interval);
}
}

Unity 编辑器内的所有公共(public)值均已正确设置。

enter image description here

怎么了?谢谢!

最佳答案

协程只不过是正常的yield- method 。对于循环,请使用 while

while (...) 
{
// Do work here
yield return new WaitForSeconds(interval);
}

作为替代方案(我不推荐),您可以在最后再次启动协程。

....
yield return new WaitForSeconds(interval);
StartCoroutine(SpawnWaves(spawnInterval));

进一步说明

协程使用 enumerator用于运行上面的代码。基本上,编译器创建一个实现 IEnumerator 接口(interface)的后台类。 Jon Skeet 解释得很好 here .

关于c# - 我的协程并不是真正的例程。为什么这个函数只被调用一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32616200/

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