66 lines
1.4 KiB
C#
66 lines
1.4 KiB
C#
using UnityEngine;
|
|
using System.Collections.Generic;
|
|
|
|
// Idea from https://discussions.unity.com/t/play-audio-in-queue/239402/2
|
|
public class MusicManager : MonoBehaviour
|
|
{
|
|
public AudioClip intro;
|
|
|
|
public AudioClip loop;
|
|
|
|
public AudioClip outro;
|
|
|
|
private AudioSource audioSource;
|
|
|
|
private Queue<AudioClip> clipsQueue;
|
|
|
|
private bool isPaused = false;
|
|
|
|
// Start is called once before the first execution of Update after the MonoBehaviour is created
|
|
void Start()
|
|
{
|
|
audioSource = GetComponent<AudioSource>();
|
|
clipsQueue = new Queue<AudioClip>();
|
|
|
|
// Intro is only played once, so we enqueue it first.
|
|
clipsQueue.Enqueue(intro);
|
|
ResetQueue();
|
|
}
|
|
|
|
// Update is called once per frame
|
|
void FixedUpdate()
|
|
{
|
|
if (audioSource.isPlaying == false && !isPaused)
|
|
{
|
|
audioSource.clip = clipsQueue.Dequeue();
|
|
audioSource.Play();
|
|
|
|
if(clipsQueue.Count == 0)
|
|
{
|
|
ResetQueue();
|
|
}
|
|
}
|
|
}
|
|
|
|
private void ResetQueue()
|
|
{
|
|
clipsQueue.Enqueue(loop);
|
|
clipsQueue.Enqueue(loop);
|
|
clipsQueue.Enqueue(loop);
|
|
clipsQueue.Enqueue(loop);
|
|
clipsQueue.Enqueue(outro);
|
|
}
|
|
|
|
public void pauseMusic()
|
|
{
|
|
audioSource.Pause();
|
|
isPaused = true;
|
|
}
|
|
|
|
public void resumeMusic()
|
|
{
|
|
audioSource.UnPause();
|
|
isPaused = false;
|
|
}
|
|
}
|