Unity的启动无法按预期工作

时间:2017-05-31 18:31:58

标签: c# unity3d 2d

首先,我对脚本非常陌生,所以我的脚本可能会有一些缺陷。

所以基本上,我已经制作了一个用于加电的脚本,但是一旦我的射击或玩家触及加电硬币,火速就会增加,但是在5秒后它不会恢复到正常的火速。 ..我不知道可能是什么原因,任何建议都会有所帮助!

using UnityEngine;
using System.Collections;

public class FireRatePowerUp : MonoBehaviour {

    private bool isPowerUp = false;

    private float powerUpTime = 5.0f;

    private PlayerShoot playerShoot;

    private void Start()
    {
        playerShoot = PlayerShoot.FindObjectOfType<PlayerShoot>();
    }

    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.gameObject.tag == "Player" || collision.gameObject.tag == "Projectile")
        {
            StartCoroutine(PowerUpTime());
            isPowerUp = true;

            Destroy(gameObject);

            if (collision.gameObject.tag == "Projectile")
            {
                Destroy(collision.gameObject);
            }
        }
    }

    IEnumerator PowerUpTime()
    {
        playerShoot.fireRate -= 0.13f;

        yield return new WaitForSeconds(powerUpTime);

        playerShoot.fireRate += 0.13f;
    }
}

2 个答案:

答案 0 :(得分:1)

我认为这里的问题是你要摧毁这个脚本所附带的游戏对象(硬币),这样做,脚本本身就会被破坏,因此代码,协程或其他

        StartCoroutine(PowerUpTime());
        isPowerUp = true;
        Destroy(gameObject); //oops, our script has been destroyed :(

您必须以非常不同的方式执行此操作,基本上将大部分代码移动到PlayerShoot类。

像这样(这是在PlayerShoot.cs中)

public void ActivatePowerupFireRate(float time, float amt) {
    StartCoroutine(DoActivatePowerupFireRate(time, amt));
}

public IEnumerator ActivatePowerupFireRate(float time, float amt) {
    fireRate -= amt;
    yield return WaitForSeconds(time);
    fireRate += amt;
}

答案 1 :(得分:0)

IEumerator绝对是解决此问题的方法之一。 但是,如果你在比赛中有计时器,那么我不是他们的粉丝。

public int timePassed = 0;
public int gotPowerUp = 0;

void Start(){
 InvokeRepeating("Timer", 0f, 1.0f);
 //Starting at 0 seconds, every second call Timer function.
}

void Timer(){
  timePassed++; // +1 second.
}

当你获得通电时,可以设置gotPowerUp = timePassed。因此,您可以获得启动启动的确切时间。

然后你做了类似

的事情
if( (gotPowerUp + 5) == timePassed ){
 //5 seconds have passed.
 //deactivate powerup here
}