在下面的代码中,我有一个出现和消失的敌人循环。
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
来自FadeToForWeapon
和FadeToForEnemy
。这里的想法是我希望enemyCycleDuration
与EnemyCycle()
并行运行,以便在同时重置(请参阅下面的代码)
yield return new WaitForSeconds (showTime);
在EnemyCycle()
(方法结束)中达到。
我将在更新方法中按以下方式重置enemyCycleDuration
,但EnemyCycle()
似乎在enemyCycleDuration
之前,始终在enemyCycleDuration
重置之前完成。如何让两者在时间上相互平行并同时完成?
if (canStartUpdatingReset) {
timeElapsed +=1;
if(timeElapsed >= enemyCycleDuration) {
timeElapsed = 0;
Debug.Log ("Reset CycleDuration");
}
}
答案 0 :(得分:0)
当我需要类似于你要求的东西时,我不会使用协同程序。我用的是这样的东西:
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;
}
行动可能来自重生一种敌人或射击枪。你可以在gameObject中拥有所需的数量来管理重生的所有敌人,或者链接到场景中不同触发器的不同游戏对象......
我知道你确切地询问了协同程序,但这可能是一种更容易实现的方法。如果它对您的问题有用或者我需要澄清任何内容,请告诉我。