Godot 玉転がし 05 「スタティックぼでー de ステージ設置」
幸いにも、3Dビューエディタの説明の所で、Godot内蔵の立方体を置くことは出来るようになっているハズ。で、今回はこいつを増やして伸ばして移動して~、玉転がしのステージを作っていこうと思う。まー単に、40m × 40m の床に四方を壁で囲っただけのものだけどな。見やすい様にわざとパーツを離してるけど、こんな感じな。
基本パーツの考え方
ステージは、床1、壁4、の5つのパーツから成っている。そこで重要になるのは、ひとつのパーツをノードで表現するやり方だ。まー、ひとつの立体をノードの組み合わせで作る時の、その「基本的な組み合わせ」という風にも言えるな。イヤイヤ、あまりにも初心者過ぎて恥ずかしいけど、俺にとっては超重要暗記事項なので、ズバリ答えを画像でドンだ。
(ノードの親子関係、間違えちゃダメだぜ!)
- StaticBody: 物体の性質。(動かないものの時はコレ)
- MeshInstance: 見た目のカタチ。
- CollisionShape: 当たり判定。
「スタティックボディー(性質) + メッシュインスタンス(かたち) + コリジョンシェイプ(当たり)」。うむ、これが、ひと「カタマリ」だ。もちろんノードの親子関係も間違えないようにね。
立体を置いた時に軽く言ったけど、その時は、まだコリジョンを付けていなかった。無いとどうなるか。当たり判定がないから、自身に向かってきた物体は、跳ね返すことが出来ず、すり抜けて行く。床とか壁がそんなではダメだろ。そこでコリジョンを追加する。これで、「基本的なひとつのカタマリ」として完成するのである。
まー、面白くやろうと思えば、球体のリジッドボディーを上から落として、「あーーー、すり抜けていくーーー。」とかやるんだろうけど、今の俺にはそんな余裕がないんだよー。お約束だとは思うけど誰かやれyo~。
CollisionShape
「StaticBody」と「MeshInstance」は大丈夫のハズ。「CollisionShape」ノードなんだが、ただ追加しただけでは使えない。名前の通りコリジョンのシェイプを選択しないといけない。インスペクターパネル > CollisionShapeカテゴリ > Shape、"<null>"をクリック。出てきたリストから、New BoxShapeを選択だ。
コリジョンの範囲は、丸ポチを引っ張って変えることが出来るが、親ノードのスケールに追随するので、親ノードで広げた方が便利ならば、そっちでやればイイ。コリジョンがメッシュと合っていればいいからね。
増やす
さて、ステージを作る。ステージは5つの部品から成ってるわけだから、ひとつのカタマリを複製して5つ作ればいいと思うんだが、右壁と左壁、手前の壁と奥の壁は、それぞれ一方が出来てから複製しよう。その方が早い。
というわけで、カタマリをまずは3つに増やす。シーンパネル、カタマリの親ノードである「StaticBody」を選択して、[Ctrl]+[D]で複製だ。[Ctrl]+[D]は、子ノードのことも考慮してやってくれるから便利やな。また、名前も分かりやすいものに変えておこう。
これ、複製した後でもメインパネル上には、1こしかないように見えるが、ちゃんと3つあるから心配すんなよ。3つが重なっているんだ。
伸ばす
[1] 床
床は、40m×40mだから、横(x軸)に20倍、奥行き(z軸)も20倍にする。拡大縮小は、3Dビューエディタから、ギズモ(マニピュレータ)を引っ張ったりして出来るけど、普通はやらない。インスペクターパネルから行う。場所は、Spatialカテゴリ>Transform>Scale。x、z、共に"20"だ。
(シーンパネルで「StaticBody_Floor」がちゃんと選択されていることを確認してな。)
見れば分かる通り、「移動・回転・拡大縮小」という、いわゆる「トランスふぉ~む」情報は、ココで管理されている。 (一番上の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"。
最後に、右壁と手前の壁を複製してイイ感じに移動させ、それぞれ左壁と奥の壁にすると、出来上がり。やったね。
まー、簡単に言うと、魔法の組み合わせである「スタティックボディー + メッシュインスタンス + コリジョンシェイプ(これさえ押さえておけば、どんな立体もバッチグーだ!)」を[Ctrl]+[D]して、Spatialの所で拡大・移動させればイイだけの話。好きな大きさにすればいいと思うぞ。
あと、「スタティックボディー」のプロパティだけイジル。「メッシュインスタンス」や「コリジョンシェイプ」は親ノードである「スタティックボディー」の変化に合わせて、イイ感じに揃えてくれるから、それでOKなのだ。1こだけイジればイイんだから、楽チンだよな。
次は、プレイヤーとなる「玉」に取り掛かって行こうと思う。それか、ライトとカメラ? どうしよう。