如何在一定的延迟时间内播放一系列音频片段?

时间:2017-03-31 05:19:11

标签: c# audio unity3d

这是在保持空间时播放音频剪辑的代码段,此时它会延迟初始声音,但我希望能够在重复时延迟声音。

我知道audio.PlayDelayed,但无法弄清楚如何让它发挥作用。

void AudioEnable()
{
    if (Input.GetKey(KeyCode.Space))
    {
        Invoke("Audio", audioDelay);

    }      
} 

void Audio()
{
    AudioSource audio = GetComponent<AudioSource>(); // play fire sounds from array when space is pressed
    audio.PlayOneShot(fireSounds[Random.Range(0, fireSounds.Length)]);        
}

我将继续寻找解决方案,但与此同时,我们将不胜感激。

2 个答案:

答案 0 :(得分:1)

通过阅读您的评论,您需要一个冷却计时器。重要的计时器。如果计时器达到设定值,则可以进行拍摄。拍摄时,重置计时器。在这种情况下,您可以增加或减少coolDownTime,因为它将控制拍摄的子弹数量。

此外,将音频变量重命名为其他内容。在最新版本的Unity中,有一个名为MonoBehaviour的变量,您将收到警告。

最后,将AudioSource组件缓存在Start()功能中,这样您每次拍摄时都不必GetComponent<AudioSource>();

public AudioClip[] fireSounds;
AudioSource bulletAudio;

//Every 0.5 seconds(Change this to your needs)
const float coolDownTime = 0.5f;
float startingTime = 0f;

void Start()
{
    bulletAudio = GetComponent<AudioSource>();
    startingTime = Time.time;
}

void Update()
{

    if (Input.GetKey(KeyCode.Space))
    {
        //Check if we have reached the cool down timer
        if (Time.time > startingTime + coolDownTime)
        {
            //We have. Now reset timer
            startingTime = Time.time;

            playAudio();
        }
    }
}

void playAudio()
{
    bulletAudio.PlayOneShot(fireSounds[UnityEngine.Random.Range(0, fireSounds.Length)]);
    UnityEngine.Debug.Log("Shot");
}

答案 1 :(得分:0)

试试这个

    void AudioEnable()
    {
        if (SoundPLaying)
            return;            

        if (Input.GetKey(KeyCode.Space))
        {
            SoundPLaying = true;
            System.Timers.Timer timer = new System.Timers.Timer();
            timer.AutoReset = true;
            timer.Interval = 1000;  //1000 milliseconds. Ajust this time to be equal to length of fire sound.

            timer.Elapsed += (s, e) => { SoundPLaying = false; timer.Dispose(); };
            timer.Start();

            Invoke("Audio", audioDelay);
        }
    }

    void Audio()
    {
        AudioSource audio = GetComponent<AudioSource>(); // play fire sounds from array when space is pressed
        audio.PlayOneShot(fireSounds[Random.Range(0, fireSounds.Length)]);
    }