Godot4 ノード型変換と見下ろし型CharacterBody2Dのコード例

無料・軽快な 2D / 3D 用のゲームエンジン Godot Engine 4 で、すでに作成したノードの型を別の型に変更する手順を紹介します。
例として Area2D クラスから CharacterBody2D クラスへ変更します。
また、 CharacterBody2D でトップビュー(見下ろし型)の移動を行うスクリプト例も紹介します。

※ GodotEngine 4.3 を使用しています。.NET 版ではありません。
※スクリプトは自己責任でご使用ください。
※本記事は 2024 年 12 月 17 日の記事ですが、前回の記事との関連を考慮して、 2024 年 12 月 16 日に公開しました。

前回の記事

前回は、タイルマップに配置した障害物となるマップチップ(タイル)に当たり判定の領域を設定しました。

操作キャラのノードの型の変更

前回までは Area2D をルートノードとした操作キャラを上下左右に移動させていました。
しかし Area2D では、壁にぶつかったら止まるといった、衝突による相互作用が実装されていないので、それを簡単に実現できる CharacterBody2D クラスに変更します。

ノードの型を変更するには、シーンドックでそのノード右クリックして表示されるメニュー「型の変更」を選択します。

Godot4 壁で止まるように移動させるために Area2D から CharacterBody2D へ変更します1.

「型を変更する」ダイアログで、変更後の型を選択して「変更」ボタンを押します。
※ダイアログの上部の検索ボックスを利用すると探しやすいです。

Godot4 壁で止まるように移動させるために Area2D から CharacterBody2D へ変更します2.

以上で、Area2D から CharacterBody2D にノードのベースの型を変更できました。

Motion Mode を「見下ろし型」向けの Floating に変更

CharacterBody2D では、ジャンプしたりするサイドビューの挙動と、上から見下ろした状態で移動するトップビューの挙動Motion Mode プロパティ選択できます。

Motion Mode プロパティを初期値の Grounded から Floating に変更することで、坂道の加速・減速などがなくなり、トップビューに都合の良い常に一定の速度で移動するようになります。
また、衝突したときは on_wall として報告されるようになります。

MotionMode MOTION_MODE_GROUNDED = 0

Apply when notions of walls, ceiling and floor are relevant. In this mode the body motion will react to slopes (acceleration/slowdown). This mode is suitable for sided games like platformers.

壁、天井、床の概念が関連する場合に適用します。このモードでは、車体の動きが坂道(加速/減速)に反応します。このモードは、プラットフォーマーなどのサイド ゲームに適しています。

MotionMode MOTION_MODE_FLOATING = 1

Apply when there is no notion of floor or ceiling. All collisions will be reported as on_wall. In this mode, when you slide, the speed will always be constant. This mode is suitable for top-down games.

床や天井の概念がない場合に適用します。すべての衝突は on_wall として報告されます。このモードでは、スライドするときの速度は常に一定になります。このモードはトップダウン ゲームに適しています。
CharacterBody2D — Godot Engine (4.x)の日本語のドキュメント と Google 翻訳

CharacterBody2D ベースのノードシーンドックで選択してから、インスペクタードックの Motion Mode プロパティのリストを開いて Floating を選択しました。

Godot4 壁で止まるように移動させるために Area2D から CharacterBody2D へ変更します3.

CharacterBody2D (見下ろし型)用のスクリプトに変更

CharacterBody2D クラスに型を変更しても、 Area2D の型で作成したスケルトンコードのスクリプトは変更されません

そこで、一時的に CharacterBody2D ノードを新規作成してスクリプトを作成して、そのスケルトンコードをもとに、トップビュー(見下ろし型)用のスクリプトに大幅に変更しました。
処理については、コメントを参照してください。
※「Top-Down Character Movement in Godot 4 | Bite-Sized Tutorials – YouTube」のコードを参考にしています。

extends CharacterBody2D
class_name Player

# 入力された方向を一時的に保持する変数です。
var direction: Vector2 = Vector2.ZERO
# 1秒間で移動する距離を設定します。インスペクタードックからも設定できます。
@export var speed: int = 200

# Called every frame. 'delta' is the elapsed time since the previous frame.
# エンジンはフレームを描画するたびに以下のメソッドを呼び出します。
func _process(delta):
	# 入力された方向を一時的に保持します。
	direction = Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down")

# 物理的な相互作用を安定させるために、可能な限り固定時間間隔(デフォルトでは毎秒60回)で呼び出されます。
# この間隔は、プロジェクト設定の Physics -> Common-> Physics Fps で変更できます。
# 参照: https://docs.godotengine.org/ja/4.x/tutorials/scripting/idle_and_physics_processing.html
func _physics_process(delta):
	# 入力された方向に、速度をかけて、移動するベクトルを設定します。
	velocity = direction * speed
	# velocity に設定されたベクトルに従って移動します。衝突すると止まります。
	move_and_slide()

テスト

タイルマップのステージのシーンを F5 や F6 キーで実行すると、障害物に設定した「海」のタイルの部分では止まるようになりました。

Godot4 タイルの物理レイヤーでポリゴンツールを追加して領域で、操作キャラが止まるようになりました

CharacterBody2D についての関連記事

CharacterBody2D クラスについては以下の記事を参照してください。

まとめ

今回は、無料・軽快な 2D / 3D 用のゲームエンジン Godot Engine 4 で、すでに作成したノードの型を別の型に変更する手順を紹介しました。
例として Area2D クラスから CharacterBody2D クラスへ変更しました。
また、 CharacterBody2D でトップビュー(見下ろし型)の移動を行うスクリプト例も紹介しました。

参照サイト 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をコピーしました