Esempio n. 1
0
    private void PlaySound(SoundEvents.Play e)
    {
        AudioItem aItem = GetAudioItem(e.audioID);

        if (aItem != null)
        {
            AudioClip clip = aItem.clip;

            if (clip)
            {
                if (e.audioSourceItemID != SoundEvents.SoundEvent.UNDEFINED)
                {
                    if (m_activeAudioSources.ContainsKey(e.audioSourceItemID))
                    {
                        if (m_activeAudioSources [e.audioSourceItemID].audioSource.clip == clip)
                        {
                            return;
                        }
                    }
                }

                float volume = aItem.volume;
                bool  isLoop = e.playType == SoundEvents.Play.PlayType.LOOP;
                if (e.volume != SoundEvents.SoundEvent.UNDEFINED)
                {
                    volume = e.volume;
                }

                var audioSource = SoundUtils.PlayClipAtPoint(clip, Vector3.zero, volume * m_soundGroupVolume[e.soundGroup], aItem.pitch, isLoop);
                GameObject.DontDestroyOnLoad(audioSource.gameObject);
                if (e.audioSourceItemID != SoundEvents.SoundEvent.UNDEFINED)
                {
                    if (m_activeAudioSources.ContainsKey(e.audioSourceItemID))
                    {
                        m_activeAudioSources [e.audioSourceItemID].audioSource.DOKill();
                        var obj = m_activeAudioSources[e.audioSourceItemID].audioSource.gameObject;
                        m_activeAudioSources [e.audioSourceItemID].audioSource.gameObject.GetComponent <AudioObjLifeObserver> ().onDestroy -= onAudioObjDestroyed;
                        GameObject.Destroy(obj);
                        var tempSoundData = m_activeAudioSources [e.audioSourceItemID];
                        m_activeAudioSources [e.audioSourceItemID] = new SoundData(audioSource, tempSoundData.soundGroup, volume);
                    }
                    else
                    {
                        m_activeAudioSources.Add(e.audioSourceItemID, new SoundData(audioSource, e.soundGroup, volume));
                    }
                    var lifeObserver = audioSource.gameObject.AddComponent <AudioObjLifeObserver> ();
                    lifeObserver.audioSourceID = e.audioSourceItemID;
                    lifeObserver.onDestroy    -= onAudioObjDestroyed;
                    lifeObserver.onDestroy    += onAudioObjDestroyed;
                }
            }
        }
    }