Area2D チュートリアル
Area2D
は、2Dゲームにおいて衝突判定やエリア内のイベント処理を実装するために使用される便利なノードです。このチュートリアルでは、Area2D
の基本的な使い方と設定方法について説明します。
1. Area2Dの基礎
Area2D
は以下の目的で使用されます:- オブジェクト間の当たり判定。
- エリアにプレイヤーや敵が侵入したことを検知。
- 特定の範囲でイベントを発生させる。
2. 基本的なArea2Dのセットアップ
- 新しいシーンを作成:
Area2D
をシーンのルートノードとして設定します。
- 子ノードを追加:
CollisionShape2D
: 衝突範囲を定義するために使用します。
Sprite2D
: 表示用のグラフィックを設定します(任意)。
- CollisionShape2Dの設定:
CollisionShape2D
を選択し、Shape
プロパティにCircleShape2D
やRectangleShape2D
などの形状を設定します。
- 衝突範囲を調整してエリアの大きさを指定します。
3. 衝突を検知するスクリプトの追加
Area2Dには、以下の信号が用意されています:
body_entered
: 他の物理ボディがエリアに入ったときに発火。
body_exited
: 他の物理ボディがエリアから出たときに発火。
以下のスクリプトをArea2Dに追加して、衝突を検知します。
Example.gd
extends Area2D
# プレイヤーがエリアに入ったことを検知func _on_area_body_entered(body): if body.name == "Player": print("Player entered the area!") # 任意の処理を追加(例: ゲームオーバー、得点追加など)
- 信号を接続する:
body_entered
を右クリックし、スクリプトに接続します。
- 上記のようなコードを追加します。
4. 移動するエリアの例
エリアを動かしたい場合、以下のようにスクリプトで制御できます。
MovingArea.gd
extends Area2D
@export var move_speed: Vector2 = Vector2(100, 0)
func _process(delta): position += move_speed * delta # 画面外に出た場合、反対側に移動 if position.x > 800: position.x = 0
5. エリア内でのイベント発生
特定の範囲に入ったとき、アニメーションやエフェクトを発生させる例を以下に示します。
Example.gd
extends Area2D
# パーティクルシステムの参照@onready var particles = $Particles2D
func _on_area_body_entered(body): if body.name == "Player": print("Triggering effect!") particles.emitting = true
Particles2D
を子ノードとして追加し、エフェクトを設定します。