コード例 #1
0
    /// <summary>
    ///
    /// </summary>
    void Update()
    {
        for (int j = 0; j < fadeInOut.Count; ++j)
        {
            soundAudioInfo soundInfo = fadeInOut[j];
            if (soundInfo.fadeCheck)
            {
                soundInfo.initailTime += Time.deltaTime;

                AudioSource tempAudioSouce = null;

                //! 尋找audioSource
                if (bgmAudios.ContainsKey(soundInfo.name))
                {
                    tempAudioSouce = bgmAudios[soundInfo.name];
                }
                else
                {
                    for (int i = 0; i < soundAudios.Count; i++)
                    {
                        if (soundInfo.audioClip.name == soundAudios[i].clip.name)
                        {
                            soundAudios[i].volume = (soundInfo.initailTime / soundInfo.fadeTime) * soundInfo.audioVolume;
                            tempAudioSouce        = soundAudios[i];
                            break;
                        }
                    }
                }
                //! 取失敗
                if (tempAudioSouce == null)
                {
                    Debug.LogError(" Fade Sound Fail");
                    return;
                }

                //! 淡入
                if (soundInfo.inOrOut)
                {
                    tempAudioSouce.volume = (soundInfo.initailTime / soundInfo.fadeTime) * soundInfo.audioVolume;
                }
                //! 淡出
                else
                {
                    tempAudioSouce.volume = soundInfo.audioVolume - (soundInfo.initailTime / soundInfo.fadeTime) * soundInfo.audioVolume;
                }

                //! 結束
                if (soundInfo.initailTime >= soundInfo.fadeTime)
                {
                    //! 淡出停止
                    if (!soundInfo.inOrOut)
                    {
                        tempAudioSouce.Stop();
                    }
                    soundInfo.fadeCheck = false;
                    fadeInOut.Remove(soundInfo);
                }
            }
        }
    }
コード例 #2
0
    /// <summary>
    /// Load跨場景BGM
    /// 目前assetbundle有一個bug,audioclip如果放在場景中,有被don't destroy on load
    /// 的物件參考到,在第2次進都同樣場景時,場景結束會把audioclip實體刪除,導致error,
    /// 所以跨場景BGM改用resource load.
    /// </summary>
    void LoadAudioClipFromResource()
    {
        for (int i = 0; i < loadFromResourcedAudioInfos.Count; i++)
        {
            string audioName = loadFromResourcedAudioInfos[i].name;
            string groupName = loadFromResourcedAudioInfos[i].group;

            if (SoundMgr.Singleton.IsBgmExist(audioName))
            {
                continue;
            }

            AudioClip audioClip = Resources.Load <AudioClip>(loadFromResourcedAudioInfos[i].resourcePath);

            if (audioClip != null)
            {
                soundAudioInfo audioInfo = new soundAudioInfo();
                audioInfo.name      = audioName;
                audioInfo.group     = groupName;
                audioInfo.audioClip = audioClip;

                soundAudioInfos.Add(audioInfo);
            }
        }
    }
コード例 #3
0
    /// <summary>
    /// 聲音淡入
    /// </summary>
    /// <param name="time">淡入時間</param>
    /// <param name="name">音效名子</param>
    /// <param name="valueVolume">最終音量</param>
    /// <param name="loop">背景音樂LOOP</param>
    public void FadeIn(float time, string name, float valueVolume = 1.0f, bool loop = true)
    {
        //!如果在字典裏面
        if (audioDic.ContainsKey(name))
        {
            soundAudioInfo tempAudioSource = audioDic[name];
            tempAudioSource.inOrOut   = true;
            tempAudioSource.fadeCheck = true;
            //! 結束音量
            tempAudioSource.audioVolume = valueVolume;
            //! 淡入時間
            tempAudioSource.fadeTime = time;
            //! 起始值
            tempAudioSource.initailTime = 0.0f;

            //! 播放音樂
            if (bgmAudios.ContainsKey(name))
            {
                if (!bgmAudios[name].isPlaying)
                {
                    PlayBGM(name, loop);
                }
            }
            else if (!bgmAudios.ContainsKey(name))
            {
                PlayBGM(name, loop);
            }
            else
            {
                bool check = false;
                for (int i = 0; i < soundAudios.Count; i++)
                {
                    if (audioDic[name].audioClip.name == soundAudios[i].clip.name)
                    {
                        if (!soundAudios[i].isPlaying)
                        {
                            PlaySound(audioDic[name].audioClip.name);
                        }
                        check = true;
                        break;
                    }
                }
                if (!check)
                {
                    PlaySound(audioDic[name].audioClip.name);
                }
            }
            //! 加入淡入淡出
            fadeInOut.Add(audioDic[name]);
        }
        else
        {
            Debug.LogWarning("cant find  audio by name => " + name);
        }
    }
コード例 #4
0
 /// <summary>
 /// 抽卡測試規格使用
 /// </summary>
 /// <param name="soundAudioInfos"></param>
 public void DeleteAudioSourceByRootScene(soundAudioInfo soundAudioInfos)
 {
     if (audioDic.ContainsKey(soundAudioInfos.name))
     {
         audioDic.Remove(soundAudioInfos.name);
     }
     else
     {
         Debug.LogError("No Key in the dictionary !! : " + soundAudioInfos.name);
     }
 }
コード例 #5
0
 /// <summary>
 /// other Scene one audio regist
 /// </summary>
 /// <param name="soundAudioInfos"></param>
 public void RegisterAudioSourceByRootScene(soundAudioInfo soundAudioInfos)
 {
     if ((soundAudioInfos.name == "") && (soundAudioInfos.audioClip != null))
     {
         soundAudioInfos.name = soundAudioInfos.audioClip.name;
     }
     if (!audioDic.ContainsKey(soundAudioInfos.name))
     {
         audioDic[soundAudioInfos.name] = soundAudioInfos;
     }
     else
     {
         Debug.LogError("Same Key in dictionary !! : " + soundAudioInfos.name);
     }
 }