「セーブデータ準備完了」のタイミング取得がしたい

321 views
Skip to first unread message

kizu...@gmail.com

unread,
May 30, 2018, 3:53:46 AM5/30/18
to 宴ユーザーグループ
いつもお世話になっております。
宴シーンのみを使ってノベルゲームを作成し、Androidに書き出しをしています。
(AdvEngineStarterのIsLoadOnAwakeにチェック入り)

実機で確認したところ、
ゲーム起動→タイトル画面表示→ボタンは表示されるが押しても反応しない
→十数秒後にボタンが押せるようになる(押せない間にタップしていた分がここで反応する)
という挙動になっています。

さらにタイトル画面表示直後に一瞬だけ入力可能な時間があるのですが、
ここで「続きから」を押すとセーブデータが何も無い状態になります。
正常にボタンが押せるようになった後で「続きから」を開くとセーブデータが正しく存在しているので、
タイトル画面表示からセーブデータ(の存在チェックやシステムパラメータ)準備完了までに時間があるのではと推測しています。
(ちなみにParamシートにシステム変数150個程、通常変数100個程設定してあります)

Androidの読み書き速度の特性上、時間が掛かるのは仕方が無いのでいいのですが、
ボタンが見えているのに押せないのはUI上よくない為、このウェイト中にロード中の表示をするかボタンを非表示にしておきたいです。
つきましては「セーブデータの準備完了」のタイミングを取得をしたいのですが、こちらは可能でしょうか?

マッドネスラボ

