0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[ GODOT 4 ] CollisionShape2Dノード

0
Posted at

Godot Engineで使用するノードに関しての備忘録です。

この記事はGeminiを活用して作成しました。

1. はじめに

Godot Engineで衝突判定(当たり判定)の形を定義するために必須のノードです
Area2DやPhysicsBody2D(CharacterBody2Dなど)の親ノードとセットで使うことで 初めて衝突判定として機能するノードです

これ自体は目に見えない「判定の枠組み」を設定する役割を持っており ゲーム内のオブジェクトが「どこに当たったら反応するか」を決定するために持ちます
単体では機能しないため 必ず親ノードの警告を解消する形で追加されます

主な用途

  • プレイヤーや敵キャラクターの物理的な身体の範囲設定
  • 攻撃エフェクトや武器のヒットボックス(当たり判定)の作成
  • コインやアイテムを拾う検知エリアの形づくり
  • ステージの壁や床などの進入不可領域の定義

⚠️ 注意: CollisionShape2Dは単体では動作しません 必ずArea2DやCharacterBody2Dなどの子ノードとして配置し Shapeプロパティを設定する 必要があります

image.png


2. 代表的なプロパティ

インスペクターでよく設定する CollisionShape2Dの重要なプロパティです

プロパティ 説明
Shape 衝突判定の形状(形)を指定します(RectangleShape2DやCircleShape2Dなど)
Disabled trueにすると その衝突判定が一時的に無効化されます(デス演出時などに便利)
One Way Collision trueにすると 上からだけ乗れる床(一方通行の衝突)を作ることができます

3. 代表的な形状(Shape)

Shapeプロパティで選択できる代表的な形状の特徴です

  • RectangleShape2D(長方形)
    • ブロック、壁、プラットフォームなど四角いオブジェクトに最適で 処理負荷が最も軽いです
  • CircleShape2D(円形)
    • コイン、弾、丸いキャラクターなどに最適で どの方向からも均等に判定されます
  • CapsuleShape2D(カプセル型)
    • 二足歩行するプレイヤーや敵に最適で 段差などをスムーズに乗り越えやすくなります
  • SegmentShape2D(線分) / SeparationRayShape2D(光線)
    • 地面との接地判定や 特定の境界線を作るときに使われます

4. 使い方(CharacterBody2Dへの適用例)

ゲーム開発で最もよく使う「動くキャラクター」に当たり判定を設定する基本手順です

🛠️ 設定の全体フロー

  1. Step 1: 親ノード(CharacterBody2Dなど)にCollisionShape2Dを追加する
  2. Step 2: Shapeプロパティで形状(カプセル型など)を選択する
  3. Step 3: スプライト(見た目)に合わせてサイズを調整する

📌 Step 1: ノードの追加

  1. シーンツリーで CharacterBody2D(または Area2D)を選択します
  2. + ボタン(ノードを追加)を押し CollisionShape2D を検索して子ノードとして追加します
  3. 追加した直後はノードの横に「⚠️」マーク(形状が未設定の警告)が出ています

📌 Step 2: 形状(Shape)の指定

  1. 追加した CollisionShape2D を選択します
  2. インスペクターの一番上にある Shape プロパティの [空] をクリックします
  3. ドロップダウンから 新規 CapsuleShape2D(またはオブジェクトに合う形)を選択します
  4. これで警告マーク「⚠️」が消えます

📌 Step 3: サイズの調整

  1. 2Dビューポート上にビューアーが表示されます
  2. 形状の周りにある「赤や中空のドット(ハンドル)」をドラッグして大きさを変えられます
  3. 背景にあるSprite2D(キャラクター画像)のサイズにぴったり合うように調整します

image.png


5. 補足: スクリプトからの有効・無効化

ゲーム中に敵が倒れた瞬間や 無敵時間中に当たり判定を消したい場合のコード例です

extends CharacterBody2D

@onready var collision_shape = $CollisionShape2D

func disable_collision():
	# 衝突判定を無効化する
	collision_shape.disabled = true
	
func enable_collision():
	# 衝突判定を有効化する
	collision_shape.disabled = false

💡 ヒント:

物理演算(Physics)の処理中に disabled を直接変更すると警告が出る場合があります
その場合は set_deferred("disabled", true) を使うことで 安全に次のフレームで無効化できます

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?