Exemplo n.º 1
0
    //3D 音效按优先级和距离排序
    private int AudioSourceComparison(EffectAudioSourceItem a, EffectAudioSourceItem b)
    {
        // 是否在播放中
        if (!a.IsPlaying() && b.IsPlaying())
        {
            return(-1);
        }
        else if (a.IsPlaying() && !b.IsPlaying())
        {
            return(1);
        }
        else if (a.IsPlaying() && b.IsPlaying())
        {
            // 按照播放优先级, 小在前
            if (a.priority != b.priority)
            {
                return(a.priority > b.priority ? 1 : -1);
            }

            // 按照距离远近
            return(DistanceComparison(a.attachedObj.transform.position, b.attachedObj.transform.position));
        }

        return(0);
    }
Exemplo n.º 2
0
    public string Play3DNpcShout(string audioName, Vector3 pos, int sortId = 0, bool isLoop = false)
    {
        if (IsNpcVoicePlaying())
        {
            return(string.Empty);
        }

        string eventName = Util.FixPathString(audioName);

#if LOG_WWISE && UNITY_EDITOR
        Common.HobaDebuger.LogWarningFormat("[UnityAudio] Playing [Wwise] Event: {0}", eventName);
#endif

//         if (string.IsNullOrEmpty(eventName))
//         {
//             for (var i = 0; i < _npcShout3DAndioSourceList.Count; ++i)
//             {
//                 UpdateAudioState(_npcShout3DAndioSourceList[i], PlayState.Stop, false);
//             }
//             return string.Empty;
//         }

        EffectAudioSourceItem item = _PlaySFX(eventName, AudioType.S3D, null, pos, sortId, EffectSoundType.NpcShout3D);
        return(item != null ? item.playingId : string.Empty);
    }
Exemplo n.º 3
0
    public void Reset()
    {
        _BgmSoundEntry.Reset();

        _EnvironmentSoundEntry.Reset();

        _WeatherSoundEntry.Reset();

        {
            int nCount = _effectAudioSourceList.Count;
            for (int i = 0; i < nCount; ++i)
            {
                EffectAudioSourceItem item = _effectAudioSourceList[i];
                if (item.audioSource != null)
                {
                    // if(item.audioSource.isPlaying)
                    item.audioSource.Stop();
                    GameObject.Destroy(item.audioSource.gameObject);
                    item.audioSource = null;
                }
                item.Reset();
            }
            _effectAudioSourceList.Clear();
        }

        _ClipCache.Clear();

        CheckAudioListener();
    }
Exemplo n.º 4
0
    private int AudioSourceComparison2D(EffectAudioSourceItem a, EffectAudioSourceItem b)
    {
        // 是否在播放中
        if (!a.IsPlaying() && b.IsPlaying())
        {
            return(-1);
        }
        else if (a.IsPlaying() && !b.IsPlaying())
        {
            return(1);
        }
        else if (a.IsPlaying() && b.IsPlaying())
        {
            // 按照播放优先级, 小在前
            if (a.priority != b.priority)
            {
                return(a.priority > b.priority ? 1 : -1);
            }

            // 按照距离远近
            return(0);
        }

        return(0);
    }
Exemplo n.º 5
0
    public void Stop3DAudio(string audioName, string audio_source)
    {
        if (string.IsNullOrEmpty(audioName))
        {
            return;
        }

        string eventName = Util.FixPathString(audioName);

        for (int i = 0; i < _effect3DAudioSourceList.Count; ++i)
        {
            EffectAudioSourceItem item = _effect3DAudioSourceList[i];
            if (item.attachedObj != null && (string.IsNullOrEmpty(audio_source) || item.playingId == audio_source))
            {
                if (eventName == item.audioName)
                {
                    UpdateAudioState(item, PlayState.Stop, item.HaveSwitch());
                }
            }
        }

        for (int i = 0; i < _attachedEffect3DAudioSourceList.Count; ++i)
        {
            EffectAudioSourceItem item = _attachedEffect3DAudioSourceList[i];
            if (item.attachedObj != null && (string.IsNullOrEmpty(audio_source) || item.playingId == audio_source))
            {
                if (eventName == item.audioName)
                {
                    UpdateAudioState(item, PlayState.Stop, item.HaveSwitch());
                }
            }
        }
    }
