/// <summary> /// 资源加载回调 /// </summary> /// <param name="cof"></param> /// <param name="res"></param> /// <param name="UserDataObj"></param> public void ResLoadCallBack(ResConfigData cof, ResNode res, System.Object UserDataObj) { if (!m_Valid) { return; } SoundConfigData config = cof as SoundConfigData; Sound ins = UserDataObj as Sound; if (null == config || !ins) { return; } m_ResNode = res; if (ApplyConfig()) { isFinish = false; if (config.bPlayOnAwake || bPlay) { Play(); } } }
private void ChangeState(string soundName, SoundState state) { SoundItem soundItem = GetSoundItemByName(soundName); SoundConfigData audioData = soundConfig.GetDataByKey(soundName); if (audioData == null || soundItem == null) { return; } soundItem.State = state; switch (state) { case SoundState.Loading: LoadingState(audioData); break; case SoundState.Play: PlayState(soundName, soundItem); break; case SoundState.Pause: PauseState(soundItem); break; case SoundState.Stop: StopState(soundName, soundItem); break; case SoundState.Error: ErrorState(soundName); break; } }
private void Load(SoundConfigData audioData) { LoadType loadType = (LoadType)audioData.LandType; if (loadType == LoadType.Resources) { AudioClip audioClip = ResoucesMgr.Instance.Load <AudioClip>(audioData.ResourcesPath, false); if (audioClip != null) { LoadFinish(audioData.Name, audioClip); } else { Debug.LogError(GetType() + "/Load()/ load audio error! soundName:" + audioData.Name); ChangeState(audioData.Name, SoundState.Error); } } else if (loadType == LoadType.AssetBundle) { string sceneName = audioData.SceneName; string abName = audioData.AssetBundlePath; string assetName = audioData.AssetName; AssetBundleMgr.Instance.LoadAssetBunlde(sceneName, abName); AudioClip audioClip = AssetBundleMgr.Instance.LoadAsset(sceneName, abName, assetName) as AudioClip; LoadFinish(audioData.Name, audioClip); } }
private static void CheckConfig(SoundConfigData cfgData) { if (cfgData == null) { return; } switch (cfgData.soundType) { case EMSoundType.Environment: { cfgData.b3DSound = false; cfgData.mixerGroupType = AudioMixerGroupType.BGM; } break; case EMSoundType.System: { cfgData.b3DSound = false; cfgData.mixerGroupType = AudioMixerGroupType.UI; } break; case EMSoundType.Skill: { cfgData.mixerGroupType = AudioMixerGroupType.Normal; } break; } }
private static void CopyConfig(int id, out SoundConfigData cfgData) { cfgData = new SoundConfigData(); if (m_DataTable.ContainsKey(id)) { cfgData.AssetBundleName = m_DataTable[id].AssetBundleName; cfgData.AssetName = m_DataTable[id].AssetName; cfgData.AssetGUID = m_DataTable[id].AssetGUID; cfgData.AssetSize_X = m_DataTable[id].AssetSize_X; cfgData.AssetSize_Y = m_DataTable[id].AssetSize_Y; cfgData.fromReference = m_DataTable[id].fromReference; cfgData.priority = m_DataTable[id].priority; cfgData.nID = m_DataTable[id].nID; cfgData.soundType = m_DataTable[id].soundType; cfgData.bBypassEffect = m_DataTable[id].bBypassEffect; cfgData.bBypassReverbZone = m_DataTable[id].bBypassReverbZone; cfgData.bPlayOnAwake = m_DataTable[id].bPlayOnAwake; cfgData.nPriority = m_DataTable[id].nPriority; cfgData.fPitch = m_DataTable[id].fPitch; cfgData.fStereoPan = m_DataTable[id].fStereoPan; cfgData.b3DSound = m_DataTable[id].b3DSound; cfgData.fReverZoneMix = m_DataTable[id].fReverZoneMix; cfgData.fDopplerLv = m_DataTable[id].fDopplerLv; cfgData.nSpread = m_DataTable[id].nSpread; cfgData.audioRoffType = m_DataTable[id].audioRoffType; cfgData.fMinDistance = m_DataTable[id].fMinDistance; cfgData.mixerGroupType = m_DataTable[id].mixerGroupType; cfgData.fDuartion = m_DataTable[id].fDuartion; cfgData.fDelayPlayTime = m_DataTable[id].fDelayPlayTime; cfgData.fIntervalBetweenPlayTimes = m_DataTable[id].fIntervalBetweenPlayTimes; } }
/// <summary> /// 加载声音配置 /// </summary> private static bool LoadSoundConfig(ref Dictionary <int, SoundConfigData> dataSet) { if (dataSet == null) { SoundSystemLog("参数dataset为null"); return(false); } string patch = ViewConfigManager.GetConfigFullPath(ConfigFileName); ScpReader SoundReader = new ScpReader(patch, true, 2); // 遍歷整個表并存儲起來 for (int i = 0; i < SoundReader.GetRecordCount(); ++i) { SoundConfigData data = new SoundConfigData(); data.nID = SoundReader.GetInt(i, (int)SoundConfigCol.COL_ID, 0); data.soundType = (EMSoundType)SoundReader.GetInt(i, (int)SoundConfigCol.COL_Type, 2); data.mixerGroupType = (AudioMixerGroupType)SoundReader.GetInt(i, (int)SoundConfigCol.COL_MixerGroupType, 1); data.nMixerGroupIndex = SoundReader.GetInt(i, (int)SoundConfigCol.COL_MixerGroupIndex, 0); data.bBypassEffect = SoundReader.GetInt(i, (int)SoundConfigCol.COL_BypassEffect, 0) > 0; data.bBypassReverbZone = SoundReader.GetInt(i, (int)SoundConfigCol.COL_BypassReverbZone, 0) > 0; data.bPlayOnAwake = SoundReader.GetInt(i, (int)SoundConfigCol.COL_PlayOnAwake, 1) > 0; data.nPriority = Mathf.Clamp(SoundReader.GetInt(i, (int)SoundConfigCol.COL_Priority, 128), 0, 256); data.fPitch = Mathf.Clamp(SoundReader.GetFloat(i, (int)SoundConfigCol.COL_Pitch, 1), -3.0f, 3.0f); data.fStereoPan = Mathf.Clamp(SoundReader.GetFloat(i, (int)SoundConfigCol.COL_StereoPan, 0), -1.0f, 1.0f); data.fReverZoneMix = Mathf.Clamp(SoundReader.GetFloat(i, (int)SoundConfigCol.COL_ReverZoneMix, 1), 0, 1.1f); data.b3DSound = SoundReader.GetInt(i, (int)SoundConfigCol.COL_3DSound, 1) > 0; data.fDopplerLv = Mathf.Clamp(SoundReader.GetFloat(i, (int)SoundConfigCol.COL_DopplerLv, 1), 0, 5.0f); data.nSpread = Mathf.Clamp(SoundReader.GetInt(i, (int)SoundConfigCol.COL_Spread, 0), 0, 360);; data.audioRoffType = (AudioRolloffMode)SoundReader.GetInt(i, (int)SoundConfigCol.COL_RolloffMode, 0); data.fMinDistance = SoundReader.GetFloat(i, (int)SoundConfigCol.COL_MinDistance, 1); data.fMaxDistance = SoundReader.GetFloat(i, (int)SoundConfigCol.COL_MaxDistance, 15); data.nPlayTimes = SoundReader.GetInt(i, (int)SoundConfigCol.COL_PlayTimes, 1); data.fDuartion = SoundReader.GetFloat(i, (int)SoundConfigCol.COL_Duartion, 0); data.fDelayPlayTime = SoundReader.GetFloat(i, (int)SoundConfigCol.COL_DelayTime, 0); data.fIntervalBetweenPlayTimes = SoundReader.GetFloat(i, (int)SoundConfigCol.COL_IntervalBetweenPlayTimes, 0); data.AssetBundleName = SoundReader.GetString(i, (int)SoundConfigCol.COL_AssetBundleName, ""); data.AssetName = SoundReader.GetString(i, (int)SoundConfigCol.COL_AssetName, ""); data.AssetGUID = SoundReader.GetString(i, (int)SoundConfigCol.COL_AssetGUID, ""); data.AssetSize_X = SoundReader.GetFloat(i, (int)SoundConfigCol.COL_AssetSize_X, -1); data.AssetSize_Y = SoundReader.GetFloat(i, (int)SoundConfigCol.COL_AssetSize_Y, -1); data.szDependAssetGUID = SoundReader.GetString(i, (int)SoundConfigCol.COL_DependAssetGUID, ""); if (dataSet.ContainsKey(data.nID)) { SoundSystemLog(ConfigFileName + "拥有重复的ID!"); dataSet[data.nID] = data; } else { CheckConfig(data); dataSet.Add(data.nID, data); } } SoundReader.Dispose(); SoundReader = null; return(true); }
/// <summary> /// 初始化 /// </summary> /// <param name="host">挂载物体</param> /// <param name="config">音效配置</param> /// <returns></returns> public bool Init(GameObject host, SoundConfigData config, int enityID = -1, bool _AsyncLoad = true) { Clear(); m_entityID = enityID; m_Config = config; m_host = host; m_AudioInstance = GetComponent <AudioSource>(); orginalVolume = m_AudioInstance.volume; //m_AudioInstance.hideFlags = HideFlags.HideAndDontSave; m_Valid = true; if (_AsyncLoad) { m_ResNode = AssetBundleManager.GetAssetsAsync(AssetType.Asset_Audio, config, this, this); } else { m_ResNode = AssetBundleManager.GetAssets(AssetType.Asset_Audio, config); } if (null == m_ResNode) { m_Valid = false; return(false); } bAsyncLoad = _AsyncLoad; if (!_AsyncLoad && m_ResNode.IsValid()) { if (ApplyConfig()) { isFinish = false; if (config.bPlayOnAwake || bPlay) { Play(); } } } return(true); }
public void Clear() { if (!m_Valid) { return; } bPlay = false; m_Config = null; //顺序不能乱 StopAllCoroutines(); if (m_AudioInstance) { m_AudioInstance.clip = null; m_AudioInstance.outputAudioMixerGroup = null; m_AudioInstance.Stop(); m_AudioInstance.volume = orginalVolume; } //删除资源 if (bAsyncLoad) { AssetBundleManager.DeleteAssetsAsync(ref m_ResNode, this, false); } else { AssetBundleManager.DeleteAssets(ref m_ResNode, false); } m_entityID = -1; m_ResNode = null; m_AudioInstance = null; m_host = null; currPlayTimes = 0; isFinish = true; m_Valid = false; bAsyncLoad = true; }
private void PlaySound(string soundName, Transform target, bool isLoop, DelSoundCallback soundCallback) { SoundConfigData audioData = soundConfig.GetDataByKey(soundName); if (audioData == null) { Debug.LogError(GetType() + "/PlaySound()/ play audio error! soundName:" + soundName); return; } if (dicAllSounds.ContainsKey(soundName)) { SoundItem soundItem = GetSoundItemByName(soundName); if (soundItem != null && soundItem.State != SoundState.Loading && soundItem.State != SoundState.Error) { soundItem.SoundName = soundName; soundItem.OnSoundCallback = soundCallback; soundItem.target = target; ChangeState(soundName, SoundState.Play); } } else { GameObject item = new GameObject(soundName); AudioSource audioSource = item.AddComponent <AudioSource>(); audioSource.playOnAwake = false; audioSource.loop = isLoop; SoundItem soundItem = item.AddComponent <SoundItem>(); soundItem.SoundName = soundName; soundItem.OnSoundCallback = soundCallback; soundItem.target = target; soundItem.Audio = audioSource; dicAllSounds.Add(soundName, soundItem); ChangeState(soundName, SoundState.Loading); } }
/// <summary> /// 创建音效 /// </summary> /// <param name="host">挂接对象</param> /// <param name="nSoundID">音效ID</param> /// <returns></returns> public static Sound CreateSound(GameObject host, int nSoundID, int entityID = -1, bool bAsyncLoad = true) { Sound Result = null; //第一版先不cache,小于0不创建 if (!bInit || nSoundID <= 0) { return(Result); } if (!m_DataTable.ContainsKey(nSoundID)) { SoundManager.SoundSystemLog("找不到音效配置,ID:" + nSoundID); return(Result); } SoundConfigData config = m_DataTable[nSoundID]; if (string.IsNullOrEmpty(config.AssetGUID) || string.IsNullOrEmpty(config.AssetName) || string.IsNullOrEmpty(config.AssetBundleName) ) { SoundManager.SoundSystemLog("音效配置,ID:" + nSoundID + ",没有绑定资源!"); return(Result); } //if (config.b3DSound) //{ // if (host != null && SoldierCamera.MainInstance() != null && SoldierCamera.MainInstance().target != null) // { // if (Vector3.SqrMagnitude(host.transform.position - SoldierCamera.MainInstance().target.position) > config.fMaxDistance * config.fMaxDistance) // { // return Result; // } // } //} Result = GetSoundInstance(); if (!Result.Init(host, config, entityID, bAsyncLoad)) { DeleteSound(ref Result); return(null); } Result.name = "Sound:<ID:" + nSoundID + ">"; HashSet <Sound> list = null; if (m_ActiveTable.TryGetValue(nSoundID, out list)) { list.Add(Result); } else { list = new HashSet <Sound>(); list.Add(Result); m_ActiveTable.Add(nSoundID, list); } return(Result); }
private void LoadingState(SoundConfigData audioData) { Load(audioData); }