宴でロード中の画面がまた度々出てしまった…
この記事の続きですが・・・・・・
えと、実は昨日またまた、ロード中画面が出ていて、もう、頭にきてしまいました💦なので、順番を追って、原因になったものを調べました。
ちなみに、私が作ったのは、PC・コンシューマ向けがメインで、モバイル版とはまた原因が別かもしれません。あと、試しにボイスなしゲームを作ってみたのですが、こちらでは、ロード中画面が頻繁に発生しませんでした(通常通り)。シンプルだから?かもしれませんが💦とりあえず、昨日私を悩ませた原因についてお話します。
★ここで問題になったロード中画面は、チャプターの始めにあるものではなくて、例えばキャラクターが話している間に突然ロード中画面になったり、選択肢を選択したらまたロード中になったり、そういう迷惑なロード中画面のことです。
ローでイング中画面が出たタイミングや症状
選択肢が出て、それを選択したとたん画面が点滅しました。その点滅事態は、一瞬ロード中画面が表示されたことを示します(ロード中画面を真っ黒の画面に設定したので)
今制作中のゲームでは2回この不具合が起きてしかもタイミングが似ているので、原因を調べたいと思います。
ちなみに以前、同じくjumpしたとたんロード中画面が出たのですが、もしかして原因が「ラベルの始まり」?🤔🤔🤔
Range of Files On Memoryは原因じゃない
ロード中画面が多いときによくすすめられたのはこれをいじることですね。またはAdvEngineのAdvScenarioPlayerのpreload deepなどを同じく設定を変更すべきとのこと。ちなみに、前のゲームでは40-50を設定しました。多いですが、パソコンとコンシューマーなら大丈夫でしょうと思いまして💦50にしたら、アンロードの回数を減らせるかと……でも、それじゃないかもしれません。
とりあえず昨日試した手順をご説明します。assetfilemanagerを開きました。
これを見る限りでは、range of files on memoryで影響を受けたのはlateupdateのほうです。で、試しにこの二つの機能にdebug.logを追加したら、実際ロード中画面で実行された機能はonDestroyのほうです。つまり、range of files on memoryはあまり関係ないんじゃ???と思っちゃいました。
OnDestroyについて、いつ呼ばれたかはわかりませんが、もしかしてラベル、つまり*と**のあと?かと推測しました。で、これをさらに深く検証すると、基本ondestroyでは、参照となった素材はそのままで、アンロードされるのは使われてない素材のすべてです。……あれ?もしかしてrange of files on memoryで50素材まで許したのがまずかった?とちょっとビビった私であったが、これを改めていじっても、やっぱり直る気配がありません。
アンロードが原因ではなかった
とりあえず試しにondestroyのunloadunusedfilelistをコメントアウトして、様子を見る。これでアンロードが行われないはずです。
すると……。
不具合が起こったままでした。
犯人はお前じゃないかい!
じゃ、なんだ?ロード中画面でロードが始まった素材って、小さい物ばかりで、大体15KBの効果音や30KB以下の画像とかだったのにーーーー(前はAtlas素材を圧縮し忘れて、55MB以上になってローディング中画面が出たことがありましたが)
それで素材一個一個を検証することにしました。
検証の方法は簡単です。file managerに表示されているロード中の素材をstatic asset managerに登録させて、一個一個外して、原因になるものを探し当てる、というのが一番簡単でしょうが、私は(なぜか)別の方法で、選択肢の前に問題の素材を呼び出してみて、そして一個一個外しながら様子を見る。おっと、原因がわかったかも?
マクロが原因だったりして?????
ちなみに私のスクリプトはこんな感じです。(列の順番を変えたりしたので、公式とは違います)
わかりやすくするようにいつも色で変えたりしてます。
結論から言うと、問題になったのは、StAnimのマクロに含まれているものです。確実にこれだけが原因じゃありません。atlas素材を圧縮したりすると、直ったこともあります。ちなみにこのマクロに使われている素材は、合計50KBぐらいの容量です。そんなに大きくありません。
なので、原因はこのStAnimマクロ自体かと疑ってます。
マクロって、メインのシートからマクロシートに飛んで、またメインのシートに戻るので、それ自体がロードの負担を重くするんじゃ?と推測してます。
解決方法
今回のStAnimマクロは頻繁にselectionの後のラベルのはじめに使うので、static asset manager に必要な素材を登録させたほうが一番楽かと思い、それにしました。
もし別のタイミングで、一か所にだけロード中画面が発生したりした場合、static asset manager ではなくて別の方法をご紹介します。
(ここで先に素材登録させる)
Bg (Arg6に0) 街
BgOff (Arg6に0) >>素材がローディングプールに入ったが、実際ゲームに表示されない。
//SpriteやSeなども似たような感じで対策できるかと
Jump *ジャンプ先
*ジャンプ先
Bgw 街
//マクロシートにて
*Bgw
Bg %Arg1 %Arg6
Wait %Arg6 //背景が表示されるまで他の操作が行われないようにするマクロ
EndMacro
前回作ったゲームにも、似たような対策を使いました。
結論
さて。結論として、私が経験したロード中画面が突然出てくる不具合の原因は大きく分けて2つになります:
①容量が大きい過ぎる素材。主にAtlas素材。インポート設定変えると、大体直ります。このように変更しました:
変更後は、大きいければ15MBちょっとぐらいになります。とりあえず、画像がある程度壊れず、ラグ・ロード中画面が消えた場合はOKです。
気を付けるべきなのは、宴だと立ち絵の表示がなくても、立ち絵のあるキャラクター名が表示されただけで、立ち絵の素材がロードされます。(以前BgEvent中にラグが発生して、これが原因でした。が、素材のインポート設定変えたら直りました)
②jumpなどで、ラベルが変わったときのジャンプ先の素材のロードに時間がかかる。これは先ほど言った、「先に素材を読ませる」または「Static Asset Manager」に素材を登録させることで解決できます。
大きく分けてこの二つですが、解決方法のほかにも、もう一つ大事なのはサウンドファイルのインポート設定ですね。前の記事にも書きましたが、これを正しくBGM>streamingでボイス>compressed in memory(preload〇load in background〇)にするだけでかなりロード中画面やラグが減ったりします。
また、もう一つ気を付けるべきなのはこのロード中画面、エディターで出る回数がまれであっても、なぜかビルド後のゲームにもっと確実に出たりします……。
最後
以上ですが。慌てて書いたもので、誤字脱字あればすみません💦
あ、ちなみに私の作品も見てくれればうれしいです!
この記事が気に入ったらサポートをしてみませんか?