Exemplo n.º 6
0
    public void Stop2DAudio(string audioName, string audio_source)
    {
        if (string.IsNullOrEmpty(audioName))
        {
            return;
        }

        for (int i = 0; i < _effectAudioSourceList.Count; ++i)
        {
            EffectAudioSourceItem item = _effectAudioSourceList[i];

            AudioSource audioSource = item.audioSource;
            if (audioSource != null && (string.IsNullOrEmpty(audio_source) || audioSource.name == audio_source))
            {
                if (audioName == item.audioName)
                {
                    if (item.isLoading == 1)
                    {
                        item.isLoading = 0;
                    }
                    else
                    {
                        UpdateAudioState(item, PlayState.Pause);
                    }
                    break;
                }
            }
        }
    }
Exemplo n.º 7
0
    private void UpdateAudioState(EffectAudioSourceItem item, PlayState ps, bool useSwitch)
    {
        if (item == null)
        {
            return;
        }

        if (ps == PlayState.Resume)
        {
            if (item.attachedObj != null && !item.IsPlaying())
            {
                if (useSwitch)
                {
                    item.PlayWithSwitch(item.audioName, item.switchGroup, item.switchState);
                }
                else
                {
                    item.Play(item.audioName);
                }
            }
        }
        else if (ps == PlayState.Stop || ps == PlayState.Pause)
        {
            if (item.attachedObj != null)
            {
                item.Stop();
            }
        }
    }
Exemplo n.º 8
0
    //3D 音效按优先级和距离排序
    private int AudioSourceComparison(EffectAudioSourceItem a, EffectAudioSourceItem b)
    {
        if (a.isLoading != b.isLoading)
        {
            return(a.isLoading > b.isLoading ? 1 : -1);
        }

        // 是否在播放中
        if (!a.audioSource.isPlaying && b.audioSource.isPlaying)
        {
            return(-1);
        }
        else if (a.audioSource.isPlaying && !b.audioSource.isPlaying)
        {
            return(1);
        }
        else if (a.audioSource.isPlaying && b.audioSource.isPlaying)
        {
            // 按照播放优先级, 小在前
            if (a.priority != b.priority)
            {
                return(a.priority > b.priority ? 1 : -1);
            }

            // 按照距离远近
            return(DistanceComparison(a.audioSource.transform.position, b.audioSource.transform.position));
        }

        return(0);
    }
Exemplo n.º 9
0
    //更新播放状态
    private void UpdateAudioState(EffectAudioSourceItem item, PlayState ps)
    {
        if (item == null)
        {
            return;
        }

        if (ps == PlayState.Resume)
        {
            if (item.audioSource != null && !item.audioSource.isPlaying)
            {
                item.audioSource.Play();
            }
        }
        else if (ps == PlayState.Stop || ps == PlayState.Pause)
        {
            if (item.audioSource != null && item.audioSource.isPlaying)
            {
                item.audioSource.Stop();

                if (ps == PlayState.Stop)
                {
                    _ClipCache.Remove(item.audioName);
                    item.audioSource.clip = null;
                }
            }
        }
    }
Exemplo n.º 10
0
    public void OnWorldRelease()
    {
        _IsInWorld = false;

        List <EffectAudioSourceItem>[] effectSoundListArray =
        {
            _effect3DAudioSourceList,
            _attachedEffect3DAudioSourceList,
            _effect2DAudioSourceList,
            _footStep3DAudioSourceList,
            _static3DAudioSourceList,
            _npcVoice3DAudioSourceList,
            _npcShout3DAndioSourceList,
            _heartbeat2DAudioSourceList
        };
        for (int n = 0; n < effectSoundListArray.Length; ++n)
        {
            List <EffectAudioSourceItem> soundList = effectSoundListArray[n];
            int nCount = soundList.Count;
            for (int i = 0; i < nCount; ++i)
            {
                EffectAudioSourceItem item = soundList[i];
                if (item.attachedObj != null)
                {
                    item.Stop();
                }
            }
        }
    }
