GB Studio TIPS③迷った時のアイディア集
このTIPSシリーズでは、GB Studioを使っていて躓きがちな…というか自分が前に躓いた点をピンポイントに解説していきたいと思います。
第3回目は困った時の解決法やアイディア集。
※以下の内容は検証し出来るだけ正確になるよう心掛けていますが、全然間違っている可能性もあります。ご留意ください。
使用ソフト:GB Studio 3.2.1
シーンのスクリプトサイズが大きすぎて実行できない!
GB Studioは、3.0にバージョンアップした際にスクリプトの最大サイズが小さくなってしまったようです。
それによって、ひとつのシーンに沢山のイベントがあるとあっという間に上限に達しコンパイルできずエラーを吐かれてしまいます。
では、この制約の下で長く複雑な処理をするにはどうすればいいのか?
その解決策は「イベントをスクリプトにまとめて必要なシーンで呼び出す」です。
画面左側中段にあるSCRIPTSの横の+を押して新しいスクリプトを作り、そこに通常通りイベントを追加していきます。
シーン内にControl Flow>Call Scriptでそのスクリプトを呼び出し、場合によっては渡す値を設定すればシーン内に含まれる処理が少なくなるのでこのエラーを回避できる可能性があります。
ただ、この外付けスクリプト自体も長すぎるとサイズ制限に引っかかってしまいます。
その場合は複数のスクリプトに一連の処理を分割し、シーンで連続して呼び出すと回避できます。
スクリプト内で別スクリプトを呼び出すことも出来ますが、多重構造にして値の受け渡しをすると数値が変わったりおかしな挙動をする場合もあるので注意が必要。
加えて、スクリプト内でボタンに処理をアタッチするイベントを置きその中でアクター操作しようとするとPlayerしか候補に出てきません(通常は任意のアクターをあてはめられるホルダーにできる)
そのため、ボタンに処理をアタッチするイベントはシーンに置き、押されたら実行したいスクリプトを呼ぶようにするとGood!
フェード無しでシーン遷移すると一瞬画面がグチャっとなる!
GB Studioでは、デフォルトだとシーンチェンジ時必ず白か黒のフェードが入ります。
そうではなく、パッとすぐにシーンを変えたい場合はこのプラグインがオススメ。
GB Studio Plugin Collection by Y0UR-U5ERNAME
https://github.com/Y0UR-U5ERNAME/gbs-plugin-collection
しかし、フェード無し遷移をする瞬間はスプライトの表示がおかしくなってしまいます。
そのグリッチな感じをなくすカギ、それはカラーパレットです。
まずは4色とも白or黒のカラーパレットを追加します。
次にシーン遷移前に背景カラーを全てそれに変え、遷移先のシーンのOn Initフェードイン前にそのシーンで使いたい色のカラーパレットをセット。
これで、シーンチェンジの瞬間には背景色が一色になるのでスプライトのグチャグチャが見えません!
アクターのスプライトも同じく壊滅するので、アクターを設置している場合はスプライトカラーも同様の色変更イベントを追加してください。
ダイアログを一瞬で表示させたい
ダイアログは通常画面外からニュッとスライドインして表示されます。
テキスト表示のテンポをよくしたり一瞬でダイアログを表示したい場合、このいかにもテキストボックスっぽい動きを無くしたいこともあるでしょう。
その場合の対処法は簡単。
「テキスト:アニメーション速度を設定する」の中のText Open SpeedとText Close Speedをinstantにすると一瞬でテキストボックスを表示&非表示できます。
変数に文字を入れたい
GB Studioでも扱いたいですよね、文字。
名前入力のシステムを作っているとき、ああstringが使えれば…と思わずにはいられませんでした。あと配列も。あとあとfloatも。
残念ながら、変数に文字そのものを入れることはできません。
ですが、ある工夫をすることで名前入力システムなんかも作れるんです!
Input Name System - 日本語(Japanese)
https://cobaltaoi.itch.io/input-name-system-japanese
このように、少し手間はかかりますが文字を変数に保存することは可能です。
なぜなら、#変数名 か #n(変数番号)# で、その変数に格納された数字と同じASCiiコードの文字を表示できるから!スゴイ!!
この方法を利用すれば、変数ひとつにつき1文字を保持することが可能です。
詳しくは上記のシステムサンプルをご覧下さい。
ですが少しだけ注意点もあり…
変数の初期値である0に相当するのはnull文字であり、文字列の途中にこれが入ると以降の文字が表示されなくなってしまいます。
なので、0が入っている変数は表示されないよう、入力された文字列の長さを別の変数で保管してswitchで分岐させたりと工夫が必要。
ちなみにスペースのASCiiコードは32。文字が入力されなかった文字用変数には32を入れておくとnullによるこのような事故が防げるかもしれません。
フォントによってはコードが独自にマッピングし直されているので、プロジェクトのfontフォルダに入っているjsonファイルを見て確認しましょう。
基本的なASCiiコードの対応表はこちらでも確認することができます。
ASCiiコード表 - IT用語辞典 e-Words
https://e-words.jp/p/r-ascii.html
おわりに
今回は実際にゲーム制作中に躓きそして閃いた点やアイディアをまとめたため、かなり偏ったTIPSになってしまいました。
ですが、その分ちょっとだけ深めに内容を掘れたような気がします。
このTIPSシリーズに関してはすべてそうですが、これらの内容や知識で制作に活かせそうなものはご自由にお使いになってかまいません。もちろん、間違っている可能性もあるので自己責任で…
かくいう自分も、数多の先輩の皆様が書き記して下さった記事を頼りにやってきました。
この記事もこのネット世界の片隅で、何かの種になったら幸いです。
最後までお読みいただき、ありがとうございました。今後もよろしくお願いします。