無料・軽快な 2D / 3D 用のゲームエンジン Godot Engine 4 で、AnimatableBody2D ノードなどを使って「動く地形」を作成する例を紹介します。
パート3では、実行時に左右に移動する move アニメーションに切り替えるスクリプトと、その後、当たり判定の処理を加えて「動く地形」にのったり、押されたりできるようにする実装例を紹介します。
※ GodotEngine 4.3 を使用しています。.NET 版ではありません。
※紹介するスクリプトは自己責任でお使いください。
前回の記事
前回のパート2では、「動く地形」のトップノードの position プロパティの0秒、3秒、6秒地点にキーを挿入して時間ごとの場所を記録させて、左右に移動させるアニメーションと、ループの設定をしました。
アニメーションを開始させるスクリプトの作成
AnimationPlayer の Current Animation プロパティには、実行するアニメーションを指定します。
今回は、前回作った move アニメーションを指定するのですが、最初は STOP アニメーションというアニメーションが選択されているので、スクリプトでシーン開始直後に move アニメーションに切り替えます。
「動く地形」トップノードの MovingTerrain ノードをシーンドックで選択して、その右上の+のついた「選択したノードに新規または既存のスクリプトをアタッチする」ボタンを押して、新規のスクリプトを作成してノードに割り当てます。
スクリプトの名前はデフォルトでは、ノードの名前をスネークケース(ノード名が AbcDef なら abc_def) になるので、特に問題がなければ GD スクリプトであることを確認して「作成」ボタンを押します。
ウィンドウ上部の Script ワークスペースを選択した状態で、作成した moving_terrain.gd スクリプトを左側のリストから選択して、 _ready イベント関数に処理を追加します。
$AnimationPlayer.play(“move”) によって、 AnimationPlayer ノードの move アニメーションを再生させます。
※ AnimationPlayer ノードの名前を変更した場合は $ のあとの名前も同じく変更してください。
extends AnimatableBody2D
class_name MovingTerrain
# Called when the node enters the scene tree for the first time.
func _ready():
$AnimationPlayer.play("move") # 位置を変化(移動)させるアニメーションを開始。
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta):
pass
ステージのシーンを開いて F6 キーを押して、現在開いているシーンを再生すると、「動く地形」が move アニメーションで設定した通りの位置に移動を繰り返しました。
しかし、まだ、当たり判定がないので、キャラクターがのることはできません。
当たり判定領域を設定してキャラクターがのれるようにする
CollisionPolygon2D 子ノードに、パート1で Polygon2D に設定したポリゴンの情報をコピーして、当たり判定領域を設定する処理を moving_terrain.gd スクリプトに以下のように追加します。
これは、シーンに配置された直後に1回だけ行います。
extends AnimatableBody2D
class_name MovingTerrain
# Called when the node enters the scene tree for the first time.
func _ready():
update_colission_polygon_2d() # 当たり判定の設定。
$AnimationPlayer.play("move") # 位置を変化(移動)させるアニメーションを開始。
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta):
pass
# Polygon2D のポリゴン情報などを CollisionPolygon2D にコピーします。
func update_colission_polygon_2d() -> void:
# 形を設定した Polygon2D ノードの polygon の情報を 当たり判定の領域として設定します。
$CollisionPolygon2D.polygon = $Polygon2D.polygon
$CollisionPolygon2D.position = $Polygon2D.position
$CollisionPolygon2D.scale = $Polygon2D.scale
$CollisionPolygon2D.rotation = $Polygon2D.rotation
_ready イベント関数で、一番下に定義している update_collision_polygon_2d 関数を呼び出して、ポリゴンの情報を当たり判定用にコピーしています。
また、Polygon2D ノードの位置や角度、拡大率も CollisionPolygon2D にコピーして、見た目と当たり判定がずれないようにします。
このコピーの処理については、以下の記事を参照してください。
テスト
ステージのシーンを選択して F6 キーで実行します。
キャラクターを ← → キーで左右移動、スペースキーでジャンプして、「動く地形」に接触すると上からのったり、横にいると押されたりするようになりました。
※ GIF 変換の際に、動く地形の一部に縞模様ができていますが、実際は表示されません。
まとめ
今回は、無料・軽快な 2D / 3D 用のゲームエンジン Godot Engine 4 で、AnimatableBody2D ノードなどを使って「動く地形」を作成する例を紹介するパート3として、実行時に左右に移動する move アニメーションに切り替えるスクリプトと、その後、当たり判定の処理を加えて「動く地形」にのったり、押されたりできるようにする実装例を紹介しました。
参照サイト Thank You!
- Godot Engine – Free and open source 2D and 3D game engine
- Godot 4 Moving Platforms – YouTube
- AnimatableBody2D — Godot Engine (4.x)の日本語のドキュメント
- Polygon2D — Godot Engine (4.x)の日本語のドキュメント
- CollisionPolygon2D — Godot Engine (4.x)の日本語のドキュメント
- AnimationPlayer — Godot Engine (4.x)の日本語のドキュメント
- Using CharacterBody2D/3D — Godot Engine (4.x)の日本語のドキュメント
- CharacterBody2D — Godot Engine (4.x)の日本語のドキュメント
- Sprite2D — Godot Engine (4.x)の日本語のドキュメント
- CollisionShape2D — Godot Engine (4.x)の日本語のドキュメント
記事一覧 → Compota-Soft-Press
コメント