Exemplo n.º 11
0
 //按优先级及距离获取可用的Channel
 private EffectAudioSourceItem GetUsableItem(AudioType aType, int priority, Vector3 pos)
 {
     if (_effectAudioSourceList.Count > 0)
     {
         EffectAudioSourceItem item = GetFirstItem(_effectAudioSourceList);
         if (item != null && item.isLoading == 0)
         {
             if (item.audioSource != null && item.audioSource.isPlaying)
             {
                 if (item.priority > priority)
                 {
                     return(null);
                 }
                 else if (item.priority == priority && aType == AudioType.S3D)
                 {
                     if (DistanceComparison(item.audioSource.transform.position, pos) > 0)
                     {
                         return(null);
                     }
                 }
             }
             return(item);
         }
     }
     return(null);
 }
Exemplo n.º 12
0
    private EffectAudioSourceItem GetFirstItem(List <EffectAudioSourceItem> soundList, bool b3D)
    {
        if (soundList == null || soundList.Count <= 0)
        {
            return(null);
        }

        //选一个最小项
        EffectAudioSourceItem item = soundList[0];

        if (b3D)
        {
            for (int i = 1; i < soundList.Count; ++i)
            {
                if (AudioSourceComparison(item, soundList[i]) > 0)
                {
                    item = soundList[i];
                }
            }
        }
        else
        {
            for (int i = 1; i < soundList.Count; ++i)
            {
                if (AudioSourceComparison2D(item, soundList[i]) > 0)
                {
                    item = soundList[i];
                }
            }
        }

        return(item);
    }
Exemplo n.º 13
0
    private EffectAudioSourceItem _PlaySFX(string audioName, AudioType aType, Transform point, Vector3 pos, int sortId, EffectSoundType type)
    {
        if (string.IsNullOrEmpty(audioName))
        {
            return(null);
        }

        if (_IsEffectAudioEnabled)
        {
            CheckAudioListener();

            SafeInitSFX();

            EffectAudioSourceItem item_arranged = GetUsableItem(aType, sortId, pos, type);

            if (item_arranged != null)
            {
                item_arranged.audioName = audioName;
                if (item_arranged.id != -1 && item_arranged.attachedObj != null)
                {
                    if (type == EffectSoundType.Effect3D || type == EffectSoundType.AttachEffect3D || type == EffectSoundType.Effect2D || type == EffectSoundType.FootStep3D)
                    {
                        if (item_arranged.IsPlaying())
                        {
                            item_arranged.Stop();
                        }
                    }
                    else
                    {
                        item_arranged.Stop();
                    }

                    GetProperSettingOfItem(item_arranged, aType, audioName, sortId);

                    if (aType == AudioType.AttS3D)
                    {
                        item_arranged.attachedPos = point;
                        item_arranged.attachedObj.transform.position = point.position;
                    }
                    if (aType == AudioType.S3D)
                    {
                        item_arranged.attachedObj.transform.position = pos;
                    }

                    if (item_arranged.attachedObj != null)
                    {
                        item_arranged.Play(audioName);
                    }

                    return(item_arranged);
                }
            }
        }

        return(null);
    }
Exemplo n.º 14
0
    public string Play2DAudio(string audioName, int sortId = 0, bool isLoop = false)
    {
        string eventName = Util.FixPathString(audioName);

#if LOG_WWISE && UNITY_EDITOR
        Common.HobaDebuger.LogWarningFormat("[UnityAudio] Playing [Wwise] Event: {0}", eventName);
#endif

        EffectAudioSourceItem item = _PlaySFX(eventName, AudioType.S2D, null, Vector3.zero, sortId, EffectSoundType.Effect2D);
        return(item != null ? item.playingId : string.Empty);
    }
Exemplo n.º 15
0
    public string PlayFootStepAudio(string audioName, Vector3 pos, int sortId = 0, bool isLoop = false)
    {
        string eventName = audioName;

#if LOG_WWISE && UNITY_EDITOR
        Common.HobaDebuger.LogWarningFormat("[UnityAudio] Playing [Wwise] Event: {0}", eventName);
#endif

        EffectAudioSourceItem item = _PlaySFX(eventName, AudioType.S3D, null, pos, sortId, EffectSoundType.FootStep3D);
        return(item != null ? item.playingId : string.Empty);
    }
