『ユニテのひみつ』のひみつ 2 ローディング画面

ローディング画面

ローディング画面

先日、RPG MAKER UNITEで作成したスマホ向けのアプリ『ユニテのひみつ』をリリースしました。

Android
https://play.google.com/store/apps/details?id=jp.windbellrrr.app.unite.basic

iOS
https://apps.apple.com/app/secret-of-unite/id6450209741

本エントリは『ユニテのひみつ』作る際に、どのような改造をUNITEへしたのか、また、どんなアドオンを作成したのかを、何回かに分けて解説していく内容の第二回となります。

実装の経緯

RPG MAKER UNITEのサンプルゲームをPCやスマホ向けにビルドして実行すると、ニューゲームを選んだ時に黒画面で長時間固まるという問題があります。
iPhoneSE(初代)で1分34秒、iPhone11で44秒くらい黒画面が続きます。
余談ですが、SH-M08(AQUOS sense2)では、2分半待たされた挙句アプリが落ちました。メモリの少ないスマホでは起動すらできません。

黒画面で長時間固まるというのはゲームとしてかなり致命的です。普通の人は10秒も黒画面が続いたら、さすがにフリーズしたと思うでしょう。
それほどまでに長く黒画面が続く理由は不明です。
ただ、小さい規模のゲームほど、黒画面の時間は短くなるようです。

『ユニテのひみつ』のリリース版では、iPhoneSE(初代)で2秒くらい、SH-M08(AQUOS sense2)でも4~5秒くらいでした。
『ユニテのひみつ』は、バイナリサイズ制限の厳しいAndroidでリリースするために、不要なデータを極力削除しています。
マップも10くらいしかありません(そのうちのいくつかは画面遷移の間に挟まるほぼ何もないマップです)。
それでも、黒画面で固まる時間をなくすことはできなかったため、どうにかする必要がありました。
せめて「Now Loading...」の文字が出ていれば、多少の時間はプレイヤーも待ってくれることでしょう。
そこでローディング画面を作ることにしました。

黒画面の調査

まず、タイトル画面からニューゲームを選択し、黒画面が出るまでの処理の流れを調べました。
すると、ニューゲーム選択→フェードアウト処理→SceneMapシーンへ移動、という流れになっていました。
黒い画面の実態は、(最初のマップ表示が行われる前の)何もないSceneMapシーンが見えている状態のようでした。

ローディング画面の配置と破棄

そこで、SceneMapシーン側に画像とロード中を示すテキストを配置したCanvasを新規に追加しました。

ローディング画面用のCanvasとImageとTextを追加

ローディング画面用のCanvasとImageとTextを追加

これを配置することにより、黒画面の代わりにローディング画面が出るようになりました。

そして、マップ表示準備が整ったあたりでCanvasごと破棄するという処理を実装したクラスをCanvasオブジェクトにアタッチし、自動でロード中画面が破棄されるようにしました。
マップ表示準備が整ったかどうかは、監視対象のオブジェクトに子オブジェクトがいくつ生成されたかをUpdate関数内でチェックして判断しています。

SceneMapシーンには、Rootというオブジェクトが初めから配置されています。このRootには、最初は子オブジェクトが存在しません。

SceneMapシーンの初期状態

SceneMapシーンの初期状態

そして、シーンの初期化処理の中で、このオブジェクトを親にしてマップ表示用のTilemapやプレイヤーのキャラクターオブジェクト等が生成されていきます。
黒画面が終わったときの状態がこちらです。

黒画面が終わり、マップが表示された後の状態

黒画面が終わり、マップが表示された後の状態

Root配下にオブジェクトがいくつか生成されているのがわかると思います。
ちなみに、Rootのすぐ下の長い名前のオブジェクトは、マップ表示のためのTilemap群を子に持つオブジェクトです。
その下にあるNew Game Objectたちは、プレイヤーのオブジェクトやイベントのオブジェクト達です。

『ユニテのひみつ』では、このRoot配下に2つ以上のオブジェクトが生成されたときにローディング画面を破棄するようにしています。

Canvasにアタッチした自動破棄用のクラス

Canvasにアタッチした自動破棄用のクラス
終わりに

『ユニテのひみつ』では、ローディング画面を独自実装の形で作成しましたが、おそらくアドオン化することも可能かと思います。

そのうちきっと誰かがいい感じのアドオンを作ってくれることでしょう……