- Home /
Play AudioClips from a List by using yield WaitForSeconds (C#)
I wanna play an AudioClip by pressing the M-Button and then it has to wait until the clip is finished an then it should start with the next clip from the songlist so until now i have this script(only this part), and there are no syntax mistakes It would be pretty nice if someone could help :)
using UnityEngine; using System.Collections; using System.Collections.Generic;
public class RadioManager : MonoBehaviour { // Musik Variablen public List SongList = new List(); public bool stop = true; public bool play = false;
void Start ()
{
}
// Update is called once per frame
void FixedUpdate ()
{
RadioSound();
}
IEnumerator RadioSound()
{
if(Input.GetKey(KeyCode.M))
{
int index=0;
while(index>=0 && stop && !play)
{
if(index<=7)
{
audio.PlayOneShot(SongList[index].song);
play=true;
stop=false;
yield return new WaitForSeconds(SongList[index].song.length);
}
else
{
index=0;
}
index++;
stop=true;
play=false;
}
}
Answer by EliteMossy · Feb 15, 2013 at 11:28 PM
You are setting stop to true after the first song, i would do it like this:
void Start () { StartCoroutine(RadioSound()); }
IEnumerator RadioSound()
{
while ( true )
{
yield return new WaitForSeconds(0.1f);
if ( !Input.GetKey(KeyCode.M) && !play)
{
continue;
}
for ( int index = 0; index < SongList.Count, index++)
{
audio.PlayOneShot(SongList[index].song);
play = true;
yield return new WaitForSeconds(SongList[index].song.length);
}
play = false;
}
}
Something like that :) Thinking about it i was not 100% sure if you want it that the clips are not continuous, ie pressing m again plays the next song. If so then this is what you are after
void Start() { StartCoroutine(RadioSound()); }
IEnumerator RadioSound()
{
int index = 0;
while ( true )
{
yield return new WaitForEndOfFrame();
if ( !Input.GetKey(KeyCode.M) )
{
continue;
}
if ( index >= SongList.Count )
{
index = 0;
}
audio.PlayOneShot(SongList[index].song);
yield return new WaitForSeconds(SongList[index].song.length);
index++;
}
}
thanks :) if i press m again,after its finished it plays the second clip do u also now how to do this automatically? so that it plays the second one after finishing the first, its not necesarry, only if u can help :)
ah i didnt tried the first one :) thanks it helped very much
Your answer
Follow this Question
Related Questions
IEnumerator's did not read "bool" after yield return new WaitForSeconds. 1 Answer
Multiple Cars not working 1 Answer
Distribute terrain in zones 3 Answers
how to yield in C# 1 Answer
Proper Way to Wait in C# 1 Answer