Godot 玉転がし 14 「グローバル変数でカウントして、WINするぞ」
玉転がしの12の最後で「次回最終回」とか言っておきながら、全然最終回ではないという・・・。最終回詐欺だな。ま、それはそれとして、前回グローバル変数を設定したので、今回は実際にスクリプトの中で使っていく。グローバル変数の足し算が上手く出来れば、下図のようになる。「YOU WIN」。これが今回の出来上がり図だ。
懐かしの「Label」ノード
「WIN」の文字表示は「Label」ノードで行う。
- 「Label」ノードを追加。ただ、このままだとゲームスタート時点で表示されてしまうので、右横の[目玉]アイコンをクリックして、[閉じ目]にする。これで、「Label」ノードはゲームスタート時、非表示になる。
- 文字列の入力。複数行入れたい時は、右横の[複数行いけますよー]のアイコンをクリック。デカすぎる窓が開くのでそこで入力。別に、1行だけの文字列入力もこれでいけるが、量が少ない場合は、点線で囲った部分をクリックすれば1行入力が出来る。
- 文字の拡大はここだった。ギザギザ拡大の場所。綺麗に拡大したい場合は、ずっと前にやったように、フォントを入れてから、DynamicFontの設定 > Settings > Sizeでやればいい。(エアホッケーの2、3、4あたりを参照。)
- 後は、表示させたい場所に移動させればいい。
実に簡単だ。ずっと前にもやったしな。
ま、もしよかったら、文字と影に色でも付けてみてくれ。場所は、Controlカテゴリ > Custom Colors > Font Color と Font Color Shadow。色の付いた部分をクリックで、カラーピッカーが開く。そこで好きな色を選択だ。また、左にあるチェックマークを外せば、デフォルトに戻る。
それから、これも復習だが、UI(2D)用のカメラは自分で置かなくてイイ。UI(2D)ノードは、シーンツリーに追加された時、Godot君が自動的に画面表示させてくれる。
== 12 で visible ON
コレクタブル(「Area」ノード)にくっつけたスクリプトに加筆する。
- スクリプトエディタにして、
- 該当のスクリプトを選択し、
- この3行追加。順に説明する。
My_Global.my_score += 1
- "My_Global.my_score": グローバル変数へのアクセスの仕方。"My_Global.gd"の中で変数"my_score"を作って、そんで[AutoLoad]に設定したじゃん。この変数へのアクセスの仕方がこんな感じになる。
- "+= 1": 簡単に言うと、+1しろってこと。だけど、俺はこの書き方がなかなか馴染めないんだヨな。"+="っていう記号が嫌いだ。なんで"+"が"="の左にあんの? おかしくね? ま、次のように書いても同じことだ。
My_Global.my_score = My_Global.my_score + 1
- こっちの方がダンゼン分かりやすい。だけど、せっかくグローバル変数を使って短く書けるってのをやる訳だから、"+="を使ってみた感じだ。玉がコレクタブルに重なったら(オーバーラップしたら)、ここで何個やったかカウントしてるだけね。
- 12回重なったら、ラベルノードを表示するって部分。
- "==": ちょっと注意。"="じゃないから。比較する時は2個必要な。1個だと代入になっちゃうからな。だが何回やっても間違えるぜ。で、「あれ?」ってなるな。
- "get_node("/root/Spatial_GOD/Label")": ラベルノードにアクセスしてる。シーンツリーのルートから、絶対アドレスで指定だ。ノードの名前を変えていたら、自分で変えたノードの名前にしてくれよ。
- "set_visible(true)": [目玉]アイコンを閉じて非表示にしたじゃん。あれを表示させる関数な。カッコの中、trueで表示、falseで非表示だ。
- 上にも書いたけど、ノードの名前変更に注意な。作成途中でリネームしてもスクリプトには自動で反映されないから。「やっぱ名前変えちゃおー」ってやったら、スクリプトの方でも使ってないか注意だ。
if My_Global.my_score == 12: get_node("/root/Spatial_GOD/Label").set_visible(true)
完成!
シーン再生だ。
どや!
いや~、できたね~、クソゲ。だが今回、これで「最終回」ではない! Godotエディタを持ってない人でも遊べるようにしなくちゃダメだろ。そうビルドしなくちゃなんねーぞ!
ふ~、忘れるところだったぜ。では、また。