ゲーム起動直後のシナリオ読み込みについて

264 views
Skip to first unread message

nunu

unread,
Feb 17, 2024, 11:17:39 AM2/17/24
to 宴ユーザーグループ
・宴のバージョン:3.12.7
・Unityのバージョン:2021.3.16f1
・OSバージョン:Windows11
・Unityの習熟度:宴のSendMessageは使えます


お世話になっております。
下記お問い合わせと同じ「ゲーム起動直後のシナリオ解析処理」について、ご相談させていただけますでしょうか。
https://groups.google.com/g/utageuser/c/wUQ7kZAZ5HU/m/VRN3WgNyBgAJ

開発中ゲームのExcelスクリプトが数万行となっており、ゲーム起動直後にUnityエディター・Windowsビルドで30~40秒の硬直が発生しています。

この硬直の間、ユーザーが「画面を何度もクリックする」等の操作をすると「(アプリケーション名)は応答していません」という強制終了アラートが高確率で出るため、これがバグであると誤認されてしまっています。
(操作せずに待ったり、「プログラムの応答を待ちます」を選んで待てば正常にタイトル画面に遷移するのですが、ユーザーはつい不安になってクリック操作してしまうのだと思います)

「操作しないでください」と注意書きを出すにしても、硬直が即座に発生するため「説明文を言語ごとにローカライズして出し分ける」といったことが難しい状態です。


ユーザーの不満を和らげるため、下記のような対策ができないかと考えています。
お時間あればで構いませんので、ご助言などいただけると非常に助かります。
------------------------------
①言語ごとに注意書き表示ができれば、硬直の発生は許容
 ⇒硬直発生前に自前のローディング画面を表示したいのですが、硬直の発生を遅らせたりすることは可能でしょうか?
  ⇒硬直中に操作しても強制終了アラートが出ないようになれば一番なのですが、どうしようもないだろうなと思うところです……。

②「チャプターに分けて使うシナリオを制御する」方法も試してみたいと考えており、「起動直後にリソース・マクロ・パラメータ設定のみを読み込み」→「タイトル画面の後に残りの全チャプターを読み込み」としたい
 ⇒残りの全チャプター読み込み時に結局硬直が発生しそうだと思ってはいますが、起動後すぐにタイトル画面が出てくれば、ユーザーの心理的な安心に繋がると考えています。
  ⇒「SampleChapter0.cs」のサンプルだと1チャプター分しか読み込みできませんが、一括で複数チャプターを読み込むことは可能でしょうか?
------------------------------

以上となります。
お手数をおかけしますが、よろしくお願いいたします。

マッドネスラボ

unread,
Feb 17, 2024, 7:46:42 PM2/17/24
to 宴ユーザーグループ
>①言語ごとに注意書き表示ができれば、硬直の発生は許容
>   ⇒硬直発生前に自前のローディング画面を表示したいのですが、硬直の発生を遅らせたりすることは可能でしょうか?
>    ⇒硬直中に操作しても強制終了アラートが出ないようになれば一番なのですが、どうしようもないだろうなと思うところです……。
初期化処理は、通常は同期処理で(アプリを止めて1フレームで一気に)行うようにしていますが、
非同期で(アプリを止めずに数フレームに分けて、徐々に)行うことも可能です。
これをすれば、画面が固まることなくタイトル画面の表示が可能です。
https://madnesslabo.net/utage/?page_id=525#i-2

ただ、初期化処理が終わるまでは、AdvEngineへのアクセス(パラメーターの取得など)に制限がでます。
そこでパラメーター等にアクセスするプログラム(たとえばパラメーターによって背景表示を変えるなど)を使用しているとエラーになります。
それを避ける場合は、起動画面(ロゴの表示等)にIsWaitBootにチェックを入れるなどして、タイトル画面の移行前に起動待ちをするようにしてください。
(プロセスが固まるわけではないので、ユーザーがクリックしてもエラーのアラートは出ないと思います。)

IsWaitBootにチェックを入れなかった場合は、タイトル画面に遷移しますが、
そから、ギャラリーや本編を開くと、非同期での初期化待ちが発生すると思います。


>②「チャプターに分けて使うシナリオを制御する」方法も試してみたいと考えており、「起動直後にリソース・マクロ・パラメータ設定のみを読み込み」→「タイトル画面の後に残りの全チャプターを読み込み」としたい
 ⇒残りの全チャプター読み込み時に結局硬直が発生しそうだと思ってはいますが、起動後すぐにタイトル画面が出てくれば、ユーザーの心理的な安心に繋がると考えています。
  ⇒「SampleChapter0.cs」のサンプルだと1チャプター分しか読み込みできませんが、一括で複数チャプターを読み込むことは可能でしょうか?
可能です。
ですが、チャプターわけのサンプルプログラムは、基本的には追加のダウンロードコンテンツを想定して書いているため、余計な処理が多いかもしれません。
ローカルからロードするのであれば、①への回答の非同期処理で問題ないとは思うのですが、
もし、ローカルでのチャプターわけのサンプルプログラムが必要になりそうなら、追記しますのでご連絡ください。



大量にデータがあると初期化処理が重いのは、宴の初期の設計上(当時のUnityの機能不足もあって)割り切ってしまったのが原因でして、根本的な対応が難しいという面があるのですが、
なるべく軽減したいと思っています。

