我有一個類正在改變播放器的速度。下面是代碼:WaitForSeconds不工作
using UnityEngine;
using System.Collections;
public class MultiplySpeed : MonoBehaviour {
public int multiplier = 2;
public Controls player;
bool flag = false;
void OnTriggerExit(Collider c){
if(c.tag == "Player"){
player = c.gameObject.GetComponent<Controls>();
if(!flag){
multiplySpeed();
StartCoroutine(powerUp());
}
flag = true;
}
}
public IEnumerator powerUp(){
yield return new WaitForSeconds(10);
backToNormal();
StopCoroutine(powerUp());
}
public void multiplySpeed(){
player.speed = player.speed * multiplier;
}
public void backToNormal(){
player.speed = player.speed/ multiplier;
}
}
我有兩個問題,第一個是啓動協程和標誌變量設置爲true後,該方法OnTriggerExit
再次調用,並且標誌是假的,一切再次執行。第二個問題是方法backToNormal
看起來好像從未執行過,它只是將速度放大並且不會恢復正常。任何幫助表示讚賞。
編輯: 試圖通過拉塞克盧弗建議的方法後,這裏是我的代碼:
using UnityEngine;
using System.Collections;
public class MultiplySpeed : MonoBehaviour {
public int multiplier = 2;
public Controls player;
bool flag = false;
float timer = 5.0f;
void update(){
timer -= Time.deltaTime;
if (timer == 0) {
backToNormal();
timer = -1f;
}
}
void OnTriggerExit(Collider c){
if(c.tag == "Player"){
player = c.gameObject.GetComponent<Controls>();
if(!flag){
timer = 5.0f;
flag = true;
multiplySpeed();
}
}
}
public void multiplySpeed(){
player.speed = player.speed * multiplier;
}
public void backToNormal(){
player.speed = player.speed/ multiplier;
}
}
不過,我有完全一樣的問題。
您不需要'StopCoroutine'調用:協程運行一次,當它們返回時結束。我不確定在一個新的協同程序中調用'StopCoroutine'是做什麼的。 (請參閱http://docs.unity3d.com/ScriptReference/MonoBehaviour.StopCoroutine.html(http://docs.unity3d.com/ScriptReference/MonoBehaviour.StopCoroutine.html)。) – 31eee384
您能否提供更詳細的描述腳本背後的邏輯?國旗的目的是什麼? –