时间流逝的声音的交替

时间:2015-02-02 14:46:28

标签: audio time unity3d

我尝试编写一种方法,可以按指定的时间间隔依次添加任意数量的声音。

但问题是它的工作方式不一致。那就是:

  • 之前播放的声音可能会在一段时间后重复几次
  • 没有声音队列,依此类推。

我认为问题是循环中的int i不断更新,因此没有优先权。但是在记下检查和降低int i之后,它就停止了游戏。

using UnityEngine;
using System.Collections;

public class OneShot : MonoBehaviour {
    public AudioClip[] Sounds;
    public float Timer;
    private float TimerDown;

    void Start ()
    {
        TimerDown = Timer;
        audio.clip = Sounds[0];
        audio.Play();
    }

    void Update ()
    {
        int i;
        for(i = 1;i < Sounds.Length;i++) 
        {
        if(TimerDown > 0) TimerDown -= Time.deltaTime;
        if(TimerDown < 0) TimerDown = 0;
        if(TimerDown == 0)
            {
            TimerDown = Timer;
            audio.clip = Sounds[i];
            audio.Play();
            }
        else
            {
                i=i-1;
            }
        }
    }

}

1 个答案:

答案 0 :(得分:0)

您不应在此处使用for循环。使用您的代码,您将减少阵列中每个AudioClip的TimerDown。每次更新时,您应该只TimerDown -= Time.deltaTime次。

相反,您可以将i(索引)存储在更新循环之外。

private int i = 0;

void Update ()
{
    if(TimerDown > 0) TimerDown -= Time.deltaTime;
    if(TimerDown < 0) TimerDown = 0;
    if(TimerDown == 0)
    {
        TimerDown = Timer;
        audio.clip = Sounds[i % Sounds.Length];
        i++;
        audio.Play();
    }
}