現在、Unityで製作しているアプリを公開に向けて頑張っているのですが、
無料版だからUnityロゴが出るのは仕方ないとして、Unityロゴの後に自分で用意したロゴを表示してから最初の画面に遷移できないかなぁと考えました。
手順としては以下の通りです。
- 独自ロゴ表示用 Scene を作成し、画面全体にロゴ画像が表示されるようにする
- アプリ起動時に1.で作成したSceneが表示される様に[Build Settings]を設定する
- スクリプトを作成して、一定時間経過後に別のシーンに遷移する様にする
1. 独自ロゴ表示用 Scene を作成し、画面全体にロゴ画像が表示されるようにする
「Title」という名前で、Sceneを作成します(名前はなんでもいいです)。
UI コンポーネントの Image を追加して、用意しておいたロゴをしていします。
詳細は今回の本質ではないので除外します。
2. アプリ起動時に1.で作成したSceneが表示される様に[Build Settings...]を設定する
[File - Build Settings...]メニューを選択し、Scene In Build に以下のようにSceneを追加して、起動時にTitle Scene が表示されるようにします。
2つ目のScene名は現在作成中のアプリに合わせて変更してください。
3. スクリプトを作成して、一定時間経過後に別のシーンに遷移する様にする
スクリプトを作成して、Main Cameraにでも設定しておいてください。
作成できたら、スクリプトに以下のように書いて、2秒間カスタムロゴを表示して、別のシーンに遷移するようにします。
using UnityEngine; using System.Collections; using UnityEngine.SceneManagement; public class TitleSplash : MonoBehaviour { float startTime = 0.0f; // Use this for initialization void Start () { startTime = Time.time; } // Update is called once per frame void Update () { if (Application.isShowingSplashScreen == false) { // 広告などの処理. float now = Time.time; float elapsedTime = now - startTime; if (elapsedTime > 2.0f) { SceneManager.LoadScene("HogeHoge"); } } } }
これでOK!
と思いきや!ここでハマりました。
実際に起動してみると、明らかにロゴが表示されてから2秒も経っていないのに次のSceneに遷移してしまいました。
これは、Unityロゴが表示されている途中にTitleシーンが読み込まれていて、時間の計測が始まってしまっていることが原因でした。
以下の値をチェックすることで、Unityロゴが表示されているかどうかをチェックすることができます。
以下の値をチェックすることで、Unityロゴが表示されているかどうかをチェックすることができます。
Application.isShowingSplashScreen
なので、少し修正して以下のように書き換えてやると、2秒間カスタムロゴを表示した後に、Build Settings で指定した次のScene に遷移します。
using UnityEngine; using System.Collections; using UnityEngine.SceneManagement; public class TitleSplash : MonoBehaviour { bool isMySplashShowing = false; float startTime = 0.0f; // Use this for initialization void Start () { } // Update is called once per frame void Update () { if (Application.isShowingSplashScreen == false) { if (!isMySplashShowing) { startTime = Time.time; isMySplashShowing = true; } else { // 広告などの処理. float now = Time.time; float elapsedTime = now - startTime; if (elapsedTime > 2.0f) { SceneManager.LoadScene("HogeHoge"); } } } } }