質問: _GetAudioSource(eType.Se); source.PlayOneShot(_data.Clip); } return true; } } ``` ### 追記 GameSystem.csはタイトルのシーン全体にobjectとして持っていたので、(つまりゲーム全体にかかっていた?) 新しく下記TitleControllerをタイトルシーンにのみアタッチしてStart()でPlayBgmするようにしてみましたが、 それでもなぜかアタッチしてないはずの別シーンに遷移するとBGMが一回切れて再度流れてしまいました・・・ これは、コードを変更したら一回どこかをクリーンする必要があるとか、そういう話なのでしょうか?。。 ``` using System.Collections; using System.Collections.Generic; using UnityEngine; public class TitleController : MonoBehaviour { // Use this for initialization void Start () { Sound.LoadBgm("bgm01", "test_bgm01"); Sound.PlayBgm("bgm01"); } // Update is called once per frame void Update () { } } ``` ### 試したこと シングルトンにすればいい、や、DontDestoyメソッド?を使えばシーンをまたげると調べたのですが、 サウンド管理クラス中ですでにどちらも使っているにもかかわらず、 BGMを再生するとシーンをまたいだタイミングでBGMがいったんきれるので、お手上げです。。
回答: タイトルに「再再生しないようにしたい」とありますが、本文にある「BGMが途切れることなく流れ続けてほしいのですが、途切れてしまいます」というのは「シーンを切り替えると再生中の曲が一旦停止し、同じ曲がまた頭から再生されてしまう」という意味でいいでしょうか? もしかして、タイトルシーンだけでなく移動先のシーンでも`Sound.PlayBgm("再生したいオーディオ名");`を行ってしまってはいないでしょうか。 見たところ、この`PlayBgm`は「現在どんなBGMが再生されているかは関知せず、問答無用で次のBGMを再生する」といった仕様になっているようです。 もし移動先のシーンで`PlayBgm`を使っているのであればそれをやめるか、あるいは`Sound`スクリプトに現在セットされているオーディオクリップを調べて、再生しようとしているオーディオクリップがそれと同一であれば再再生しないようにしてみてはいかがでしょう。 ``` /// BGMの再生 /// ※事前にLoadBgmでロードしておくこと public static bool PlayBgm(string key) { return GetInstance()._PlayBgm(key); } bool _PlayBgm(string key) { if (this._poolBgm.ContainsKey(key) == false) { // 対応するキーがない return false; } // リソースの取得 var _data = this._poolBgm[key]; // オーディオソースの取得 var source = this._GetAudioSource(eType.Bgm); // 要求されたBGMと同一のオーディオクリップがセット済みならば、再生を続行 if (_data.Clip == source.clip) { return true; } // いったん止める this._StopBgm(); // 再生 source.loop = true; source.clip = _data.Clip; source.Play(); return true; } ```