Godot4 地形の当たり判定領域をPolygon2Dポリゴン情報から自動設定

無料・軽快な 2D / 3D 用のゲームエンジン Godot Engine 4 で、 Polygon2D ノードを使ってデザインした地形の上を、 CharacterBody2D ノードを使ったキャラクターが移動する実装の手順を紹介します。

Godot4 Polygon2Dの地形で CharacterBody2D のキャラを動かした例

Polygon2D のポリゴンの編集例や、StaticBody2DCollisionPolygon2D によって衝突判定などの物理演算を行うようにする設定、当たり判定領域を設定するスクリプトについても紹介します。

※ GodotEngine 4.3 を使用しています。.NET 版ではありません。

前回の記事

前回は、Polygon2D ノードを使って簡単に凸凹(デコボコ)な形を作る手順を紹介しました。

前々回は、2D の左右移動やジャンプ移動ができる CharacterBody2D クラスを使って、操作するキャラクターのシーンを作成しました。

ポリゴン地形の構成

ポリゴンによる地形を表現するノード群は、以下の3つのノードによって構成します。

  • StaticBody2D : 動かない物体の衝突判定・相互作用の物理演算を行うノード。
    • CollisionPolygon2D : 当たり判定領域をポリゴンで設定するノード。
    • Polygon2D : ポリゴンの表示を行うノード。

このポリゴン地形のノード群は、 Node2D ルートノードの下に複数配置できます。

ステージ用のシーンの作成

新規シーンのシーンドックで「 2D シーン」を選択すると Node2D ルートノードのシーンを作成できます。
※新規シーンはメニュー「シーン」→「新規シーン」で開くことができます。

Godot4 Polygon2D でステージの地形を作成1

Node2D の下に、前述したポリゴン地形のノード群を追加します。

はじめに、動かない物体の物理演算を行う StaticBody2D子ノードとして追加します。
※子ノードを追加するには、追加先のノードを右クリックして表示されるメニュー「子ノードを追加」を選択します。
※「Node を新規作成」ダイアログの上部の検索ボックスを使うとノードを探しやすいです。

Godot4 Polygon2D でステージの地形を作成2

シーンドックで、追加した StaticBody2D 子ノードの右側に警告のマークが表示されます。
マウスオーバーすると、当たり判定領域を設定する子ノードがないと衝突判定などができないというメッセージが表示されました。

ノードの設定に関する警告:
・このノードにはシェイプがないため、他のオブジェクトと衝突または相互作用することはできません。
CollisionShape2D または CollisionPolygon2D を子として追加して、シェイプを定義することを検討してください。
Godot4 Polygon2D でステージの地形を作成3

警告文に従って、 StaticBody2D ノードに CollisionPolygon2D 子ノードを追加します。
※子ノードを追加するには、追加先のノードを右クリックして表示されるメニュー「子ノードを追加」を選択します。
※「Node を新規作成」ダイアログの上部の検索ボックスを使うとノードを探しやすいです。

Godot4 Polygon2D でステージの地形を作成4

追加した CollisionPolygon2D ノードも、何も設定していない状態では衝突判定ができないというメッセージが表示されますが、これについては、別記事で Polygon2D ノードで設定したポリゴン情報をコピーして対応します。

Godot4 Polygon2D でステージの地形を作成5

次に、StaticBody2D ノードに Polygon2D 子ノードを追加します。
※子ノードを追加するには、追加先のノードを右クリックして表示されるメニュー「子ノードを追加」を選択します。
※「Node を新規作成」ダイアログの上部の検索ボックスを使うとノードを探しやすいです。

Godot4 Polygon2D でステージの地形を作成6

前回の記事で紹介したように Polygon2D ノードを選択して、2D ワークスペースにグリッドスナップを有効にしてクリックして、マス目単位に頂点を追加してポリゴンを作成します。

Godot4 Polygon2D の頂点をピクセルスナップで設定する準備5

当たり判定領域をスクリプトで設定

CollisionPolygon2D ノードに設定する当たり判定領域のポリゴンの情報は、先ほどクリックして設定した Polygon2D ノードの表示するポリゴンの情報と同じなので、ポリゴンの情報をコピーする GD スクリプトを上位ノードの StaticBody2D ノードに作成して割り当てます。

スクリプトを作成する前に、 StaticBody2D ノードの名前Terrain (地形) に変更しました。
※ノードの名前を変更する際は、ノードを右クリックして表示されるメニュー「名前の変更」を選択します。

