gpt4 book ai didi

c# - 当程序最后一次通过 WaitForSeconds 时,Unity 崩溃

转载 作者:行者123 更新时间:2023-12-02 07:30:55 25 4
gpt4 key购买 nike

我有一个奇怪的问题。我的代码工作正常。一切正常,直到最后一次通过 foreach 循环。编码:

public List<string> waveInput = new List<string>(); //die Eingabe der Welle als Zeichenfolge
public List<GameObject> enemyTyps = new List<GameObject>();
public List<Vector3> path = new List<Vector3>();
public GameObject tempPathStart;
public int currentWave = 0;
public int currentAmountOfEnemies;

private int spawnAmountOfEnemies;
private double spawnDelay;
private List<GameObject> enemyToSpawn = new List<GameObject>();

void Start() {
path.Add(tempPathStart.transform.position);
StartCoroutine(function());
}

IEnumerator function() {

while(waveInput.Capacity >= currentWave) {

if(waveInput[currentWave] == "" && currentAmountOfEnemies <= 0) {
currentWave++;
enemyToSpawn.Clear();
spawnAmountOfEnemies = 0;
} else if(currentAmountOfEnemies <= 0) {
string _substring = waveInput[currentWave].Substring(0, waveInput[currentWave].IndexOf(";") + 1);
ManageSubstring(_substring);

for(int i = 0; i < spawnAmountOfEnemies; i++) {

foreach(GameObject element in enemyToSpawn) {
this.SpawnEnemy(element);
yield return new WaitForSeconds((float)spawnDelay);
}
}
}
}
}

void ManageSubstring(string _substring) {
string _tempStringAmount = "";
string _tempStringDelay = "";
string _tempStringType = "";
bool _switchAmountDelay = false;

for(int i = 0; i < _substring.Length; i++) {
char c = _substring[i];

if(c >= '0' && c <= '9') {

if(_switchAmountDelay) {

_tempStringDelay += c;
} else {
_tempStringAmount += c;
}
} else if(c == ';') {

} else if(c == '.') {
_tempStringDelay += c;
} else {
_switchAmountDelay = true;
_tempStringType += c;
}
}
spawnDelay = double.Parse(_tempStringDelay);
spawnAmountOfEnemies = int.Parse(_tempStringAmount);

foreach(char c in _tempStringType) { //die Buchstaben in GameObjekte / Gegner umwandeln
int _tempConvertedInt = TranslateStringToInt(c);
enemyToSpawn.Add(enemyTyps[_tempConvertedInt]);
}
}

int TranslateStringToInt(char pToConvertChar) {
List<char> _alphabet = new List<char>() {'a','b','c','d','e','f','g','h','i','j','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
return _alphabet.IndexOf(pToConvertChar);
}

void SpawnEnemy(GameObject prefab) {
currentAmountOfEnemies++;
GameObject e = Instantiate(prefab) as GameObject;
e.transform.position = path[0];
}

正如我已经说过的,非常奇怪的是:代码可以正常工作,甚至这条线也可以正常工作,直到它通过最后一次。然后 Unity 崩溃了,我不知道该怎么办。如果上下文需要更多代码,请说。

感谢您的每一个回答!

最佳答案

我刚刚将您的脚本拉入调试器并逐步完成了最后一次迭代:

当迭代结束时,它返回到包含function()的整个主体的while()循环。 .

  • while 条件自 waveInput.Capacity 起仍然为真大于 currentWave(仍然为零)。
  • if(waveInput[currentWave] == "" && currentAmountOfEnemies <= 0)为假,因为 waveInput[] 数组的元素零不是“”,并且enemycount 尚未重置。
  • else if(currentAmountOfEnemies <= 0)条件也是错误的,因为当前金额未重置。
  • 在 while 循环中仅此而已,没有任何变化,您有一个无限循环,它永远不会达到产量返回。这会锁定 Unity 的 Update() 循环,并且只允许杀死。
  • 关于c# - 当程序最后一次通过 WaitForSeconds 时,Unity 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61373688/

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