gpt4 book ai didi

unity3d - Unity - 如何与一系列协程和 WaitForSeconds 并行运行计时器

转载 作者:行者123 更新时间:2023-12-01 06:01:07 26 4
gpt4 key购买 nike

在下面的代码中,我有一个敌人出现和消失的循环。

IEnumerator EnemyCycle()    {
while (isRepeating)
{

for (int j = 0; j < enemies.Length; j++) {

canStartUpdatingReset = true;
Enemy currentEnemy = enemies [j];
var _myMaterial = currentEnemy.GetComponent<Renderer>().material;
var _currentFade = StartCoroutine(FadeToForEnemy(_myMaterial, 0f, fTime, currentEnemy.gameObject, false));

coroutinesToStop.Add(_currentFade);

if (currentEnemy.hasWeapon) {
weaponCycleCoroutines.Add(StartCoroutine(FadeToForWeapon(currentEnemy.weapon.GetComponent<Renderer>().material, 0f, fadeTime, currentEnemy.weapon, false)));

}
}

yield return new WaitForSeconds (hideTime);

for (int j = 0; j < enemies.Length; j++) {

Enemy currentEnemy = enemies [j];
var _myMaterial = currentEnemy.GetComponent<Renderer>().material;
var _currentFade = StartCoroutine(FadeToForEnemy(_myMaterial, 1f, fTime, currentEnemy.gameObject, true));

coroutinesToStop.Add(_currentFade);
if (currentEnemy.hasWeapon) {
weaponCycleCoroutines.Add(StartCoroutine(FadeToForWeapon(currentEnemy.weapon.GetComponent<Renderer>().material, 1f, fadeTime, currentEnemy.weapon, true)));
}
yield return new WaitForSeconds (showTime);

}
}
}

我有一个 enemyCycleDuration float这是
enemyCycleDuration = 60*(hideTime + fadeTime + showTime + fadeTime)

请注意 fadeTime来自 FadeToForWeaponFadeToForEnemy .这里的想法是我想要 enemyCycleDurationEnemyCycle() 并行运行所以它同时被重置(请参见下面的代码)
yield return new WaitForSeconds (showTime);

是在 EnemyCycle() 中达成的(方法结束)。

我正在重置 enemyCycleDuration在更新方法中的以下方式但是 EnemyCycle()好像超前了 enemyCycleDuration , 总是在 enemyCycleDuration 之前完成被重置。我怎样才能让两者在时间上并行运行并同时完成?
if (canStartUpdatingReset)  {
timeElapsed +=1;
if(timeElapsed >= enemyCycleDuration) {

timeElapsed = 0;

Debug.Log ("Reset CycleDuration");
}
}

最佳答案

当我需要类似于您要求的东西时,我不使用协程。我改用这样的东西:

int TimeBetweenAction1 = 3f;
int TimeBetweenAction2 = 3f;

void Update () {
if(Time.time > NextAction1){
DoAction1();
}

if(Time.time > NextAction2){
DoAction2();
}

}

void DoAction1(){
NextAction1 = Time.time + TimeBetweenActions1;
}

void DoAction2(){
NextAction2 = Time.time + TimeBetweenActions2;
}

Action 可能来自重生一类敌人或开枪。您可以在游戏对象中拥有任意数量的对象来管理所有敌人的重生,或者在链接到场景中不同触发器的不同游戏对象中...

我知道您确切地询问了协程,但这可能是一种更简单的方法,可以解决问题。让我知道它是否对您的问题有用,或者我是否需要澄清任何事情。

关于unity3d - Unity - 如何与一系列协程和 WaitForSeconds 并行运行计时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45254980/

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