コード例 #1
0
ファイル: AudioManager.cs プロジェクト: goodGsger/EraPro
        /// <summary>
        /// 播放音频
        /// </summary>
        /// <param name="item"></param>
        /// <returns></returns>
        private AudioItem Play(AudioItem item)
        {
            // 存入id字典
            if (item.id != null)
            {
                if (_idDict.ContainsKey(item.id))
                {
                    Stop(item);
                }
                _idDict[item.id] = item;
            }

            // 存入拥有者字典
            if (item.owner != null)
            {
                Dictionary <string, AudioItem> dict;
                if (_ownerDict.TryGetValue(item.owner, out dict) == false)
                {
                    dict = _ownerDict[item.owner] = new Dictionary <string, AudioItem>();
                }
                dict[item.player.url] = item;
            }

            item.player.completeCallback = (player) =>
            {
                if (item.callback != null)
                {
                    item.callback.Invoke(item);
                }
                ReleaseAudioItem(item);
            };
            item.player.Play();

            return(item);
        }
コード例 #2
0
ファイル: AudioManager.cs プロジェクト: goodGsger/EraPro
        /// <summary>
        /// 释放音频
        /// </summary>
        /// <param name="item"></param>
        private void ReleaseAudioItem(AudioItem item)
        {
            // 移除id字典
            if (item.id != null)
            {
                if (_idDict.TryGetValue(item.id, out item))
                {
                    _idDict.Remove(item.id);
                }
            }

            // 移除拥有者字典
            if (item.owner != null)
            {
                Dictionary <string, AudioItem> dict;
                if (_ownerDict.TryGetValue(item.owner, out dict))
                {
                    if (dict.ContainsKey(item.player.url))
                    {
                        dict.Remove(item.player.url);
                    }
                }
            }

            App.objectPoolManager.ReleaseObject(item.player);
            item.player   = null;
            item.callback = null;
        }
コード例 #3
0
ファイル: AudioManager.cs プロジェクト: goodGsger/EraPro
 /// <summary>
 /// 设置音乐音量
 /// </summary>
 /// <param name="volume"></param>
 public void SetMusicVolume(float volume)
 {
     foreach (var v in _idDict)
     {
         AudioItem item = v.Value;
         if (item.type == AudioItemType.MUSIC)
         {
             item.player.volume = volume;
         }
     }
 }
コード例 #4
0
ファイル: AudioManager.cs プロジェクト: goodGsger/EraPro
 /// <summary>
 /// 设置音效音量
 /// </summary>
 /// <param name="volume"></param>
 public void SetEffectVolume(float volume)
 {
     foreach (var v in _idDict)
     {
         AudioItem item = v.Value;
         if (item.type == AudioItemType.EFFECT)
         {
             item.player.volume = volume;
         }
     }
 }
コード例 #5
0
ファイル: AudioManager.cs プロジェクト: goodGsger/EraPro
        /// <summary>
        /// 播放音乐
        /// </summary>
        /// <param name="url"></param>
        /// <returns></returns>
        public AudioItem PlayMusic(string url)
        {
            if (_musicEnabled == false)
            {
                return(null);
            }

            AudioItem item = CreateAudioItem(AudioItemType.MUSIC, url, url, null, _musicVolume, true, true);

            return(Play(item));
        }
コード例 #6
0
ファイル: AudioManager.cs プロジェクト: goodGsger/EraPro
        /// <summary>
        /// 播放音效
        /// </summary>
        /// <param name="url"></param>
        /// <param name="owner"></param>
        /// <param name="volume"></param>
        /// <param name="playWhenLoaded"></param>
        /// <returns></returns>
        public AudioItem PlayEffect(string url, string owner, float volume, bool playWhenLoaded)
        {
            if (_effectEnabled == false)
            {
                return(null);
            }

            AudioItem item = CreateAudioItem(AudioItemType.EFFECT, url, null, owner, _effectVolume * volume, false, playWhenLoaded);

            return(Play(item));
        }