Exemplo n.º 16
0
    public string Play2DAudio(string audioName, int sortId = 0, bool isLoop = false)
    {
        if (CUnityUtil.IsWwiseAudioName(audioName))
        {
            return(string.Empty);
        }

        EffectAudioSourceItem item = _PlaySFX(audioName, AudioType.S2D, null, Vector3.zero, sortId, isLoop);

        return(item != null && item.audioSource != null ? item.audioSource.name : string.Empty);
    }
Exemplo n.º 17
0
 private bool IsStaticAudioPlaying(string audioName)
 {
     for (int i = 0; i < _static3DAudioSourceList.Count; ++i)
     {
         EffectAudioSourceItem item = _static3DAudioSourceList[i];
         if (item.audioName == audioName && item.IsPlaying())
         {
             return(true);
         }
     }
     return(false);
 }
Exemplo n.º 18
0
    private void UpdateSoundPos()
    {
        int nCount = _attachedEffect3DAudioSourceList.Count;

        for (int i = 0; i < nCount; ++i)
        {
            EffectAudioSourceItem item = _attachedEffect3DAudioSourceList[i];
            if (item.attachedObj != null && null != item.attachedPos)
            {
                item.attachedObj.transform.position = item.attachedPos.position;
            }
        }
    }
Exemplo n.º 19
0
    private void GetProperSettingOfItem(EffectAudioSourceItem item, AudioType aType, string audioName, int priority = 0)
    {
        if (item != null && !string.IsNullOrEmpty(audioName))
        {
            item.audioName   = audioName;
            item.priority    = priority;
            item.attachedPos = null;

            if (item.attachedObj != null)
            {
                item.attachedObj.transform.localPosition = Vector3.zero;
            }
        }
    }
Exemplo n.º 20
0
        private void BgmEventCallback(object in_cookie, AkCallbackType in_type, AkCallbackInfo in_info)
        {
            EffectAudioSourceItem item = in_cookie as EffectAudioSourceItem;

            if (in_type == AkCallbackType.AK_EndOfEvent)
            {
                item.playingId = string.Empty;

                if (this == WwiseSoundMan.Instance.BGEffectAudioItem)
                {
                    WwiseSoundMan.Instance.BGEffectAudioItem = null;
                }
            }
        }
Exemplo n.º 21
0
    private void GetProperSettingOfItem(EffectAudioSourceItem item, AudioType aType, AudioClip audioClip, string audioName, int priority = 0, bool IsLoop = false)
    {
        //if (audioClip.name.Contains("Battle01"))
        //{
        //    Debug.Log("aType " + aType);
        //}

        if (item != null && audioClip != null)
        {
            if (aType == AudioType.AttS3D || aType == AudioType.S2D || aType == AudioType.S3D)
            {
                AudioSource audioSource = item.audioSource;

                if (audioSource != null)
                {
                    /*
                     *  if (audioSource.clip != null && _ClipCache != null && !string.IsNullOrEmpty(item.audioName) && _ClipCache.ContainsKey(item.audioName))
                     *  {
                     *      var curClip = _ClipCache[item.audioName];
                     *      //Destroy(curClip);
                     *      _ClipCache.Remove(item.audioName);
                     *  }
                     */
                    item.audioName   = audioName;
                    item.priority    = priority;
                    item.attachedPos = null;
                    if (audioSource.isPlaying)
                    {
                        audioSource.Stop();
                    }

                    //audioSource.transform.position = Vector3.zero;
                    audioSource.transform.localPosition = Vector3.zero;
                    audioSource.clip   = audioClip;
                    audioSource.volume = EffectFinalVolume;
                    if (AudioType.S3D == aType || AudioType.AttS3D == aType)
                    {
                        audioSource.spatialBlend = 1f;
                    }
                    else if (aType == AudioType.S2D)
                    {
                        audioSource.spatialBlend = 0f;
                    }

                    audioSource.loop = IsLoop;
                }
            }
        }
    }
