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

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

Godot 玉転がし 05 「スタティックぼでー de ステージ設置」

幸いにも、3Dビューエディタの説明の所で、Godot内蔵の立方体を置くことは出来るようになっているハズ。で、今回はこいつを増やして伸ばして移動して~、玉転がしのステージを作っていこうと思う。まー単に、40m × 40m の床に四方を壁で囲っただけのものだけどな。見やすい様にわざとパーツを離してるけど、こんな感じな。 f:id:ore2wakaru:20180228184321p:plain


基本パーツの考え方

ステージは、床1、壁4、の5つのパーツから成っている。そこで重要になるのは、ひとつのパーツをノードで表現するやり方だ。まー、ひとつの立体をノードの組み合わせで作る時の、その「基本的な組み合わせ」という風にも言えるな。イヤイヤ、あまりにも初心者過ぎて恥ずかしいけど、俺にとっては超重要暗記事項なので、ズバリ答えを画像でドンだ。
f:id:ore2wakaru:20180228175408p:plain
(ノードの親子関係、間違えちゃダメだぜ!)

  • StaticBody: 物体の性質。(動かないものの時はコレ)
    • MeshInstance: 見た目のカタチ。
    • CollisionShape: 当たり判定。

「スタティックボディー(性質) + メッシュインスタンス(かたち) + コリジョンシェイプ(当たり)」。うむ、これが、ひと「カタマリ」だ。もちろんノードの親子関係も間違えないようにね。

立体を置いた時に軽く言ったけど、その時は、まだコリジョンを付けていなかった。無いとどうなるか。当たり判定がないから、自身に向かってきた物体は、跳ね返すことが出来ず、すり抜けて行く。床とか壁がそんなではダメだろ。そこでコリジョンを追加する。これで、「基本的なひとつのカタマリ」として完成するのである。

まー、面白くやろうと思えば、球体のリジッドボディーを上から落として、「あーーー、すり抜けていくーーー。」とかやるんだろうけど、今の俺にはそんな余裕がないんだよー。お約束だとは思うけど誰かやれyo~。


CollisionShape

「StaticBody」と「MeshInstance」は大丈夫のハズ。「CollisionShape」ノードなんだが、ただ追加しただけでは使えない。名前の通りコリジョンシェイプを選択しないといけない。インスペクターパネル > CollisionShapeカテゴリ > Shape、"<null>"をクリック。出てきたリストから、New BoxShapeを選択だ。
f:id:ore2wakaru:20180331141907p:plain

コリジョンの範囲は、丸ポチを引っ張って変えることが出来るが、親ノードのスケールに追随するので、親ノードで広げた方が便利ならば、そっちでやればイイ。コリジョンがメッシュと合っていればいいからね。

f:id:ore2wakaru:20180413182951p:plain


増やす

さて、ステージを作る。ステージは5つの部品から成ってるわけだから、ひとつのカタマリを複製して5つ作ればいいと思うんだが、右壁と左壁、手前の壁と奥の壁は、それぞれ一方が出来てから複製しよう。その方が早い。

というわけで、カタマリをまずは3つに増やす。シーンパネル、カタマリの親ノードである「StaticBody」を選択して、[Ctrl]+[D]で複製だ。[Ctrl]+[D]は、子ノードのことも考慮してやってくれるから便利やな。また、名前も分かりやすいものに変えておこう。 f:id:ore2wakaru:20180228203753p:plain

これ、複製した後でもメインパネル上には、1こしかないように見えるが、ちゃんと3つあるから心配すんなよ。3つが重なっているんだ。


伸ばす

[1] 床

床は、40m×40mだから、横(x軸)に20倍、奥行き(z軸)も20倍にする。拡大縮小は、3Dビューエディタから、ギズモ(マニピュレータ)を引っ張ったりして出来るけど、普通はやらない。インスペクターパネルから行う。場所は、Spatialカテゴリ>TransformScalexz、共に"20"だ。 f:id:ore2wakaru:20180228205646p:plain
(シーンパネルで「StaticBody_Floor」がちゃんと選択されていることを確認してな。)

見れば分かる通り、「移動・回転・拡大縮小」という、いわゆる「トランスふぉ~む」情報は、ココで管理されている。 f:id:ore2wakaru:20180228211503p:plain (一番上のTransformは全部(移動・回転・拡大縮小)を一気に表現できるヤツっぽい。分からんけど。)

[2] 壁

右の壁は、高さ(y軸)2倍、奥行き(z軸)20倍。

手前の壁は、横(x軸)に22倍、高さ(y軸)2倍。

それぞれ修正する。間違って、メッシュインスタンスとかコリジョンとかいじるなよ。「StaticBody_Wall_Right」と「StaticBody_Wall_Front」な。


移動する & 複製

当たり前だが、壁を移動させる。移動はTranslationの所。右壁は"x:21 y:3 z:0"、手前の壁は"x:0 y:3 z:21"。 f:id:ore2wakaru:20180228220827p:plain

最後に、右壁と手前の壁を複製してイイ感じに移動させ、それぞれ左壁と奥の壁にすると、出来上がり。やったね。 f:id:ore2wakaru:20180228222153p:plain



まー、簡単に言うと、魔法の組み合わせである「スタティックボディー + メッシュインスタンス + コリジョンシェイプ(これさえ押さえておけば、どんな立体もバッチグーだ!)」を[Ctrl]+[D]して、Spatialの所で拡大・移動させればイイだけの話。好きな大きさにすればいいと思うぞ。

あと、「スタティックボディー」のプロパティだけイジル。「メッシュインスタンス」や「コリジョンシェイプ」は親ノードである「スタティックボディー」の変化に合わせて、イイ感じに揃えてくれるから、それでOKなのだ。1こだけイジればイイんだから、楽チンだよな。

次は、プレイヤーとなる「玉」に取り掛かって行こうと思う。それか、ライトとカメラ? どうしよう。