2017-10-10 10 views
0

私はオーバーヘッドシューティングゲームを作っています。プレイヤーが特定のオブジェクトに触れると、その火災率が上昇します。パワーアップが数秒後に消えるようにするにはどうすればいいですか?あなたがアップデート()でそれをタイマーを追加し、ckeckできユニティ - 一時的なパワーアップを行うにはどうすればいいですか?

+0

私はあなたのどこかにタイマーが必要だと言っていますが、私の知識がどこにあるのがベストではないのか分かりません。 –

答えて

0

public class PlayerPickups : MonoBehaviour { 

PlayerHealth playerHealth; 

public float RFBoostValue=0.005f; 

GameObject player; 

void Awake() 
    { 
     player = GameObject.FindGameObjectWithTag("Player"); 
     playerHealth = player.GetComponent<PlayerHealth>(); 
    } 

private void OnTriggerEnter(Collider other) 
{ 

    if (other.tag == "Rapid Fire Pickup") 
    { 
     Destroy(other.gameObject); 
     PlayerShooting.timeBetweenBullets -= RFBoostValue; 
    } 
} 

}

float timer = 0; 
    float seconds = 2; 

    private void Update() { 
     timer += Time.deltaTime; 
     if(timer > seconds) { 
      timer = 0; 
      // Do stuff 
     } 
    } 
+0

または単にパワーアップ値を追加し、 'Invoke(string、float)'にx秒後にもう一度引き算する関数を追加するだけです。 https://docs.unity3d.com/ScriptReference/MonoBehaviour.Invoke.html – yes

+0

私はどのようにそのコードをontriggerenter関数に入れますか? –

+0

@KennethDionisi 'RemovePowerup(){...}'関数を追加し、そこにパワーアップロジックを削除します。 'OnTriggerEnter(Collider other)'では 'Invoke(" RemovePowerup "、2.0f);という行を追加し、2秒後に以前に作成した関数を呼び出します。プレイヤーが死んでいる場合は、 'CancelInvoke(" RemovePowerup ");'(あなたが 'IsInvoking'を呼び出しているかどうかを確認することもできます)を実行してください。あなたはCoroutinesを使うことができます(後で早く彼らに慣れることをお勧めします、あらゆる種類のもののためにかなり便利です)。 – yes

0

DONDはPlayerShooting.timeBetweenBullets -= RFBoostValue;が好きな書き込み。あなたのプレイヤーが死亡した場合や何かが起きた場合、データは破損しています。

このようなIAffectまたはsothingのリストをプレーヤーコンポーネントに保存する必要があります。 PlayerAffectControllerは、各エフェクトのライフタイムを制御します。 OnActivateメソッドPlayerShooting.timeBetweenBullets -= RFBoostValue;でこのコードを実行すると、OnDeactivateのPlayerShooting.timeBetweenBullets += RFBoostValue;になります。

+0

OnTriggerEnter()自身をPlayerAffectControllerに追加する必要があります –

0

電源を入れた場所をタッチしたとします。その時点で、あなたのキャラクターやパワーアップマネージャーにコンポーネントを添付します。ゲームの構築方法によって異なります。 Updateメソッドのpowerupコンポーネント内では、電源投入時にuser2953780と同じように時間をカウントしながら、接続されているゲームオブジェクトにパワーアップを適用できます。時間が過ぎると、私はコンポーネントを削除します:

float timer = 0; 
float seconds = 2; 

private void Update() 
{ 
//Apply powerup effect 

//Count time 
timer += Time.deltaTime; 

if(timer > seconds) 
{ 
    //time to remove to powerup component 
    Destroy(this); 
} 
} 
関連する問題