2017-05-23 11 views
0

このリロードスクリプトでは、ガンリロードとTHENがリロードサウンドを再生します。ことは、リロードが最初に再生する必要があります。別の問題は、私がリロードキーの作業を行うためにした作業を取り除きたいということです。私はAmmoを0にしたのは、reloadを押したときです。なぜなら、弾薬の中で8にリセットされないからです。私はちょうど私がリロードしたときに、遅延通過します。この投稿を読んでいただきありがとうございます。リロードサウンドが正しい時刻に再生されない

using UnityEngine; 
using UnityEngine.UI; 
using System.Collections; 

public class Reload : MonoBehaviour 
{ 
    //amount of bullets in the mag 
    public static int Ammo; 
    private float timer = 0.0f; 
    public float reloadTime = 3.0f; 
    //calls upon a command in a diffrent script that cancels the ablity to shoot 
    public PauseManager reload; 
    //plays the audio 
    public AudioSource reloadfx; 


    Text text; 


    void Awake() 
    { 
     reloadfx = GetComponent <AudioSource>(); 
     text = GetComponent <Text>(); 
     Ammo = 8; 
    } 


    void Update() 
    { 
     //I used this line as a underhanded way of allowing the Reload key to reload the pistol.\ 
     //This is also my work around. 
     if (Input.GetButtonDown ("Reload") && Ammo < 8) 
     { 
      Ammo = 0; 
     } 
     //IF Ammo is 0 or I press the reload and i am not full of ammo then reload 
     if (Ammo == 0 || Input.GetButtonDown ("Reload") && Ammo < 8) 
     { 
      //plays the sound 
      reloadfx.Play(); 
      ReloadAction(); 
     } 
     else 
     { 
      //enable the ablity to shoot 
      reload.shoot = true; 
     } 
     //display the ammunition 
     text.text = Ammo + "/8"; 
    } 

    public void ReloadAction() 
    { 
     //for as long as the timer is smaller then the reload time 
     if (timer < reloadTime) 
     { 
      //disable the abillity to shoot 
      reload.shoot = false; 
      //count the time 
      timer += Time.deltaTime; 
     } 
     else 
     { 
      //after the reload reset the timer and ammo count 
      Ammo = 8; 
      timer = 0.0f; 
     } 
    } 
} 
+0

サウンドはまったく再生されますか? – Chad

+0

サイトへようこそ - 私は答えを追加しました。不明な点がある場合は、私に質問してください。 – Serlite

答えて

0

reloadfx.Play();は、あなたのリロードが発生しているフレームごとに呼び出されているので、この出来事のための直接の理由があります。つまり、リロードが完了してその全体が再生されるまで何度も何度も再起動されます。

しかし、これの根本的な原因は、リロードロジックの周りに条件を構造化したことです。私のお勧めは、あなたの銃が間接的にAmmo == 0を通してそれを知らせるのではなく、実際にあなたの銃が再装荷していることを実際に示す旗を持っていることです。 Input.GetButtonDown ("Reload")が発生し、条件がリロードに適している場合は、リロードサウンドを再生し、フラグをtrueに設定します。次に、リロードが完了したらフラグをfalseに設定します。

ありますが、これを変更することができますいくつかの方法がありますが、ここで私はあなたのアプローチの非常に単純書き換えで感じるものです:

private bool isReloading = false; 

void Update() 
{ 
    if (!isReloading) 
    { 
     // When ammo has depleted or player forces a reload 
     if (Ammo == 0 || (Input.GetButtonDown ("Reload") && Ammo < 8)) 
     { 
      // Play sound once, signal reloading to begin, and disable shooting 
      reloadfx.Play(); 
      isReloading = true; 
      reload.shoot = false; 
     } 
    } 
    else 
    { 
     // isReloading will be the opposite of whether the reload is finished 
     isReloading = !ReloadAction(); 
     if (!isReloading) 
     { 
      // Once reloading is done, enable shooting 
      reload.shoot = true; 
     } 
    } 
    text.text = Ammo + "/8"; 
} 

// Performs reload action, then returns whether reloading is complete 
public bool ReloadAction() 
{ 
    //for as long as the timer is smaller then the reload time 
    if (timer < reloadTime) 
    { 
     timer += Time.deltaTime; 
    } 
    else 
    { 
     //after the reload reset the timer and ammo count 
     Ammo = 8; 
     timer = 0.0f; 

     return true; 
    } 

    return false; 
} 

は、この情報がお役に立てば幸い!ご質問がある場合はお知らせください。

+0

ありがとうございました。サウンドが完全に再生され、実際にリロードするリロードキーを押すと、今すぐ! –

関連する問題