LoginSignup
1
0

More than 5 years have passed since last update.

AudioSource.PlayOneShotがシーン変更時にぶつ切りになる問題と対応

Last updated at Posted at 2018-11-03

UI.Buttonにこういうコールバックを紐づけていたとします。

MyButton.cs
[SerializeField]AudioSource sePlayer;
public void OnTapButton()
{
    sePlayer.PlayOneShot(Resources.Load<AudioClip>("SeFileName"));
    SceneManager.LoadSceneAsync("NextSceneName", LoadSceneMode.Single);
}

音は鳴るんですが、途中で必ず音がブツっと中断されます。
どうもシーンの切り替えが起きると、再生中のAudioClipがnullか何かになるらしいです。
この現象は設定での回避はできない1らしいので、処理で回避しました。

MyButton.cs
[SerializeField] AudioSource sePlayer;
public void OnTapButton()
{
    StartCoroutine(ChangeSceneCoroutine())
}

IEnumerator ChangeSceneCoroutine()
{
    sePlayer.PlayOneShot(Resources.Load<AudioClip>("SeFileName"));
    while (sePlayer.isPlaying)
        yield return null;//1フレーム待機
    SceneManager.LoadSceneAsync("NextSceneName", LoadSceneMode.Single);
}

要するには、音の再生が終わるまではシーン遷移を行わない、という手法です。
SEの空白時間が長いとシーンロードが始まらないので虚無な時間が発生する可能性がありますが、
そこはこう、暗転+ローディングアニメーション演出とかで誤魔化すのが良いかと思います。
個人的に最近気に入った演出は、デスティニーチャイルドの一枚絵斜めスライドイン。


  1. 自分が見つけられなかっただけかもしれないので、ご存知な方いらっしゃったらご教示いただければと思います。 

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0