Example #1
0
    /// <summary>
    /// BGM再生.
    /// </summary>
    /// <param name="type">Type.</param>
    public void Play(BgmType.eBgmType type)
    {
        // 同じ曲を再生しようとしていたら、何もしない.
        if (currentBgmDefine != null && type == currentBgmDefine.type)
        {
            return;
        }

        // すでにかかっていたら曲を止める.
        if (bgmAudioSource.isPlaying)
        {
            StopBgm();
        }

        // typeから定義を取得.
        currentBgmDefine = bgmDefineList.bgmDefineList.FirstOrDefault(x => x.type == type);
        // クリップ取得.
        bgmAudioSource.clip = Resources.Load <AudioClip> (string.Format("BGM/{0}", currentBgmDefine.clipName));
        // 定義の取得ができなかったら、ループ再生をしない.
        if (currentBgmDefine == null)
        {
            return;
        }
        // ループ時間を算出.
        loopTime = currentBgmDefine.loopSampleValue / currentBgmDefine.samplingRate;
        endTime  = currentBgmDefine.endSampleValue / currentBgmDefine.samplingRate;

        // 再生中のBGMを監視し、ループ位置までいったらループする.
        bgmAudioSource.UpdateAsObservable()
        .Where(_ => bgmAudioSource.isPlaying)
        .Subscribe(_ => {
            if (bgmAudioSource.time >= endTime)
            {
                bgmAudioSource.time = loopTime;
            }
        });

        // 再生.
        bgmAudioSource.Play();
    }
Example #2
0
 /// <summary>
 /// bgmの再生を完全に止める.
 /// </summary>
 public void StopBgm()
 {
     currentBgmDefine = null;
     bgmAudioSource.Stop();
 }