#2 Godot Engine ステップバイステップ 「ノードの種類」
前回の記事では、基礎となる「ノードとシーン」について少し書きました。
この記事で「は?ノードってなんだよ!専門用語ばっかり使うんじゃねぇ!」って方は、前回の記事をご覧ください。
ノードはおもちゃ!
ノードは、便利な機能の詰まったモノです。
僕にとってのイメージなので、わかりにくかったらすいません。
シーンとノードは子供部屋とおもちゃのようなものだと思ってます。
箱にはおもちゃがたくさん入ってます。
そのおもちゃは、それぞれ機能が違います。
・後ろに引くと走り出す車
・お腹を押すと鳴くクマ
・スイッチを入れると歩くロボット
これが「ノード」だと思っています。
厳密に言えば色々違いが出てくるんですが、初心者にはこの程度の認識でいいんです。
正しく完璧に認識する努力をして挫けるくらいなら、
間違っててもわかりやすく認識して続ける方が得です。
子供部屋といったのは、このおもちゃを使って「ごっこ遊び」を展開する場こそ、シーンに相当すると思います。
主人公のロボットが、走る車に蹴りを入れて、鳴いてるクマを助ける
子供時代の僕は、こんな「ごっこ遊び」をするわけです。
これをゲームエンジン的に変換すると、
RobotノードとCarノードの衝突を検知して、Bearノードが現れる
上記のような事ができるわけです。
少し脱線しましたが、要するに「現時点ではノードはおもちゃなのかぁ」くらいに思っていいです。
「ノード」という言葉を「おもちゃ」って訳しながら読んでもらっても構いません。
****
2Dゲームのノード
■ Node2D
2Dゲームの根幹となるようなノードですが、機能としてはシンプルです。
・座標が決められる
・大きさが決められる
・回転させられる
ざっくり言えばこれだけの機能です。
逆に「じゃあ他のノードでは、座標を決められないの?」と思う人もいるかも知れません。
Node2Dってどんなノードなのか?というと、僕の考え方で言えば「おもちゃ」という概念そのものです。
例えば、例に出した「クマのおもちゃ」も「車のおもちゃ」も機能は違います。
クマは走りませんし、車は鳴きません。
が、共通しているところもあります。
「手に持って移動させる」ことはできますし、「そのものをクルクルと回す」ことができます。
Node2Dというノードの機能は、そのくらい「根幹となるようなノード」なのです。
■ KinematicBody2D
名前が複雑ですが、要するに「人形」のようなノードです。
・ぶつかるといろんな反応をする
・設定すると自動で移動する
「おもちゃ」的な説明にしてみました。
ざっくりと機能的にはこんな感じです。
そして「KinematicBody2D」も「Node2D」ではあります。
これだけ言うとわかりにくいですね。
ようするに、「人形」も「おもちゃ」です。
わかりやすくなりましたか?
■ StaticBody2D
「KinematicBody2D」に似ていますが、「人形」というより「壁や床」のようなものです。
・ぶつかるといろんな反応をする
・ぶつかったときの摩擦や反射の設定ができる
・自動で移動はしない
手作業で壁や床を置くことはできますが、自動で動くような設定はできません。
プラレールのレールのようなものでしょうか。
■CollisionShape2D
モノが衝突するには、どれくらいの大きさなのか知る必要があります。
ざっくりいうと「CollisionShape2D」は上記で説明した「KinematicBody2D」「StaticBody2D」の衝突範囲を決めるためのものです。
・親ノードの衝突範囲を決める
・衝突する形を決める
「Body2D」系のノードには「ぶつかるといろんな反応」をする機能はあっても「ぶつかるための設定」はできないのです。
■ Sprite2D
絵です。
凄くシンプルな機能ですが、Node2Dのように、あらゆるノードが持っている機能ではありません。
・絵を表示する
・その絵がどう見えるか設定する
これまでのノードの説明では、わかりやすいように「おもちゃ」としてノードを説明しましたが、ノードそのものは目に見えません。
なので、もし絵を表示したい場合はSpriteに頼る必要があります。
ノードの集合体
さて、ここまで読んでくれた方は、上の画像の意味がわかるでしょうか?
Player(KinematicBody2D)ノードの中に、Collision(CollisionShape2D)とSprite(Sprite2D)がぶら下がっています。
これが「Player」という「おもちゃ」が「絵を表示して、衝突して反応する」機能を得て、自分の好きな「人形」になったわけです。
今回はここまでです!