【发布时间】:2015-12-20 00:29:44
【问题描述】:
我有一门课程正在改变玩家的速度。这是代码:
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;
}
}
我有两个问题,第一个是启动协程并且flag变量设置为true后,再次调用方法OnTriggerExit,flag为false,一切都重新执行。第二个问题是 backToNormal 方法似乎从未执行过,它只是使速度倍增,并且永远不会恢复正常。任何帮助表示赞赏。
编辑: 在尝试了 Lasse Klüver 建议的方法后,这是我的代码:
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。) -
你能提供更详细的脚本背后的逻辑描述吗?国旗的用途是什么?