unread,
May 30, 2018, 5:15:39 AM5/30/18
to 宴ユーザーグループ
セーブデータ画面のソースコードは、UtageUguiSaveLoad.csで
その中で、以下のように宴の初期化完了待ちをしてからセーブデータをロードするようにしています。

    //起動待ちしてから開く
    IEnumerator CoWaitOpen()
    {
        while (Engine.IsWaitBootLoading)
        {
            yield return null;
        }

なので、AdvEngine.IsWaitBootLoadingでチェックできます。

ちなみに、タイトル表示の前にロゴなどを表示する画面があるのですが、
Canvas-AdvUI>Boot>Is Wait Boot にチェックを入れると、その画面で起動待ちをできます。
起動画面については、(ちょっとドキュメントが古いですが)こちらもどうぞ


ゲーム起動→タイトル画面表示→ボタンは表示されるが押しても反応しない
>→十数秒後にボタンが押せるようになる(押せない間にタップしていた分がここで反応する)
>という挙動になっています。
これは、シナリオをダウンロードしてるでしょうか?
この段階では、ダウンロードが終わってシナリオファイルのロードと初期化が終わるまで時間がかかります。
そうでないとするとちょっと時間がかかりすぎな気もします。
Unityエディタ上のプロファイラーなどで、極端な負荷がかかっていないか調べてみると原因がわかるかもしれません。



kizu...@gmail.com

unread,
May 30, 2018, 6:22:37 AM5/30/18
to 宴ユーザーグループ
お返事ありがとうございます。
Canvas-AdvUI>Boot>Is Wait Bootにチェックを入れたところ、
待機するようになりましたがその後タイトル画面が表示されない(起動画面は消えるが真っ暗)状態になってしまいました……
(ログにエラーは無し、「Utage Ver 3.3.5 Start!」は正常に出ている)

> これは、シナリオをダウンロードしてるでしょうか?
現状はAssetBundleをStreamingAssetsフォルダに入れて呼び出ししている段階です。
(これで正常動作したらサーバー上にアップロードする予定)
ただシナリオサイズが結構大きめ(〜.scenarios.assetファイルが約2Mb)なので時間が掛かるのはその所為かもしれないです。

マッドネスラボ

unread,
May 30, 2018, 6:32:57 AM5/30/18
to 宴ユーザーグループ
Unityエディタ上ではStreamingAssetsにおいても動作しているのに、Android実機だとできないということでしょうか?

Unityのバージョンはいくつでしょうか?Unityのバグかもしれません。
Unity2017.2~2018.1で発生したバグが関係あるかもしれません。

kizu...@gmail.com

unread,
May 30, 2018, 8:38:13 AM5/30/18
to 宴ユーザーグループ
すみません、「その後タイトル画面が表示されない」ですが、更に待っていたら表示されました。
つまり スプラッシュイメージ→起動画面→黒画面→タイトル画面 という挙動でした。
(ちなみにUnity5.6.5使用です)

色々試したところ、Is Wait Bootをオフに戻しタイトル画面が表示されたタイミングで
AdvEngine.IsWaitBootLoading待ちをすることで
とりあえずロードインジケータの表示・非表示に成功しました。
お手数をお掛けしまして申し訳ございません。


関連で質問なのですが、このロード時間を短くする場合、チャプターを使ったシナリオ分割を行えばよいという認識でいます。
しかし今回のゲームは「共通ルート」と「キャラAルート」「キャラBルート」「キャラCルート」にExcelを分けており、
SampleChapterTitle.csにある「指定した章よりも前の章はロードする必要がある」というのが足枷になります。
(例えばキャラCルートに進む際はキャラAとキャラBのファイルは読み込みたくない)
こちら、何か良い方法はありますでしょうか?

マッドネスラボ

unread,
May 30, 2018, 10:16:52 AM5/30/18
to 宴ユーザーグループ
前のシナリオがなくても矛盾がないなら、大丈夫です。
「共通ルート」は必ず最初にロードして、CharacterシートやMacroシートなどをここに定義して、
「キャラAルート」「キャラBルート」、「キャラCルート」は好きな順番にロードするというとは可能です。

たとえば
・「キャラAルート」のCharacterシートにキャラクターAの定義がある
・「キャラBルート」でキャラクターAを表示している
この場合は、「キャラAルート」をロードしてない状態で、キャラBルートでキャラクターAを表示しようとするとエラーになります。
他にも、ロードしてないチャプターのシナリオラベルを使おうとするとエラーが起きると思います。
Unityエディタ上でエクセルからインポートしている時のエラーチェックは、チャプターを順番にロードしてある前提で行っていますので、インポート時にエラーメッセージも出ません。
なので、エラーが出ないように気をつける必要があります。

ただ、StreamingAssetsであればロードや初期化の時間はあまりないはずなのですが。
10秒近くもかかるのはちょっと心当たりが無いです。
Unityのプロファイラーで負荷の原因はわかりませんでしょうか?

kizu...@gmail.com

unread,
May 31, 2018, 12:04:54 AM5/31/18
to 宴ユーザーグループ
ありがとうございます。
ルート毎のロードは後程試してみます。

StreamingAssetsのロード時間について、Unityエディタ上のプロファイラーで確認しました。
「CoroutinesDelayedCalls > AdvDataManager.CoBootInitScenariodData()」が起動後15秒間ほど、
数MB単位のGC Allocを発生させている状態です。(ロード時間は確かに極小でした)

内訳としては、「選択肢終了などの特別なコマンドを自動解析して追加」が4分の3、
「コマンド作成」が4分の1ほどを占めており、更に下部はどちらも「CreateCommandDefault」になっています。
やはり使用コマンドが多過ぎで解析に時間が掛かっているということなのでしょうか。

マッドネスラボ

unread,
May 31, 2018, 2:01:05 AM5/31/18
to 宴ユーザーグループ
ありがとうございます。
一時期そこそこ高速化したつもりだったのですが、根本的な設計の問題で完全に速くすることは難しい状態です。
とはいえ、10秒とは想定外です。そんなに時間がかかってしまっていましたか。
となると、おしゃる通りコマンド(シナリオの量)が多いの原因となってしまいますので、
現状ですと、上記のチャプター分けで対応するしかないと思います。

ちなみに、参考までにお聞きしたいのですが、シナリオの量はどれくらいでしょう?
コマンドの数というか、エクセルの行の総数を大まかでもわかるとありがたいです。
または、全体の文字数でもよいのですが。

その現象はAndroidの機種依存ではなく、多くの端末で起きることでしょうか?
差し支えなければAndroidの端末名を教えていただけると助かります。

マッドネスラボ

unread,
Jul 17, 2018, 1:47:25 AM7/17/18
to 宴ユーザーグループ
追記
AdvEngine.IsWaitBootLoadingが非同期のときに正常動作していなかったのを、Utage3.4.2で修正いたしました。
また、最新版ではシナリオ初期化が少し高速化されています。
アップデートを試してみてください。


Reply all
Reply to author
Forward
0 new messages