Exemplo n.º 22
0
    public string Play3DAudio(string audioName, Vector3 pos, int sortId = 0, bool isLoop = false)
    {
        if (Main.HostPalyer != null && Util.SquareDistanceH(Main.HostPalyer.position, pos) > MaxEffectAudioDistSqr)
        {
            //Common.HobaDebuger.LogErrorFormat("Play3DAudio: {0}", audioName);
            return(string.Empty);
        }

        string eventName = Util.FixPathString(audioName);

#if LOG_WWISE && UNITY_EDITOR
        Common.HobaDebuger.LogWarningFormat("[UnityAudio] Playing [Wwise] Event: {0}", eventName);
#endif

        EffectAudioSourceItem item = _PlaySFX(eventName, AudioType.S3D, null, pos, sortId, EffectSoundType.Effect3D);
        return(item != null ? item.playingId : string.Empty);
    }
Exemplo n.º 23
0
 private void SafeInitSFX()
 {
     if (_effectAudioSourceList.Count == 0)
     {
         for (int i = 0; i < MaxEffectChannel; ++i)
         {
             GameObject go = new GameObject(HobaText.Format("effect{0}", i));
             go.transform.parent = transform;
             AudioSource           src = go.AddComponent <AudioSource>();
             EffectAudioSourceItem m   = new EffectAudioSourceItem();
             m.id                      = i;
             m.audioSource             = src;
             m.priority                = 0;
             m.audioSource.minDistance = 10;
             m.audioSource.maxDistance = 30;
             _effectAudioSourceList.Add(m);
         }
     }
 }
Exemplo n.º 24
0
    public void Reset()
    {
        _IsLoadingShow = false;

        _BgmSoundEntry.Reset();

        _EnvironmentSoundEntry.Reset();

        _WeatherSoundEntry.Reset();


        List <EffectAudioSourceItem>[] effectSoundListArray =
        {
            _effect3DAudioSourceList,
            _attachedEffect3DAudioSourceList,
            _effect2DAudioSourceList,
            _footStep3DAudioSourceList,
            _static3DAudioSourceList,
            _npcVoice3DAudioSourceList,
            _npcShout3DAndioSourceList,
            _heartbeat2DAudioSourceList
        };
        for (int n = 0; n < effectSoundListArray.Length; ++n)
        {
            List <EffectAudioSourceItem> soundList = effectSoundListArray[n];
            int nCount = soundList.Count;
            for (int i = 0; i < nCount; ++i)
            {
                EffectAudioSourceItem item = soundList[i];
                if (item.attachedObj != null)
                {
                    item.Stop();
                    GameObject.Destroy(item.attachedObj);
                    item.attachedObj = null;
                }
                item.Reset();
            }
            soundList.Clear();
        }

        CheckAudioListener();
    }
Exemplo n.º 25
0
    //刷新Attach声源位置
    private void UpdateSoundsPos()
    {
        //if (_AudioListener == null && Camera.main != null)
        //{
        //    _AudioListener = Camera.main.gameObject.GetComponent<AudioListener>();
        //    if (_AudioListener == null)
        //        _AudioListener = Camera.main.gameObject.AddComponent<AudioListener>();
        //}

        int nCount = _effectAudioSourceList.Count;

        for (int i = 0; i < nCount; ++i)
        {
            EffectAudioSourceItem item = _effectAudioSourceList[i];
            if (item.audioSource != null && null != item.attachedPos)
            {
                item.audioSource.transform.position = item.attachedPos.position;
            }
        }
    }
Exemplo n.º 26
0
    public string Play2DHeartBeat(string audioName, int sortId = 0, bool isLoop = false)
    {
        string eventName = Util.FixPathString(audioName);

#if LOG_WWISE && UNITY_EDITOR
        Common.HobaDebuger.LogWarningFormat("[UnityAudio] Playing [Wwise] Event: {0}", eventName);
#endif

        if (string.IsNullOrEmpty(eventName))
        {
            for (var i = 0; i < _heartbeat2DAudioSourceList.Count; ++i)
            {
                UpdateAudioState(_heartbeat2DAudioSourceList[i], PlayState.Stop, false);
            }
            return(string.Empty);
        }

        EffectAudioSourceItem item = _PlaySFX(eventName, AudioType.S2D, null, Vector3.zero, sortId, EffectSoundType.Heartbeat2D);
        return(item != null ? item.playingId : string.Empty);
    }