シーンドックで、Terrain (StaticBody2D) ノードを選択してから、右上の+マークのついた「選択したノードに新規または既存のスクリプトをアタッチする」ボタンを押します。

表示された「ノードにスクリプトをアタッチする」ダイアログで、作成する gd ファイル名を確認して「作成」ボタンを押します。

Godot4 Polygon2D でステージの地形の当たり判定を設定1

ウィンドウ上部の Script ワークスペースを選択すると、作成した terrain.gd スクリプトのスケルトンコードが表示されるので、以下のコードをコピー&ペーストして上書きします。
※コードは自己責任でご利用ください。

ノードがシーンに読み込まれた最初のタイミングで呼び出される _ready 関数で、 Polygon2D ノードに設定したポリゴンの情報を、当たり判定領域を設定する CollisionPolygon2D ノードコピーしています。

extends StaticBody2D
class_name Terrain

# 下位にある Polygon2D ノード
var node_polygon2d: Polygon2D
# 下位にある CollsionPollygon2D ノード
var node_collision_pollygon2d: CollisionPolygon2D

# Called when the node enters the scene tree for the first time.
func _ready():
	# 下位にあるデフォルトの名前の2つのノードを取得します。
	node_polygon2d = get_node("Polygon2D")
	node_collision_pollygon2d = get_node("CollisionPolygon2D")
	
	# 形を設定した Polygon2D ノードの polygon の情報を 当たり判定の領域として設定します。
	node_collision_pollygon2d.polygon = node_polygon2d.polygon


# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta):
	pass

ポリゴンの地形をシーンに作成したので、このステージのシーンを Ctrl + S キーなどで保存します。
ルートノードは Node2D から Stage1 に名前を変更して、シーン名は stage_1.tscn にしました。
※ノードの名前を変更する際は、ノードを右クリックして表示されるメニュー「名前の変更」を選択します。

Godot4 Polygon2D で作ったステージのシーンを保存

操作するキャラをステージのシーンに追加

前々回に作成したジャンプ移動する 2D のキャラのシーンが保存された tscn ファイルを、ファイルシステムドックからシーンドックの Stage1 ルートノードドラッグ&ドロップして、 Stage1 シーンに子ノードとして追加します。

キャラのシーンの作成については、以下の記事を参照してください。

Godot4 Polygon2D で作ったステージに CharacterBody2D で作ったキャラのシーンを子ノードとして追加

追加したキャラのノード( GodotSan ) をシーンドックで選択してから、 2D ワークスペースのツールバーの「移動モード」トグルボタンをクリックして有効にしてから、追加したキャラの周囲の矢印のハンドルをマウスドラッグして、最初に出現させる位置を調整します。

Godot4 Polygon2D で作ったステージに追加した CharacterBody2D で作ったキャラの位置を調整

位置の調整ができたら Ctrl + S キーシーンの変更を保存します。

テスト

ウィンドウ右上の「現在のシーンを実行(F6)」ボタンを押して、キャラを追加した Stage1 のシーンを実行します。

Godot4 Polygon2D で作ったステージに追加した CharacterBody2D で作ったキャラを移動させるテスト1

← → キーで左右に移動して、スペースキーでジャンプして、デザインしたポリゴンの地形の上を移動させることができました。

Godot4 Polygon2Dの地形で CharacterBody2D のキャラを動かした例
Godot4 Polygon2D で作ったステージに追加した CharacterBody2D で作ったキャラを移動させるテスト2

まとめ

今回は、無料・軽快な 2D / 3D 用のゲームエンジン Godot Engine 4 で、 Polygon2D ノードを使ってデザインした地形の上を、 CharacterBody2D ノードを使ったキャラクターが移動する実装の手順を紹介しました。
Polygon2D のポリゴンの編集例や、StaticBody2DCollisionPolygon2D によって衝突判定などの物理演算を行うようにする設定、当たり判定領域を設定するスクリプトについても紹介しました。

参照サイト Thank You!

記事一覧 → Compota-Soft-Press

コメント

Ads Blocker Image Powered by Code Help Pro

お願い - Ads Blocker Detected

このサイトは広告を掲載して運営しています。

ポップアップを閉じて閲覧できますが、よろしければ

このサイト内の広告を非表示にする拡張機能をオフにしていただけませんか?

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

We have detected that you are using extensions to block ads. Please support us by disabling these ads blocker.

タイトルとURLをコピーしました