我试图编写一种方法,该方法可以添加以指定间隔依次播放的任意数量的声音。
但是问题在于它工作不一致。那是:
我认为问题在于循环中的
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();
}
}
关于audio - 时间流逝的声音交替,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28280274/