声音在时间流逝中交替

Alternation of sounds in time lapse

我试着写了一个方法,可以添加任意数量的声音,按指定的时间间隔轮流播放。

但问题是它工作不一致。即:

我觉得问题是循环中的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;
            }
        }
    }

}

您不应在此处使用 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();
    }
}