这是在保持空间时播放音频剪辑的代码段,此时它会延迟初始声音,但我希望能够在重复时延迟声音。
我知道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)]);
}
我将继续寻找解决方案,但与此同时,我们将不胜感激。
答案 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)]);
}