protected override void ProcessMsg(int key, QMsg msg) { switch (msg.msgId) { case (ushort)AudioEvent.SoundSwitch: AudioMsgWithBool soundSwitchMsg = msg as AudioMsgWithBool; mSoundOn = soundSwitchMsg.on; break; case (ushort)AudioEvent.MusicSwitch: AudioMsgWithBool musicSwitchMsg = msg as AudioMsgWithBool; mMusicOn = musicSwitchMsg.on; if (!mMusicOn) { StopMusic(); } break; case (ushort)AudioEvent.PlayMusic: Debug.LogFormat("play music msg: {0}, is musicOn: ", AudioEvent.PlayMusic.ToString(), mMusicOn); PlayMusic(msg as AudioMsgPlayMusic); break; case (ushort)AudioEvent.StopMusic: StopMusic(); break; case (ushort)AudioEvent.PlaySound: AudioMsgPlaySound audioMsgPlaySound = msg as AudioMsgPlaySound; PlaySound(audioMsgPlaySound); break; case (ushort)AudioEvent.PlayVoice: PlayVoice(msg as AudioMsgPlayVoice); break; case (ushort)AudioEvent.StopVoice: StopVoice(); break; case (ushort)AudioEvent.PlayNode: ICoroutineCmdNode msgPlayNode = (msg as AudioMsgWithNode).Node; StartCoroutine(msgPlayNode.Execute()); break; } }
/// <summary> /// 播放音效 /// </summary> void PlaySound(AudioMsgPlaySound msg) { AudioUnit unit = ObjectPool <AudioUnit> .Instance.Allocate(); unit.SetOnStartListener(delegate(AudioUnit soundUnit) { if (null != msg.onSoundBeganCallback) { msg.onSoundBeganCallback(); } unit.SetOnStartListener(null); }); unit.SetAudio(gameObject, msg.soundName, false); unit.SetOnFinishListener(delegate(AudioUnit soundUnit) { if (null != msg.onSoundEndedCallback) { msg.onSoundEndedCallback(); } unit.SetOnFinishListener(null); }); }