Unity の SplashScreen API を触ってみる

Unity5.5より、新しいスプラッシュスクリーン機能が追加されました。


この新しい機能についての使い方は公式ブログにある3分程度の動画で紹介されています。英語ですが、とてもわかりやすく簡単な機能なので理解はしやすいと思います。

［更新］開発進行中、スプラッシュスクリーンツール［5.5ベータ版に入りました］
https://blogs.unity3d.com/jp/2016/09/12/update-in-development-unity-splash-screen-tools-in-beta/

<img width="975" alt="ss 2016-12-20 0.53.07.png" src="https://qiita-image-store.s3.amazonaws.com/0/5549/62f14df2-748e-a35b-f94d-9435a9f3658a.png">



今回は、このスプラッシュ機能をAPIから利用してみます。


## ドキュメントを読む

すでに SplashScreen API はドキュメント化されています。

### UnityEditor.PlayerSettings.SplashScreen

https://docs.unity3d.com/ScriptReference/PlayerSettings.SplashScreen.html

<img width="1364" alt="ss 2016-12-20 0.57.12.png" src="https://qiita-image-store.s3.amazonaws.com/0/5549/106d5620-b877-3713-b008-57404d433097.png">


スプラッシュスクリーンの設定を行うためのクラスです。APIを見る限り、特にアクセス制限はなく、スクリプト経由で最大限にカスタマイズが行えます。


試しに、プラットフォームごとにロゴを変更してみます。


```NewBehaviourScript.cs
using UnityEditor;
using UnityEngine;

public class NewBehaviourScript
{
    [InitializeOnLoadMethod]
    static void ChangeSplashScreen()
    {
        //プラットフォーム切替時に発火
        EditorUserBuildSettings.activeBuildTargetChanged += () =>
        {
            var logos = new PlayerSettings.SplashScreenLogo[0];

            switch (EditorUserBuildSettings.activeBuildTarget)
            {
                case BuildTarget.StandaloneOSXIntel64:
                    logos = new[]
                    {
                        PlayerSettings.SplashScreenLogo.Create(2f,
                            AssetDatabase.LoadAssetAtPath<Sprite>("Assets/StandAlone.png"))
                    };
                    break;
                case BuildTarget.WebGL:
                    logos = new[]
                    {
                        PlayerSettings.SplashScreenLogo.Create(2f,
                            AssetDatabase.LoadAssetAtPath<Sprite>("Assets/WebGL.png"))
                    };
                    break;
                default:
                    break;
            }

            PlayerSettings.SplashScreen.logos = logos;
        };
    }
}
```

![](https://i.gyazo.com/dc3529f3a1671e516f50fc289b659308.gif)


### UnityEngine.Rendering

https://docs.unity3d.com/ScriptReference/Rendering.SplashScreen.html

<img width="1336" alt="ss 2016-12-20 0.58.33.png" src="https://qiita-image-store.s3.amazonaws.com/0/5549/434d734c-fd45-a346-22a6-b5d633ec38a2.png">

スプラッシュスクリーンの描画を制御するクラスです。このクラスが何故あるかというと、より込み入ったスプラッシュスクリーンの演出をしたいときに使用するためです。

例えば、スプラッシュスクリーンの表示中に音を出したり、裏側で通信やシーンを読み込んだりと、開発者としても「待つ」しかなかったスプラッシュの部分で様々な処理が行えるようになります。このAPIを使うときはPlayerSettingsにある「Show SplashScreen」のチェックを外しておきましょう（チェックを外せるのはProユーザーのみ）。

<img width="310" alt="ss 2016-12-20 1.25.12.png" src="https://qiita-image-store.s3.amazonaws.com/0/5549/5d44f881-9fca-c383-2cb2-63abf437ed41.png">


## 余談

Unity5.6から MoviewTexture に代わる VideoPlayer が実装されました。

![14889825_10154342221551773_6220655481924906166_oのコピー.jpg](https://qiita-image-store.s3.amazonaws.com/0/5549/31ca9d33-f090-dfe6-bc4f-a1b51ee24373.jpeg)


もしかすると将来的にスプラッシュスクリーンで動画を再生することができるようになるかもしれませんね。

![2fa2446d287dfc3bb249fc6a8c803cb0.gif](https://qiita-image-store.s3.amazonaws.com/0/5549/258c2949-0286-c5ed-e894-54fc38945871.gif)

## 余談２

本エントリーとあまり関係ないですがドキュメントを見やすくしたChrome拡張「Unity Documentation Extensions」を作ってるので良かったら使ってみてくださいね。

https://chrome.google.com/webstore/detail/unity-documentation-exten/cokplpccpoocgplhcaabfogikfcceggc?hl=ja