見出し画像

ティラノスクリプト×Live2D、不具合との戦い

Live2Dは、以前手を出したことがあり、その時は挫折しました。
今回再挑戦して、前回制作したフリーゲームをLIve2Dで作り直したはいいけど、これがエラーの連続……。

なんとか公開できたものの、いつ何時不具合発生するか分からないビクビク状態です。
もちろん、公開申請前にデバックはしました。が、このエラー、起きる時と起きない時があって、正直もう「わっかんねー」状態。

発生した不具合とその対策をまとめておきます(私の環境だけかもしれないけど)。
スクリプトに明るくないので、対策として適しているかどうか不明ですが、とりあえず動くようにはなりました。
 

Live2Dモデルが表示されない


この不具合が最も多かったです。
ティラノスクリプトの公式サイトにLive2Dプラグインがあるので、プラグインを使えば、表示はされます。

問題は、セーブ・ロード後に、ゲームを再開する場合。
ロードすると、Live2Dモデルが表示されないことが多々ありました。メーセージウインドウは表示されて、モデルだけがいない。

デバックで「コンソール」を見ても、エラー表示なしか、もしくは render エラーです。描画段階の不具合??

厄介な事に、この不具合は、セーブしないで続けてプレイしていれば、発生しません。また、セーブしてもタイトル画面に戻ってからロードすると、発生しません。
タイトル画面に戻らずセーブ+ロードをした場合に、起こります。

■対策パターン1■
[live2d_delete_all] タグで、Live2Dモデルを削除。その後 [live2d_new]、[live2d_show] で再定義し表示させる

ただし、注意点があります。[live2d_delete_all] は、直前に置かないと効果がない様子。たとえば、

ティラノスクリプトの不具合タグ

これだと、シーン3で、再定義しているにも関わらず、モデルが表示されません。シーン2の最後に [live2d_delete_all] を持ってくると、表示されるようになりました。

[live2d_hide] を入れたのが悪かったのか、はたまた [cm] タグを挟んだせいで、そうなったのか……。

ちなみに、[live2d_hide] で「ハル」を退場させ、[live2d_delete_all] で削除した後、別モデルを [live2d_new] [live2d_show] しても、同様です。
中間にモデル不在のシーンがあると、次のシーンで表示されません。

■対策パターン2■
[live2d_fadeout] を使ったら、必ず [live2d_fadein] を使う

ティラノスクリプトの公式サイトにも、「明示的に[live2d_fadein]するまでモデルが表示されませんのでご注意ください」と記述があります。

フェードインが必要でなくても、 [live2d_fadein] を置かないと、モデルは表示されません。うっかり忘れて、普通に [live2d_show] だけしたら、アウト。
私は、何度もこれをやらかしました。

■対策パターン3■
[image] は、[freeimage] ではなく、[free name=〇〇] で消す

これも落とし穴。[image] タグの画像を [freeimage] で消すと、Live2Dモデルも消えてしまいます。

Live2Dモデルがどのレイヤに属するのか分からないけど、[freeimage layer="0"] だと確実に消えます。
不要の image画像は、[free name=〇〇 layer="0"] のようにして消せば、Live2Dモデルは影響を受けません。

画面がフリーズする


Live2Dが原因なのかそうでないのか分かりませんが……
どうも、 [image] タグで表示させた画像をアニメーションするときに起こる?

[anim] タグを使ったら [wa] でアニメーション終了を待つ、と機械的に覚えてたのですが、[wa] を入れた箇所でフリーズ多発しました。

ただ、なぜか再現する時としない時があって、デバック時に普通に動いていたのに、パッケージングした後、フリーズ発生したり。
デバック時も、[wa] があるシーン近くでセーブするとフリーズするけど、遠いシーンでセーブした場合は動いたり。
スクリプトに疎いので、なにがなんだか???の嵐です。

理由は分からないなりに、[wa] があるせいだろうと判断し、[wa] を消して代わりに、アニメーション時間分の [wait time=〇〇] にしたら、フリーズ回避できた……ようです多分。

Live2Dモデルは layer="0"?


・Live2Dモデルは [anim] ができない

これに関しては、不具合ではなく仕様だと思われます。
Live2Dモデルを画面上で移動させたい場合、[anim] では動きませんが、[camera] を使えば同じような効果が出せます。

Live2Dモデルは、おそらく layer=0 にあるのではないかと。
なので、layer=0 をカメラで動かせばOKです。ただ、同じレイヤ上に他の [image] 画像があると、それも一緒に動いてしまうのでご注意を。

まれに、[image layer=0] の画像を [anim] で動かした時、つられて(?) live2Dモデルも一緒に動くことがありました。[image] にはちゃんと name を付けて動かしたはずなのに……。原因不明です。

Live2Dモデルの属するレイヤを変更すれば、[image] と別々の位置移動が可能かもですが、私ではお手上げです。もしかしたら tyrano.css をいじればできるのかも?

・Live2Dモデルを [image] の前に出すには

Live2Dモデルのレイヤが変更できないなら、 [image] 側のレイヤ変更すればいいのでは? と言いたいところだけど、色々問題があって……。

というのも、[image] 側のレイヤを layer="1" にすると、こうなります。

imageのレイヤを“1”にした場合

Live2Dモデルを前に出したい場合、いくつか手順を踏む必要があります。

  1. 直前のシーンで [live2d_delete_all] を入れ、モデルを削除しておく( [live2d_hide] ではうまくいきません)

  2. [image layer="0" zindex="0"] で [image] を表示させてから、[live2d_new] [live2d_show] でモデルの再定義と表示

手順1,2をした場合


[live2d_delete_all] をしておかないと、モデルは前に来ません。
また、[image layer="0"] だけで zindex="0" を入れないと、モデルは前に来ません。

今思い出せる範囲ではこれぐらい。他に思い出したら、追記します。

Live2Dモデルのことではないけど、[layermode_movie] でMP4形式の動画をskipすると、動画の画像がおかしくなったり……。

公式サイトのタブリファレンスには「MP4形式推奨」と記載あり、テクニック編の「レイヤー合成(映像)」動作デモでは、「webm推奨」となっていたので、どちらにしたらいいか迷った末、MP4にしたけど、webmならよかったのかも……?

動画部分については、対処法が分からないため、できましたらスキップしないでください、とお願いするしかない……。

全体的に、不具合発生するのは、だいたいセーブロード時かスキップ時のようです。

そんな感じで、今回のゲーム制作はめちゃめちゃ苦労しました。
正直、もう二度とやりたくない(苦笑)。

DLなしでブラウザからもプレイできるので、よろしかったら遊んでみてください。
(もし不具合見つかれば、教えていただけると幸いです)


この記事が気に入ったらサポートをしてみませんか?