スクリプトでジャンプしたシナリオラベルをスムーズに読み込む方法

427 views
Skip to first unread message

mikazuki

unread,
Feb 1, 2017, 5:01:01 AM2/1/17
to 宴ユーザーグループ
お世話になっております。

宴のバージョン:宴3.0.0f1
Unityのバージョン:5.5.0f3
を使用しています。

ゲーム内で自作したボタンから、engine.ScenarioPlayer.JumpManager.RegistoreLabel(“ジャンプしたいシナリオ名”)を利用してシナリオにジャンプしているのですが、1ページ目の台詞の表示が重たくなることがあります。

のQ&Aに、

>宴のファイルロードは、指定のシナリオラベルで使うファイルを一定数だけ先読み(これから使うであろうファイルをバックグラウンドでロード)するのですが、
>単純に、エクセルのシート上に記述してある場所を上から順にファイルを先読みしている状態です。

と書かれてありましたので、ファイルロードを無視して強制的に目的のシナリオラベルへジャンプさせているからではないかと推測しているのですが、この認識で合っていますでしょうか?
もし、そのせいで表示が重たくなっているのでしたら、例えば手動で(スクリプトで)ジャンプする可能性のあるシナリオラベルをロードさせておくといったことは可能でしょうか?

何か解決策があればご教授いただきたく存じます。
どうぞよろしくお願いいたします。

マッドネスラボ

unread,
Feb 1, 2017, 5:38:41 AM2/1/17
to 宴ユーザーグループ
>ファイルロードを無視して強制的に目的のシナリオラベルへジャンプさせているからではないかと推測しているのですが、この認識で合っていますでしょうか?

はいそうなります。
プログラムでジャンプした場合は、プリロードができなくなりますので。

>もし、そのせいで表示が重たくなっているのでしたら、例えば手動で(スクリプトで)ジャンプする可能性のあるシナリオラベルをロードさせておくといったことは可能でしょうか?
これは、その仕組みがありません。

ただ、そのページで使う素材をロードしないうちにセリフが表示されることはないので、
セリフの途中に重くなるということは

① 2ページ目以降の素材をバックグラウンドでロードしている時に、ロードする数が多すぎて処理が重い
② 1つのファイルのロード時間が長すぎて、ハードスペックで対処しきれない
② 別の原因で重い
のどちらかが原因と思われます。

①が原因だとすると、
「Load File Max」という数を減らすと良いかと思います。
一度にロードするファイルの数を減らすことで、処理落ちが抑えられるかと思います。
ただし、減らしすぎると今度は全体のロード時間がかかってしまうかもしれませんので、落としどころを探ってみてください。

②が原因だとすると
ロードするファイルの数にさほど問題がないのであれば、1つのファイルロードがハードスペックを超えていることになります。
これはもう処理落ちは回避できません。

③はUnityのプロファイラ―などで重い部分を調べることが可能です。


また、宴3からファイルロードは、
非同期ロード(1フレームに処理を集中させない、処理落ちを避けるロード)を使えるようにしてあります。


デフォルトではチェックがオンになっているはずですが、もしオフになっていたらこれをオンにしてください。





mikazuki

unread,
Feb 1, 2017, 6:36:29 AM2/1/17
to 宴ユーザーグループ
ご回答いただき、ありがとうございます。
「Load File Max」の数を減らすと、体感的に若干ではありますが台詞の表示がスムーズになりました。
(非同期ロードは、既にチェックがオンになっていました。)

ところで、「Load File Max」は、
>同時にロードするファイルの最大数
とのことですが、この「ファイル」とはExcelファイルの数(拡張子が.xlsxまたは.xlsになっているファイルの数)という認識で良いですか?

現在、各シナリオラベルにサブルーチンを使用してるのですが、シナリオラベルとサブルーチンを別のExcelファイルに書いています。
もし、シナリオがロードされる際、サブルーチンをシナリオラベルと同じExcelファイル内に置いた方が良かったり、Excelのファイル名を(降順または昇順で並べたときに)サブルーチンのあるファイルと、シナリオのアルファイルが隣接するようにした方が良い等、何らかの決まりや法則があるようでしたらお教えください。

また、
>② 1つのファイルのロード時間が長すぎて、ハードスペックで対処しきれない
に該当すると考えられる場合、1つのExcelファイルを複数のExcelファイルに分割すれば、改善される可能性はありますでしょうか?
それとも、Excelファイルを複数に分割しても、ロードにかかる時間には関係ない(ロード時間は改善できない)ということでしょうか。

お忙しいところ恐縮ですが、よろしくお願い致します。

マッドネスラボ

unread,
Feb 1, 2017, 6:57:05 AM2/1/17
to 宴ユーザーグループ
>この「ファイル」とはExcelファイルの数
いえ、テクスチャやサウンドなどResourcesフォルダ以下にあるものです。


>もし、シナリオがロードされる際、サブルーチンをシナリオラベルと同じExcelファイル内に置いた方が良かったり、Excelのファイル名を(降順または昇順で並べたときに)サブルーチンのあるファイルと、シナリオのアルファイルが隣接するようにした方が良い等、何らかの決まりや法則があるようでしたらお教えください。

特にありません。
宴2までは、若干影響があったのですが、宴3からはなくなっています。

>② 1つのファイルのロード時間が長すぎて、ハードスペックで対処しきれない
エクセルファイルとは関係ないです。

ロードの負荷は、シナリオファイ(エクセル)ではなく、リソースのほうです。

たとえば、巨大すぎるテクスチャを一度に大量にロードしているというケースです。
宴3で追加されたパラパラアニメーションでは、パラパラアニメで使うテクスチャは一度に全部ロードされるので、
そのサイズが大きすぎると処理落ちになるかと思います。
プレハブやパーティクルでも、リンクされているテクスチャが巨大で大量にあれば処理落ちになります。

とはいえ、テクスチャは殆どの場合1枚1枚ロードするのであまり影響しないと思います。
もしかするとサウンドかもしれません。

サウンドは、ロードの仕方3種類あります



基本的にはどれも一長一短なのですが、(自分の誤解がなければ)ロード時間は

Decompress On Load  > Compressed In Memory > Streaming となるはずです。


Streaming設定は、BGMや環境音などサイズの大きいものには特に有効のはずです。
SEなど小さいものは逆効果の可能性があります。
ボイスは長さ次第で微妙ですが、Streamingのほうが確実かと思います。

なので、もし負荷がかかるところより先にBGMや環境音の変更をしているのであれば、
ロード設定をStreamingにしてみてください。

ただし、Streamingは万能ではなく、
たとえば宴3で使っているイントロループ機能などを使うと、逆に処理落ちの原因になることもあります。


mikazuki

unread,
Feb 1, 2017, 7:45:38 AM2/1/17
to 宴ユーザーグループ
詳しい解説ありがとうございます。
一部のBGMと、全てのボスがDecompress On Loadの設定になっていたので、Streamingに変更しました。
体感的には、シナリオの流れる早さに変化はありませんでしたが、お教えいただいた設定で今後やっていこうと思います。

また、Unity上でゲームを再生する場合、パラメータビューワーを表示させていることもテキストの表示が重たくなる原因の1つになっているようですので、パラメータビューワーを表示させないようにして、「Load File Max」の数の調整や、サウンドの設定の見直しで対応していこうと思います。

お教えいただき、どうもありがとうございました。
Reply all
Reply to author
Forward
0 new messages