質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

3回答

10109閲覧

Unityのスプラッシュ画面の待機時間とisShowingSplashScreenの関係について

buibui80

総合スコア1033

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

1クリップ

投稿2016/06/09 14:27

編集2016/06/10 09:29

<確認環境>
・OSX ElCapitan‎ 10.11.5
・Unity5.3.5f1 (フリー版)
・Android5.1.1(Nexus5)へビルドして確認

Application.isShowingSplashScreen をチェックすることで
Unityのスプラッシュ画面が終了するまで処理を待機できると知ったのですが、
以下ソースを実行してみるとスプラッシュ画面が消えても
Application.isShowingSplashScreen が変化せずに
直後の処理(アニメーションの実行)が開始されない状態になっております。

Gif画像から気になる点として、
Unityのスプラッシュ画面の表示時間が想定より短いため、
本来の待機時間との差が生じて isShowingSplashScreen が変化していないのかと想像しています。
(何回かアプリを再起動して確認していますが同様です)
(Animatorの設定に問題がないことは確認できております)

そこで質問ですが、
Unityのスプラッシュ画面の待機時間は何秒なのでしょうか?
それと、スプラッシュ画面が終了しても isShowingSplashScreen が変化しない現象について
何かご存知でしたらご指摘をお願い致します。

C#

1using UnityEngine; 2using System.Collections; 3 4public class SplashController : MonoBehaviour 5{ 6 public Animator Sprite1Animator; // 男の子用アニメーターコンポーネント 7 public Animator Sprite2Animator; // 女の子用アニメーターコンポーネント 8 9 IEnumerator Start () 10 { 11 // スプラッシュ画面が終了するまで待機 12 yield return new WaitWhile(()=> Application.isShowingSplashScreen == true); 13 14 // トリガーでアニメーションを実行 15 Sprite1Animator.SetTrigger("rotate"); 16 Sprite2Animator.SetTrigger("rotate"); 17 } 18}

10秒ほどのキャプチャGif
画面キャプチャ

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

自己解決

5.3系で発生するUnity側の不具合の様です。
5.4系では対応済みですが5.3系へのバックポートは予定されていないとのことです。

以下の様にすることで対策できます。

C#

1void Awake() { 2 // 初期化処理を書く 3 4 // スプラッシュの終了待ち 5 while (Application.isShowingSplashScreen) {} 6}

ブログなどの情報では以下の様にしていますが、
コルーチン形式だと上手くいかないので注意です。(1フレームでも進めるとダメです。)

C#

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

投稿2016/07/20 09:16

buibui80

総合スコア1033

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

弊社でも同様の問題で困っています。

起動時にアニメーションさせる処理が、
ロゴ背後で実施されるのを回避するために、
isShowingSplashScreenを使用しています。

一部の端末でロゴが消えた後、数秒後に
isShowingSplashScreenが変わるため、
その間固まったように見えてしまいます。

こちらもPersonalを使用していますが、
Plusに上げて改善されるようであれば、
Plusに上げたいと考えております。

投稿2016/07/15 04:24

ganessa

総合スコア18

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ganessa

2016/07/15 06:37

せっかくですので、PersonalからPlusへ上げてみました。 ロゴを非表示にすることが出来ましたので、 isShowingSplashScreenを使う必要がなくなりました。 起動時間もかなり短縮されたようです。
buibui80

2016/07/15 07:40

デバッグ時だからかと思いクローズド アルファ版テストとして ストアで公開した上で確認しましたが結果は変わらずでした。 サポートに問い合わせ中なので改善方法が判明したらコメント追記します。
guest

0

ご使用のUnityはもしかしてPro版でしょうか?
私もPro版しか使ったことが無いので分かりませんが、Application.isShowingSplashScreenはフリー版で表示されるUnityロゴの表示状況ではないでしょうか。
推察するに、以下のような仕様になっているものかと。

・Pro版の場合
最初のSceneの読み込み開始と同時にスプラッシュスクリーンを表示
→Sceneの読み込みが完了したらスプラッシュスクリーンを非表示、同時に各スクリプトが動作開始
※「最初のSceneの読み込み時間」とスプラッシュスクリーンの表示時間は比例する。(=最初のSceneが軽量な場合はすぐに消える)

・フリー版の場合
最初のSceneの読み込み開始と同時にスプラッシュスクリーンを表示
→Sceneの読み込みが完了後に各スクリプトが動作開始(スプラッシュスクリーンの表示非表示は関与しない)
→一定時間後、Scenの読み込みが完了していたらスプラッシュスクリーン非表示(=読み込み完了後も一定時間が経過するまでは表示されっぱなし)

ただ、Pro版でこのコードを動かすと起動直後にアニメーションが開始するように思いますので、このような挙動を示す理由は謎です……
中途半端な回答となりますが、参考になれば幸いです。

投稿2016/06/10 08:43

sakura_hana

総合スコア11427

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

buibui80

2016/06/10 09:49

ご回答ありがとうございます。 Unityはフリー版になります(質問を修正しました)。 ご指摘と同じ認識でしたが謎挙動です。 起動時にこの挙動では悲しいので検証を続けたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問