Godot4 AnimatableBody2D で動く地形の作成例3/3

無料・軽快な 2D / 3D 用のゲームエンジン Godot Engine 4 で、AnimatableBody2D ノードなどを使って「動く地形」を作成する例を紹介します。

Godot4 動く地形に当たり判定を設定した後はのったり押されたりできます。

パート3では、実行時に左右に移動する move アニメーションに切り替えるスクリプトと、その後、当たり判定の処理を加えて「動く地形」にのったり押されたりできるようにする実装例を紹介します。

※ GodotEngine 4.3 を使用しています。.NET 版ではありません。
※紹介するスクリプトは自己責任でお使いください。

前回の記事

前回のパート2では、「動く地形」のトップノードの position プロパティの0秒、3秒、6秒地点にキーを挿入して時間ごとの場所を記録させて、左右に移動させるアニメーションと、ループの設定をしました。

アニメーションを開始させるスクリプトの作成

AnimationPlayer の Current Animation プロパティには、実行するアニメーションを指定します。
今回は、前回作った move アニメーションを指定するのですが、最初は STOP アニメーションというアニメーションが選択されているので、スクリプトでシーン開始直後move アニメーション切り替えます。

「動く地形」トップノードの MovingTerrain ノードをシーンドックで選択して、その右上の+のついた選択したノードに新規または既存のスクリプトをアタッチするボタンを押して、新規のスクリプトを作成してノードに割り当てます。

スクリプトの名前はデフォルトでは、ノードの名前をスネークケース(ノード名が AbcDef なら abc_def) になるので、特に問題がなければ GD スクリプトであることを確認して「作成」ボタンを押します。

Godot4 動く地形のトップノードにAnimationPlayerのアニメーションを開始時に始める処理を追加します1.

ウィンドウ上部の Script ワークスペースを選択した状態で、作成した moving_terrain.gd スクリプトを左側のリストから選択して、 _ready イベント関数に処理を追加します。

Godot4 動く地形のトップノードにAnimationPlayerのアニメーションを開始時に始める処理を追加します2.

$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 アニメーションで設定した通りの位置に移動を繰り返しました。

しかし、まだ、当たり判定がないので、キャラクターがのることはできません

Godot4 動く地形にはまだ当たり判定がありません。

当たり判定領域を設定してキャラクターがのれるようにする

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 キーで実行します。
キャラクターを ← → キーで左右移動、スペースキーでジャンプして、「動く地形」に接触すると上からのったり、横にいると押されたりするようになりました。

Godot4 動く地形に当たり判定を設定した後はのったり押されたりできます。

※ GIF 変換の際に、動く地形の一部に縞模様ができていますが、実際は表示されません。

まとめ

今回は、無料・軽快な 2D / 3D 用のゲームエンジン Godot Engine 4 で、AnimatableBody2D ノードなどを使って「動く地形」を作成する例を紹介するパート3として、実行時に左右に移動する move アニメーションに切り替えるスクリプトと、その後、当たり判定の処理を加えて「動く地形」にのったり押されたりできるようにする実装例を紹介しました。

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