コード例 #1
0
    /// <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();
            }
        }
    }
コード例 #2
0
        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;
            }
        }
コード例 #3
0
        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);
            }
        }
コード例 #4
0
ファイル: SoundManager_Data.cs プロジェクト: zwong91/Titan
    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;
        }
    }
コード例 #5
0
ファイル: SoundManager_Data.cs プロジェクト: zwong91/Titan
    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;
        }
    }
コード例 #6
0
ファイル: SoundManager_Data.cs プロジェクト: zwong91/Titan
    /// <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);
    }
コード例 #7
0
    /// <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);
    }
コード例 #8
0
    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;
    }
コード例 #9
0
        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);
            }
        }
コード例 #10
0
    /// <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);
    }
コード例 #11
0
 private void LoadingState(SoundConfigData audioData)
 {
     Load(audioData);
 }