無料・軽快な 2D / 3D 用のゲームエンジン Godot Engine 4 で、すでに作成したノードの型を別の型に変更する手順を紹介します。
例として Area2D クラスから CharacterBody2D クラスへ変更します。
また、 CharacterBody2D でトップビュー(見下ろし型)の移動を行うスクリプト例も紹介します。
※ GodotEngine 4.3 を使用しています。.NET 版ではありません。
※スクリプトは自己責任でご使用ください。
※本記事は 2024 年 12 月 17 日の記事ですが、前回の記事との関連を考慮して、 2024 年 12 月 16 日に公開しました。
前回の記事
前回は、タイルマップに配置した障害物となるマップチップ(タイル)に当たり判定の領域を設定しました。
操作キャラのノードの型の変更
前回までは Area2D をルートノードとした操作キャラを上下左右に移動させていました。
しかし Area2D では、壁にぶつかったら止まるといった、衝突による相互作用が実装されていないので、それを簡単に実現できる CharacterBody2D クラスに変更します。
ノードの型を変更するには、シーンドックでそのノードを右クリックして表示されるメニュー「型の変更」を選択します。
「型を変更する」ダイアログで、変更後の型を選択して「変更」ボタンを押します。
※ダイアログの上部の検索ボックスを利用すると探しやすいです。
以上で、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 を選択しました。
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 キーで実行すると、障害物に設定した「海」のタイルの部分では止まるようになりました。
CharacterBody2D についての関連記事
CharacterBody2D クラスについては以下の記事を参照してください。
まとめ
今回は、無料・軽快な 2D / 3D 用のゲームエンジン Godot Engine 4 で、すでに作成したノードの型を別の型に変更する手順を紹介しました。
例として Area2D クラスから CharacterBody2D クラスへ変更しました。
また、 CharacterBody2D でトップビュー(見下ろし型)の移動を行うスクリプト例も紹介しました。
参照サイト Thank You!
- Godot Engine – Free and open source 2D and 3D game engine
- Godot 4 Moving Platforms – YouTube
- Using CharacterBody2D/3D — Godot Engine (4.x)の日本語のドキュメント
- CharacterBody2D — Godot Engine (4.x)の日本語のドキュメント
- CharacterBody2D — Godot Engine (4.x)の日本語のドキュメント #MotionMode
- 【Godot4.x】タイルマップの基本的な使い方 | 2dgames.jp
- 【Godot】コリジョンレイヤーとマスクについて | 2dgames.jp
- Top-Down Character Movement in Godot 4 | Bite-Sized Tutorials – YouTube
記事一覧 → Compota-Soft-Press
コメント