使用 Threading.Sleep(1000);在 C# 统一中
Using of Threading.Sleep(1000); in C# unity
我正在统一做一个小测验。我希望在单击正确答案时播放音频。虽然播放音频的行代码在thread.Sleep()之前,但在播放问答时,它在打开音频之前就休眠了!! 我将不胜感激任何帮助。提前致谢。
public void OnMouseDown()
{
checkAnswer();
}
public void checkAnswer()
{
if (Correct == true)
{
audioo = this.gameObject.GetComponent<AudioSource>();
audioo.enabled = true;
Thread.Sleep(5000);
NextQuiz.SetActive(true);
CurrentQuiz.SetActive(false);
}
else
{
}
}
音频播放发生在主线程上(Unity 主要是 single-threaded)并且您的代码使当前(当前的主)线程进入睡眠状态,因此在线程从睡眠中醒来之前不会播放音频。
要解决此问题,您可能需要考虑使用 Unity coroutines。启动 yield return new WaitForSeconds(5);
的协程,然后开始下一个测验。
我假设 unity 在停止休眠后正在播放音频?在这种情况下,为什么不简单地使用协程呢?类似于:
public void OnMouseDown(){
{
CheckAnswer();
}
public void CheckAnswer();
{
if (Correct == true)
{
audioo = this.gameObject.GetComponent<AudioSource>();
StartCoroutine(PlaySound(audioo));
}
else
{
}
}
IEnumerator PlaySound(AudioSource sound)
{
//Play the sound here, then load up the next question.
audioo.enabled = true;
yield return new WaitForSeconds(5f);
NextQuiz.SetActive(true);
CurrentQuiz.SetActive(false);
}
此外,您还可以通过简单地创建 2 个 AudioClip 变量并为其中一个分配正确的声音,为另一个分配不正确的声音,然后使用 audioo.Play(clipName) 以便播放合适的片段,像这样:
public AudioClip correctSound;
public AudioClip incorrectSound;
public void OnMouseDown(){
{
CheckAnswer();
}
public void CheckAnswer();
{
if (Correct == true)
{
audioo = this.gameObject.GetComponent<AudioSource>();
StartCoroutine(PlaySound(audioo, correctSound));
}
else
{
}
}
IEnumerator PlaySound(AudioSource audioSource, AudioClip audioClip)
{
//Play the sound here, then load up the next question.
audioSource.Play(audioClip);
yield return new WaitForSeconds(5f);
NextQuiz.SetActive(true);
CurrentQuiz.SetActive(false);
}
尝试类似的东西
我正在统一做一个小测验。我希望在单击正确答案时播放音频。虽然播放音频的行代码在thread.Sleep()之前,但在播放问答时,它在打开音频之前就休眠了!! 我将不胜感激任何帮助。提前致谢。
public void OnMouseDown()
{
checkAnswer();
}
public void checkAnswer()
{
if (Correct == true)
{
audioo = this.gameObject.GetComponent<AudioSource>();
audioo.enabled = true;
Thread.Sleep(5000);
NextQuiz.SetActive(true);
CurrentQuiz.SetActive(false);
}
else
{
}
}
音频播放发生在主线程上(Unity 主要是 single-threaded)并且您的代码使当前(当前的主)线程进入睡眠状态,因此在线程从睡眠中醒来之前不会播放音频。
要解决此问题,您可能需要考虑使用 Unity coroutines。启动 yield return new WaitForSeconds(5);
的协程,然后开始下一个测验。
我假设 unity 在停止休眠后正在播放音频?在这种情况下,为什么不简单地使用协程呢?类似于:
public void OnMouseDown(){
{
CheckAnswer();
}
public void CheckAnswer();
{
if (Correct == true)
{
audioo = this.gameObject.GetComponent<AudioSource>();
StartCoroutine(PlaySound(audioo));
}
else
{
}
}
IEnumerator PlaySound(AudioSource sound)
{
//Play the sound here, then load up the next question.
audioo.enabled = true;
yield return new WaitForSeconds(5f);
NextQuiz.SetActive(true);
CurrentQuiz.SetActive(false);
}
此外,您还可以通过简单地创建 2 个 AudioClip 变量并为其中一个分配正确的声音,为另一个分配不正确的声音,然后使用 audioo.Play(clipName) 以便播放合适的片段,像这样:
public AudioClip correctSound;
public AudioClip incorrectSound;
public void OnMouseDown(){
{
CheckAnswer();
}
public void CheckAnswer();
{
if (Correct == true)
{
audioo = this.gameObject.GetComponent<AudioSource>();
StartCoroutine(PlaySound(audioo, correctSound));
}
else
{
}
}
IEnumerator PlaySound(AudioSource audioSource, AudioClip audioClip)
{
//Play the sound here, then load up the next question.
audioSource.Play(audioClip);
yield return new WaitForSeconds(5f);
NextQuiz.SetActive(true);
CurrentQuiz.SetActive(false);
}
尝试类似的东西