Exemplo n.º 27
0
    private void StopStatic3DAudio(string audioName, string audio_source)
    {
        if (string.IsNullOrEmpty(audioName))
        {
            return;
        }

        string eventName = audioName;

        for (int i = 0; i < _static3DAudioSourceList.Count; ++i)
        {
            EffectAudioSourceItem item = _static3DAudioSourceList[i];
            if (item.attachedObj != null && (string.IsNullOrEmpty(audio_source) || item.playingId == audio_source))
            {
                if (eventName == item.audioName)
                {
                    UpdateAudioState(item, PlayState.Pause, item.HaveSwitch());
                    break;
                }
            }
        }
    }
Exemplo n.º 28
0
    private void GetProperSettingOfItem(CSoundEntry soundEntry, AudioClip audioClip, string audioName)
    {
        EffectAudioSourceItem item = soundEntry.Item;

        if (item != null)
        {
            if (!string.IsNullOrEmpty(item.audioName))
            {
                //AudioClip curClip = _ClipCache[item.audioName];
                //Destroy(curClip);
                _ClipCache.Remove(item.audioName);
            }
            AudioSource audioSource = item.audioSource;
            if (audioSource != null)
            {
                audioSource.clip     = audioClip;
                audioSource.loop     = true;
                audioSource.priority = 0;
                audioSource.volume   = 0;
            }
            item.audioName = audioName;
        }
    }
Exemplo n.º 29
0
    private void SafeInitSFX()
    {
        if (_effect3DAudioSourceList.Count == 0)
        {
            for (int i = 0; i < MaxEffect3DChannel; ++i)
            {
                GameObject go = new GameObject(HobaText.Format("effect3d{0}", i));
                go.transform.parent = AudioItems.transform;
                EffectAudioSourceItem m = new EffectAudioSourceItem();
                m.id          = i;
                m.attachedObj = go;
                m.priority    = 0;
                _effect3DAudioSourceList.Add(m);
            }
        }

        if (_attachedEffect3DAudioSourceList.Count == 0)
        {
            for (int i = 0; i < MaxAttachedEffect3DChannel; ++i)
            {
                GameObject go = new GameObject(HobaText.Format("attachedeffect3d{0}", i));
                go.transform.parent = AudioItems.transform;
                EffectAudioSourceItem m = new EffectAudioSourceItem();
                m.id          = i;
                m.attachedObj = go;
                m.priority    = 0;
                _attachedEffect3DAudioSourceList.Add(m);
            }
        }

        if (_effect2DAudioSourceList.Count == 0)
        {
            for (int i = 0; i < MaxEffect2DChannel; ++i)
            {
                GameObject go = new GameObject(HobaText.Format("effect2d{0}", i));
                go.transform.parent = AudioItems.transform;
                EffectAudioSourceItem m = new EffectAudioSourceItem();
                m.id          = i;
                m.attachedObj = go;
                m.priority    = 0;
                _effect2DAudioSourceList.Add(m);
            }
        }

        if (_static3DAudioSourceList.Count == 0)
        {
            for (int i = 0; i < MaxStaticEffectChannel; ++i)
            {
                GameObject go = new GameObject(HobaText.Format("static{0}", i));
                go.transform.parent = AudioItems.transform;
                EffectAudioSourceItem m = new EffectAudioSourceItem();
                m.id          = i;
                m.attachedObj = go;
                m.priority    = 0;
                _static3DAudioSourceList.Add(m);
            }
        }

        if (_footStep3DAudioSourceList.Count == 0)
        {
            for (int i = 0; i < MaxFootStepEffectChannel; ++i)
            {
                GameObject go = new GameObject(string.Format("footstep{0}", i));
                go.transform.parent = AudioItems.transform;
                EffectAudioSourceItem m = new EffectAudioSourceItem();
                m.id          = i;
                m.attachedObj = go;
                m.priority    = 0;
                _footStep3DAudioSourceList.Add(m);
            }
        }

        if (_npcVoice3DAudioSourceList.Count == 0)
        {
            for (int i = 0; i < MaxNpcVoiceEffectChannel; ++i)
            {
                GameObject go = new GameObject(string.Format("npcvoice3d{0}", i));
                go.transform.parent = AudioItems.transform;
                EffectAudioSourceItem m = new EffectAudioSourceItem();
                m.id          = i;
                m.attachedObj = go;
                m.priority    = 0;
                _npcVoice3DAudioSourceList.Add(m);
            }
        }

        if (_npcShout3DAndioSourceList.Count == 0)
        {
            for (int i = 0; i < MaxNpcShoutEffectChannel; ++i)
            {
                GameObject go = new GameObject(string.Format("npcshout3d{0}", i));
                go.transform.parent = AudioItems.transform;
                EffectAudioSourceItem m = new EffectAudioSourceItem();
                m.id          = i;
                m.attachedObj = go;
                m.priority    = 0;
                _npcShout3DAndioSourceList.Add(m);
            }
        }

        if (_heartbeat2DAudioSourceList.Count == 0)
        {
            for (int i = 0; i < MaxHeartBeatEffectChannel; ++i)
            {
                GameObject go = new GameObject(string.Format("heartbeat{0}", i));
                go.transform.parent = AudioItems.transform;
                EffectAudioSourceItem m = new EffectAudioSourceItem();
                m.id          = i;
                m.attachedObj = go;
                m.priority    = 0;
                _heartbeat2DAudioSourceList.Add(m);
            }
        }
    }