コード例 #7
0
ファイル: AudioManager.cs プロジェクト: goodGsger/EraPro
        /// <summary>
        /// 播放音效
        /// </summary>
        /// <param name="url"></param>
        /// <returns></returns>
        public AudioItem PlayEffect(string url)
        {
            if (_effectEnabled == false)
            {
                return(null);
            }

            AudioItem item = CreateAudioItem(AudioItemType.EFFECT, url, null, null, _effectVolume);

            return(Play(item));
        }
コード例 #8
0
ファイル: AudioManager.cs プロジェクト: goodGsger/EraPro
        /// <summary>
        /// 播放音乐
        /// </summary>
        /// <param name="url"></param>
        /// <param name="id"></param>
        /// <param name="loop"></param>
        /// <param name="volume"></param>
        /// <param name="playWhenLoaded"></param>
        /// <param name="forcePlay"></param>
        /// <returns></returns>
        public AudioItem PlayMusic(string url, string id, bool loop, float volume, bool playWhenLoaded, bool forcePlay = false)
        {
            if (forcePlay == false && _idDict.ContainsKey(id))
            {
                return(_idDict[id]);
            }

            if (_musicEnabled == false)
            {
                return(null);
            }

            AudioItem item = CreateAudioItem(AudioItemType.MUSIC, url, id, null, _musicVolume * volume, loop, playWhenLoaded);

            return(Play(item));
        }
コード例 #9
0
ファイル: AudioManager.cs プロジェクト: goodGsger/EraPro
        /// <summary>
        /// 播放音效
        /// </summary>
        /// <param name="url"></param>
        /// <param name="id"></param>
        /// <param name="owner"></param>
        /// <param name="volume"></param>
        /// <param name="playWhenLoaded"></param>
        /// <param name="callback"></param>
        /// <returns></returns>
        public AudioItem PlayEffect(string url, string id, string owner, float volume, bool playWhenLoaded, Action <AudioItem> callback)
        {
            if (_effectEnabled == false)
            {
                return(null);
            }

            // 判断是否已经正在播放
            if (owner != null && HasAudiosByOwner(url, owner))
            {
                return(null);
            }

            AudioItem item = CreateAudioItem(AudioItemType.EFFECT, url, id, owner, _effectVolume * volume, false, playWhenLoaded, callback);

            return(Play(item));
        }
コード例 #10
0
ファイル: AudioManager.cs プロジェクト: goodGsger/EraPro
        /// <summary>
        /// 创建音频
        /// </summary>
        /// <param name="type"></param>
        /// <param name="url"></param>
        /// <param name="id"></param>
        /// <param name="owner"></param>
        /// <param name="volume"></param>
        /// <param name="loop"></param>
        /// <param name="playWhenLoaded"></param>
        /// <param name="callback"></param>
        /// <returns></returns>
        private AudioItem CreateAudioItem(AudioItemType type, string url, string id = null, string owner = null,
                                          float volume = 1f, bool loop = false, bool playWhenLoaded = false, Action <AudioItem> callback = null)
        {
            AudioItem item = new AudioItem();

            item.type     = type;
            item.id       = id;
            item.owner    = owner;
            item.callback = callback;
            AudioPlayer player = App.objectPoolManager.GetObject <AudioPlayer>();

            player.url            = url;
            player.volume         = volume;
            player.loop           = loop;
            player.playWhenLoaded = playWhenLoaded;
            player.audioSource    = behaviour.gameObject.AddComponent <AudioSource>();
            item.player           = player;
            return(item);
        }
コード例 #11
0
ファイル: AudioManager.cs プロジェクト: goodGsger/EraPro
 /// <summary>
 /// 停止播放
 /// </summary>
 /// <param name="item"></param>
 public void Stop(AudioItem item)
 {
     ReleaseAudioItem(item);
 }