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の空白時間が長いとシーンロードが始まらないので虚無な時間が発生する可能性がありますが、
そこはこう、暗転+ローディングアニメーション演出とかで誤魔化すのが良いかと思います。
個人的に最近気に入った演出は、デスティニーチャイルドの一枚絵斜めスライドイン。
-
自分が見つけられなかっただけかもしれないので、ご存知な方いらっしゃったらご教示いただければと思います。 ↩