俺に解るように説明する "Godot Engine 3.x" 入門+

ゲームエンジン Godot Engine に関すること。入門とか使い方とかチュートリアルとか、あれとかこれとか。日本語解説。

Godot 玉転がし 14 「グローバル変数でカウントして、WINするぞ」

玉転がしの12の最後で「次回最終回」とか言っておきながら、全然最終回ではないという・・・。最終回詐欺だな。ま、それはそれとして、前回グローバル変数を設定したので、今回は実際にスクリプトの中で使っていく。グローバル変数の足し算が上手く出来れば、下図のようになる。「YOU WIN」。これが今回の出来上がり図だ。 f:id:ore2wakaru:20180318191556p:plain


懐かしの「Label」ノード

「WIN」の文字表示は「Label」ノードで行う。
f:id:ore2wakaru:20180318183335p:plain

  1. Label」ノードを追加。ただ、このままだとゲームスタート時点で表示されてしまうので、右横の[目玉]アイコンをクリックして、[閉じ目]にする。これで、「Label」ノードはゲームスタート時、非表示になる。
  2. 文字列の入力。複数行入れたい時は、右横の[複数行いけますよー]のアイコンをクリック。デカすぎる窓が開くのでそこで入力。別に、1行だけの文字列入力もこれでいけるが、量が少ない場合は、点線で囲った部分をクリックすれば1行入力が出来る。
  3. 文字の拡大はここだった。ギザギザ拡大の場所。綺麗に拡大したい場合は、ずっと前にやったように、フォントを入れてから、DynamicFontの設定 > Settings > Sizeでやればいい。(エアホッケーの2、3、4あたりを参照。)
  4. 後は、表示させたい場所に移動させればいい。

実に簡単だ。ずっと前にもやったしな。

ま、もしよかったら、文字と影に色でも付けてみてくれ。場所は、Controlカテゴリ > Custom Colors > Font ColorFont Color Shadow。色の付いた部分をクリックで、カラーピッカーが開く。そこで好きな色を選択だ。また、左にあるチェックマークを外せば、デフォルトに戻る。
f:id:ore2wakaru:20180318184206p:plain

それから、これも復習だが、UI(2D)用のカメラは自分で置かなくてイイ。UI(2D)ノードは、シーンツリーに追加された時、Godot君が自動的に画面表示させてくれる。


== 12 で visible ON

コレクタブル(「Area」ノード)にくっつけたスクリプトに加筆する。
f:id:ore2wakaru:20180318193732p:plain

  1. スクリプトエディタにして、
  2. 該当のスクリプトを選択し、
  3. この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
    • こっちの方がダンゼン分かりやすい。だけど、せっかくグローバル変数を使って短く書けるってのをやる訳だから、"+="を使ってみた感じだ。玉がコレクタブルに重なったら(オーバーラップしたら)、ここで何個やったかカウントしてるだけね。
    • if My_Global.my_score == 12:
          get_node("/root/Spatial_GOD/Label").set_visible(true)
    • 12回重なったら、ラベルノードを表示するって部分。
    • "==": ちょっと注意。"="じゃないから。比較する時は2個必要な。1個だと代入になっちゃうからな。だが何回やっても間違えるぜ。で、「あれ?」ってなるな。
    • "get_node("/root/Spatial_GOD/Label")": ラベルノードにアクセスしてる。シーンツリーのルートから、絶対アドレスで指定だ。ノードの名前を変えていたら、自分で変えたノードの名前にしてくれよ。
    • "set_visible(true)": [目玉]アイコンを閉じて非表示にしたじゃん。あれを表示させる関数な。カッコの中、trueで表示、falseで非表示だ。
  4. 上にも書いたけど、ノードの名前変更に注意な。作成途中でリネームしてもスクリプトには自動で反映されないから。「やっぱ名前変えちゃおー」ってやったら、スクリプトの方でも使ってないか注意だ。


完成!

シーン再生だ。
f:id:ore2wakaru:20180318205423g:plain

どや!


いや~、できたね~、クソゲ。だが今回、これで「最終回」ではない! Godotエディタを持ってない人でも遊べるようにしなくちゃダメだろ。そうビルドしなくちゃなんねーぞ! 

ふ~、忘れるところだったぜ。では、また。