2017-05-31 13 views
0

まず、スクリプトには新しくなっているので、スクリプトにいくつかの欠陥が存在する可能性があります。ユニティパワーアップが意図したとおりに動作していない

基本的には、電源を入れるスクリプトを作っていますが、ショットやプレーヤーがパワーアップコインに触れると、火災率は上昇しますが、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; 
    } 
} 
+0

(https://stackoverflow.com/questions/40792548/do- [Unity3Dでコルーチンを使用する方法がわからない]の可能性のある重複使い方が分からないコルーチンインユニティ3d) – Serlite

+0

ありがとう、私は今問題が何であるか知っています! – Nick

答えて

0

IEumeratorは、この問題を解決できる方法の1つです。 しかし、ゲームのタイマーがあれば、私は彼らのファンではありません。

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 
} 
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; 
} 
+0

ええ、私は気づいた...私はもう少し私のコードをチェックする必要がありますが、返信いただきありがとうございます! – Nick

関連する問題