クリアメモリ

プログラミングやモーショングラフィックス、便利なアプリケーションなど雑多に記録するブログ

Unity スプラッシュスクリーンが閉じてから処理をスタートする

f:id:clrmemory:20170422171209p:plain 

Unity無料版を使っていると、自動的に「スプラッシュスクリーン」がアプリ起動時に表示されます。

 

スプラッシュスクリーン自体は全然構わない、むしろロゴのように使えてゲームらしさがでます。ですが、これによって思っていた動作ができない時があるので、今回はその例と対処法を紹介します。

 

 

はじめに

 

まず今回紹介する「スプラッシュスクリーン」とは以下のようなものです。

 

スクリーンショット 2016-02-26 6.12.24

 

スマホアプリやpcアプリをビルドしたことがある人なら1度は見たことがあると思います。これがアプリの起動時に表示されます。

 

 

これが表示されることによって、動作に不具合が生まれます。実際に私がぶつかった例を紹介します。

 

スプラッシュスクリーンによる不具合

 

スプラッシュスクリーンが表示されることで発生する不具合は「アニメーションの再生開始タイミングがずれる」「音がずれる」「起動後一定時間ロゴを表示したいのに、スプラッシュスクリーンが消えた頃には別シーンに変わっている」などです。

 

 

これらは私がぶつかった不具合ですので、スプラッシュスクリーンによる不具合は他にもたくさんあると思います。

 

 

こういった時の対処法は、実はUnityの機能にあります。

とても簡単なコードを追加するだけで実装できるので、これからゲームをビルドするという方はぜひ見直してみてください。

 

対処法

 

主な流れは「スプラッシュスクリーンが表示されていなかったら○○の処理をする」という方法になります。

 

では、スプラッシュスクリーンが表示されているかどうかを判定するコードを紹介します。以下のコードを新たに作成してください。

 

if (!Application.isShowingSplashScreen) {
    //スプラッシュスクリーンが閉じた後に実行するコード
}

 

 

if{ }の中にスプラッシュスクリーンが閉じた後に実行するコードを書き加えてください。

例えば、スプラッシュスクリーンが閉じた後でアニメーションを再生するというような場合は

 

if (!Application.isShowingSplashScreen) {
    GetComponent ().SetTrigger ("XXX");
}

 

という具合ですね。

 

これを応用すれば「スプラッシュスクリーンが閉じてから音を再生」という処理も簡単に実装できますね。

 

 


追記:

テラシュールブログ椿様に助言をいただきました。

 

public class ShowMessage : MonoBehaviour
{
    IEnumerator Start()
    {
        Debug.Log ("スプラッシュスクリーン中");

        yield return new WaitWhile(()=> Application.isShowingSplashScreen == true);

        Debug.Log("スプラッシュスクリーン解除後");
    }
}

 

このコードで使われている「WaitWhile」はUnity5.3から追加されたコードのようです。

このコードで説明すると「Application.isShowingSplashScreen」が「true」でなくなった時に「スプラッシュスクリーン解除後」を呼び出すみたいです。

 


 

 

注意点

 

この処理をUpdate内に追加した場合、スプラッシュスクリーンが表示されていない間呼ばれ続けます。

 

つまり、音を流し続けるということになってしまうので、その場合は該当するコードを削除してあげれば、1回だけ再生する処理を実装できると思います。(未確認です。すいません)

まとめ

 

今回紹介したコードを使うことによって、スプラッシュスクリーンが閉じた後で開始する処理を実装できました。

 

お恥ずかしながら私は今までこのコード自体を知らなかったので、タイトル画面ではスプラッシュスクリーンが表示されているにもかかわらず、音声が再生されてしまっていました。

これからは、スプラッシュスクリーンが表示されている間と閉じた後でメリハリをつけることができるようになりました。

 

とても簡単なコードですし、今後この処理が必要になるタイミングがきっとあると思いますので、ぜひ覚えておいてください。

 

ではまた。