我尝试编写一种方法,可以按指定的时间间隔依次添加任意数量的声音。
但问题是它的工作方式不一致。那就是:
我认为问题是循环中的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;
}
}
}
}
答案 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();
}
}