我想使用一个协程让玩家在拍摄新子弹之前稍微等一下,但它永远不会超过收益率。这是代码
protected override void Start () {
base.Start ();
animator = GetComponent<Animator> ();
score = GameManager.instance.playerScore;
playerLives = GameManager.instance.playerLife;
}
void Update(){
int horizontal = (int)Input.GetAxisRaw("Horizontal");
AttemptMove (horizontal, 0);
if (Input.GetKeyDown ("space")) {
if(canShoot){
Vector3 shootPosition = transform.position + new Vector3 (0, 0.5f, 0);
Instantiate (bullet, shootPosition, Quaternion.identity);
StartCoroutine(Shoot());
}
}
}
IEnumerator Shoot(){
Debug.Log("Start");
canShoot=false;
yield return new WaitForSeconds (shootingTimeDelay);
canShoot=true;
Debug.Log("End");
}
shootingTimeDelay设置为1.1f。我没有在任何地方销毁我的gameObject,它在我项目的其他脚本中正常工作。
它从不打印End。我不知道出了什么问题
答案 0 :(得分:2)
我会说不要在这样的事情上使用协程。
尝试这样做,看看你是否得到更好的恢复
private float time = 0;
public float fireTime = 1.1f;
private void Update()
{
time += Time.deltaTime;
if(Input.GetKeyDown("space") && time >= fireTime)
{
Vector3 shootPosition = transform.position + new Vector3 (0, 0.5f, 0);
Instantiate (bullet, shootPosition, Quaternion.identity);
time = 0;
}
}
答案 1 :(得分:0)
好的,我发现了这个错误。我在它的超类中有一个叫做StopAllCoroutines的方法但是由于某种原因我直到现在都没有想过它。将其更改为StopCoroutine(&#34;我的协程名称&#34;)现在它完美无缺:)