もし可能であれば、こちらにプロジェクトを送信していただけるでしょうか?
負荷のかかる原因等を調査して、改善できるものがあれば改善しようと思います。







2024年2月18日日曜日 1:17:39 UTC+9 nunu:

nunu

unread,
Feb 18, 2024, 5:15:59 AM2/18/24
to 宴ユーザーグループ
ご回答ありがとうございます。
「Boot Ascync」について、存在は知っていたものの活用方法を把握できていなかったので、ご説明いただき大変参考になりました……!

「Boot Ascync」をオンにして自作のローディング画面(あくまで擬似的なものですが)を表示できたので、やりたいことを実現できました。
クリックしても強制終了アラートが出なくなったので、解決したと言って良さそうです。


初期化処理の軽減についても是非ご協力させていただきたいので、プロジェクトのunitypackageをDropboxのリンクから送付させていただきました。
複雑なシステムのゲームなので、一部のスクリプトの記述等でかなりイレギュラーなことをしておりますが、自己責任ということでお目こぼしいただけると助かります……!(おそらく初期化処理とも無関係かと思います)

お手数をおかけしますが、よろしくお願いいたします。


2024年2月18日日曜日 9:46:42 UTC+9 マッドネスラボ:

マッドネスラボ

unread,
Feb 18, 2024, 7:45:32 AM2/18/24
to 宴ユーザーグループ
プロジェクトの送信ありがとうございます。

まだ調査途中なのですが、いくつか宴側で改善が可能そうなので調整してみます。


2024年2月18日日曜日 19:15:59 UTC+9 nunu:

マッドネスラボ

unread,
Feb 18, 2024, 12:03:18 PM2/18/24
to 宴ユーザーグループ
起動時間の高速化のほうを組み込みましたので、添付のパッケージファイルを適用してみてください。
(添付ファイルのダウンロード後に、拡張子が *. gzになっている場合は、*.unitypackageに変えてからプロジェクトに適用してください)

主な原因は、パラメーターを使った論理式や計算式が絡むコマンドでした。
・顔アイコンを持つキャラクター表示コマンドの初期化時に、Conditinalを不要に計算してしまっていた点を修正
・Paramコマンド、Ifコマンド、ElseIfコマンドで記述する論理式や計算式の初期化処理の負荷が高いので、コマンドが実行されるときに初期化を遅らせるように修正
他にも、シナリオ起動時全般で負荷が高くなっていた部分を高速化しました。

Unityエディタ上では、ローディング画面が表示されてからまだ7~8秒かかってしまうと思うのですが、
Windowsにビルドしたものであれば、2~3秒ほどでさほど違和感なく起動できるようになったと思います。
(処理時間はPCスペックによるので、私のほうの開発環境でのおおよその時間です)

よろしければ、ご確認お願いします。


2024年2月18日日曜日 21:45:32 UTC+9 マッドネスラボ:
FixBootSpeed.unitypackage

nunu

unread,
Feb 18, 2024, 3:06:20 PM2/18/24
to 宴ユーザーグループ
ご対応ありがとうございます!
早速パッケージの方適用して動作確認しましたが、初期化時間が劇的に改善して感動しました……!!
ローディング画面が早々にお払い箱になるレベルだとは夢にも思わず(一応残しますが)、本当に驚かされております。

こちらの環境だとエディターでもビルドでも2~3秒ほどに短縮されましたので、デバッグも非常にスムーズになりそうです。
今のところ、ゲームプレイ中にもバグは出ておりません。

宴Ver3のプロジェクトだったにも関わらず、サポートいただき本当に恐れ入ります。
今回お送りしたプロジェクトは、非公開の範囲であれば宴の実験的な開発に使っていただいても構いません。(不要であれば削除いただければと思います)


宴を人に勧める上で、長編シナリオでの読み込みだけがネックだったのですが、この改修のおかげで手放しで推せるような弱点のないツールになったと感じました!
イチオシのツールとして、これからも応援していきたいと思います。


2024年2月19日月曜日 2:03:18 UTC+9 マッドネスラボ:

マッドネスラボ

unread,
Feb 18, 2024, 10:10:49 PM2/18/24
to 宴ユーザーグループ
こちらこそ、大量のデータがある場合は、なかなかテストしづらかったので助かります。
高速化は柔軟性を失わせてしまいがちなので、つい後回しになってしまいがちなのですが、ゲームプレイや開発に支障がでるようなものはなるべく解消していきたいと思っています。
特に今回のように、特定のコマンドや機能が多く使われていることが原因で起きるようなケースは、私の方ではなかなか問題の存在自体に気づきづらいので、ご連絡いただければと思います。

宴3はアップデートを終えてしまっているので、今回の修正は宴4の方に反映させていこうと思います。
また、ご推薦いたたきありがとうございます。
私の方でもご期待を裏切らないものにしていこうと思っております。


2024年2月19日月曜日 5:06:20 UTC+9 nunu:

nunu

unread,
Feb 19, 2024, 11:44:22 AM2/19/24
to 宴ユーザーグループ
ご返信いただきありがとうございました。
宴4のみの反映で問題ございませんので、是非ご実装いただけますと幸いです!
お手数をおかけしますが、よろしくお願いいたします。


2024年2月19日月曜日 12:10:49 UTC+9 マッドネスラボ:
Reply all
Reply to author
Forward
0 new messages