Exemplo n.º 30
0
    private EffectAudioSourceItem _PlaySFX(string audioName, AudioType aType, Transform point, Vector3 pos, int sortId, bool isLoop)
    {
        if (string.IsNullOrEmpty(audioName))
        {
            return(null);
        }

        if (_IsEffectAudioEnabled)
        {
            CheckAudioListener();

            SafeInitSFX();

            if (IsClipCached(audioName))
            {
                //PlayAttachAudio(_ClipCache[audioName], false, trans, audioName, sortId, IsLoop);
                EffectAudioSourceItem item = GetUsableItem(aType, sortId, pos);
                if (item != null && item.audioSource != null)
                {
                    AudioClip clip;
                    LoadCache(audioName, out clip);
                    GetProperSettingOfItem(item, aType, clip, audioName, sortId, isLoop);

                    if (aType == AudioType.AttS3D)
                    {
                        item.attachedPos = point;
                    }
                    if (aType == AudioType.S3D)
                    {
                        item.audioSource.transform.position = pos;
                    }

                    item.audioSource.Play();
                    return(item);
                }
            }
            else
            {
                EffectAudioSourceItem item_arranged = GetUsableItem(aType, sortId, pos);

                if (item_arranged != null)
                {
                    Action <UnityEngine.Object> callback = asset =>
                    {
                        if (!_IsEffectAudioEnabled || asset == null)
                        {
                            if (item_arranged != null)
                            {
                                item_arranged.isLoading = 0;
                                item_arranged.audioName = "";
                            }
                            return;
                        }

                        if (item_arranged != null)
                        {
                            if (item_arranged.id != -1 && item_arranged.audioSource != null)
                            {
                                if (item_arranged.isLoading == 1 && audioName == item_arranged.audioName)
                                {
                                    //EffectAudioSourceItem item = FindInternalItem(item_arranged);

                                    item_arranged.isLoading = 0;

                                    GetProperSettingOfItem(item_arranged, aType, asset as AudioClip, audioName, sortId, isLoop);

                                    if (aType == AudioType.AttS3D)
                                    {
                                        item_arranged.attachedPos = point;
                                    }
                                    if (aType == AudioType.S3D)
                                    {
                                        item_arranged.audioSource.transform.position = pos;
                                    }

                                    if (item_arranged.audioSource != null)
                                    {
                                        item_arranged.audioSource.Play();
                                    }
                                }
                            }
                            item_arranged = null;
                        }
                    };

                    item_arranged.isLoading = 1;
                    item_arranged.audioName = audioName;
                    //Debug.Log("Ask " + audioName + " " + item_arranged.audioSource.name);
                    CAssetBundleManager.AsyncLoadResource(audioName, callback, false);
                    return(item_arranged);
                }
            }
        }

        return(null);
    }