// 变更控制状态:准备暂停 public void ToUnPause() { if (playingState == BGMPlayingState.Pausing) { playingControlState = BGMPlayingControlState.ToUnPause; } }
// 变更控制状态:准备停止 public void ToStop() { if (playingState == BGMPlayingState.Playing) { playingControlState = BGMPlayingControlState.ToStop; } }
// 变更控制状态:准备播放 public void ToPlay() { if (playingState != BGMPlayingState.Playing) { playingControlState = BGMPlayingControlState.ToPlay; } }
// Use this for initialization void Start() { audioSource = GetComponent <AudioSource>(); audioSource.loop = false; // 一开始的音频剪辑 if (startAudioClipIndex == -1 || startAudioClipIndex >= audioClips.Count || startAudioClipIndex < 0) { ChangeAudioClip(); } else { ChangeAudioClip(startAudioClipIndex); } playingState = BGMPlayingState.Initing; playingControlState = BGMPlayingControlState.ToPlay; audioClipsTime = new float[audioClips.Count]; for (int i = 0; i < audioClips.Count; i++) { audioClipsTime[i] = audioClips[i].length; } }
// Update is called once per frame void Update() { switch (playingControlState) { case BGMPlayingControlState.None: // 该换碟了! if (audioSource.isPlaying == false && playingState == BGMPlayingState.Playing) { // 如果开启淡入效果,并且此时刚好换放BGM if (playingState == BGMPlayingState.Initing && fadedOn) { StartFade(); } ChangeAudioClip(); playingControlState = BGMPlayingControlState.ToPlay; } break; case BGMPlayingControlState.ToPause: audioSource.Pause(); OnControlStateChangedDone(); playingState = BGMPlayingState.Pausing; break; case BGMPlayingControlState.ToPlay: // 如果开启淡入效果,并且此时刚好开始放BGM if (playingState == BGMPlayingState.Initing && fadedOn) { StartFade(); } audioSource.Play(); OnControlStateChangedDone(); playingState = BGMPlayingState.Playing; break; case BGMPlayingControlState.ToStop: audioSource.Stop(); OnControlStateChangedDone(); playingState = BGMPlayingState.Stoping; break; case BGMPlayingControlState.ToUnPause: audioSource.UnPause(); OnControlStateChangedDone(); playingState = BGMPlayingState.Playing; break; default: break; } }
// 控制状态变更完毕的一个回调函数 private void OnControlStateChangedDone() { playingControlState = BGMPlayingControlState.None; }