動く床
課題
2Dプラットフォーマーゲームには動く床が必要です。
解決策
この問題には複数のアプローチ方法があります。ここではプラットフォーム部分に AnimatableBody2D を使用し、Tween で移動させる手法を採用します。これにより、多様な動作パターンを実現しながら、必要なコード量を最小限に抑えることができます。
この移動プラットフォームの実装方法は、Tweenではなく AnimationPlayer を使用することでもできます。基本的なセットアップ手順は同様ですが、代わりにTweenコードの代わりにボディの position プロパティをアニメーション化します。
セットアップ方法
まずはプラットフォームキャラクターレシピを使用して、基本的なプラットフォーマーのセットアップから始めてください。このレシピで定義されている基本移動機能は、指定されたプラットフォームと問題なく連携します。もしレシピをカスタマイズしていたり、独自の実装を使用している場合でも、動作原理は同じですのでご安心ください。
プラットフォームの作成
プラットフォームシーンには以下のノードが含まれています。
Node2D(“MovingPlatform”):このNode2Dの親ノードは、プラットフォームの「アンカー」または開始点として機能します。アニメーションでは、この親ノードを基準としてプラットフォームの座標を制御します。AnimatableBody2D:これは実際に移動するプラットフォーム本体を表します。このノードが移動対象となります。Sprite2D:ここではスプライトシート、個別の画像、あるいは ノードとしてタイルマップを使用することもできます。CollisionShape2D:ヒットボックスの大きさが大きすぎると、プレイヤーがプラットフォームの端から「浮いて」見える原因になるので注意してください。
Sprite2Dのテクスチャと衝突形状を適切に設定してください。AnimatableBody2Dでは、Sync to Physics(物理演算と同期) プロパティを「オン」に設定します。コードでボディを動かしているため、これにより物理演算ステップ時に正しく移動され、プレイヤーや他の物理オブジェクトと連動した動きを維持できます。
次にルートノードのNode2Dにスクリプトを追加してください。
extends Node2D
@export var offset = Vector2(0, -320)
@export var duration = 5.0
func _ready():
start_tween()
func start_tween():
var tween = get_tree().create_tween().set_process_mode(Tween.TWEEN_PROCESS_PHYSICS)
tween.set_loops().set_parallel(false)
tween.tween_property($AnimatableBody2d, "position", offset, duration / 2)
tween.tween_property($AnimatableBody2d, "position", Vector2.ZERO, duration / 2)
以下の機能をスムーズに動作させるために、Twien のオプションを活用しています。
set_process_mode():物理演算処理段階でのみ移動が行われるようにします。set_loops():Tween再生を繰り返す設定です。set_parallel(false):デフォルトでは、すべてのtween_property()変更が同時に実行されます。これを無効にすると、2つの動作が順次行われます。オフセットの一方端に移動した後、開始位置に戻るという流れになります。
翻訳された2つのプロパティを使用することで、プラットフォームの移動を調整できます。offsetを設定してTweenが開始点から相対的に移動する位置を指定し、durationを設定してサイクルを完了するまでの時間を決定します。
自分のレベル/ワールドにプラットフォームを追加し、実際に試してみてください。
プロジェクトのダウンロード
プロジェクトコードはこちらからダウンロードできます。 https://github.com/godotrecipes/2d_moving_platforms
関連レシピ
近日公開予定
–>