テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

Unity iOSでローディング中にアニメーションを再生する

今日はローディング中のアニメーションについて。

 

Unity Pro版であれば非同期なシーンのロードが行えるので話は簡単なのですが、UnityのFree版はシーンの非同期ローディングが出来ないのでどうしても画面が固まります。

しかし、実はこのシーンのロード中全スレッドを止めている訳ではなく、UIKit等でアニメーションする限り動かすことが出来ます。

 

例えば、以下のようなコードを用意する事で、オブジェクトのローディング中に画面にアニメーションさせる事が可能です。*1

iOS向け、ローディング時にアニメーションを行う

 

この例の場合、以下のように実行します。

  1. まずシーンの適当なオブジェクト(破棄されないオブジェクト)にLoadingAnimation.csコンポーネントをアタッチします。
  2. xcodeプロジェクト直下に「sai1_1.png」〜「sai1_6.png」の画像を用意し、置いておきます。
  3. 後はLoadLevelの直前にLoadingAnimation.Instance.LoadStart();を呼びます。

すると、ロード中にアニメーションが実行されます。

 

以下の画像は実行例です。サイコロが表示されている時間は実際はローディングが行われており、画面がストップしている時間です。

f:id:tsubaki_t1:20140819010545g:plain

検証してないので何とも言えませんが、実はLoadLevelAsyncでプライオリティ下げてコツコツロードするより、LoadLevelでガッツリUnityは停止・画面はこの手段でアニメーションさせる方が高速なんじゃないかと密かに期待しています*2

Android版はまた今度試します。(出来るかは不明)

 

(インジケーターでも十分といえば十分‥かな?

 Unity でロード時のインジケーター(グルグル回る画像)を表示する方法 - 強火で進め

 

そう言えば、ResourcesにLoadAsyncが追加された模様です。これでResourcesのLoadで停止する事も減るかと。これはまた次回。

追記

nirasan.hatenablog.com

*1:動くことだけ確認してるので、コードのメモリリーク等は放置されています。あと適当なコードなのでメモリにやさしくないです

*2:LoadLevelAsyncの方が色々出来ますが