在我的游戏中,我希望敌人在攻击之前闪现。我创建了一个执行此操作的Flash()协程,但是当我尝试运行协程时,我收到以下错误:
“Coroutine无法启动,因为游戏对象'羊'不活跃!”
让我特别困惑的是,我检查了持有Animal.Flash()协程的对象是否处于活动状态,它是:
Animal oldAnimal = (GameObject.FindWithTag ("EnemyAnimal").GetComponent<Animal> ()) as Animal;
Debug.Log("Active? " + oldAnimal.gameObject.activeInHierarchy);
StartCoroutine(oldAnimal.Flash());
绵羊继承自动物,它是一种独行者。我对这里发生的事情感到茫然。
编辑:上面的Debug.Log()
返回True。
Edit2:作为一种替代的闪烁方法,我通过oldAnimal测试了一个动画,它运行正常,表明协程是问题,而不是oldAnimal缺乏存在。太奇怪了。
Animator changeAnimation = (oldAnimal.GetComponentInChildren<Animator> ()) as Animator;
changeAnimation.SetTrigger ("Attack"); // This works fine.
为了澄清,我不想这样做,因为它涉及为游戏中的每个生物创建动画,同时创建一个改变所选生物的精灵颜色的协程可以普遍应用。
这是协程:
public virtual IEnumerator Flash(){
Color white; // Pure white.
Color original; // Original color of animal sprite.
color = GetComponent<SpriteRenderer> ().color; // Color of the animal.
original = color;
white.r = 255;
white.b = 255;
white.g = 255;
white.a = 255;
int i = 0;
for (float f = 1f; f >= 0; f -= 0.008f) { // f -= controls the speed of the fade
if (i == 0) {
color = original;
yield return null;
}
if (i == 1) {
color = white;
yield return null;
}
}
color = original;
}
答案 0 :(得分:1)
StartCoroutine
是MonoBehaviour
的一种方法。因此,实际使用StartCoroutine
的任何脚本实际上都是需要处于活动状态的对象。
您可以尝试oldAnimal.StartCoroutine(oldAnimal.Flash());