Godotでの衝突検知の方法


  1. 衝突検知の基本: Godotでは、オブジェクト同士の衝突を検知するために、CollisionShapeまたはArea2Dコンポーネントを使用します。まず、衝突を検知したいオブジェクトにCollisionShapeまたはArea2Dコンポーネントを追加します。その後、以下の手順に従って衝突を検知するコードを書きます。
extends CollisionShape2D
func _ready():
    # 衝突を検知するオブジェクトとの信号を接続
    connect("body_entered", self, "_on_ObjectEntered")
func _on_ObjectEntered(body):
    # 衝突したオブジェクトに対する処理を記述
    print("衝突したオブジェクト:", body)
    # ここに処理を追加
  1. 衝突グループとレイヤー: Godotでは、衝突を検知するオブジェクトをグループやレイヤーに分類することができます。これにより、特定のグループやレイヤーのオブジェクトとの衝突のみを検知することができます。以下は、衝突グループとレイヤーを使用したコード例です。
extends CollisionShape2D
func _ready():
    # 衝突グループを設定
    set_collision_layer_bit(1, true)  # 衝突レイヤー1を有効化
    set_collision_mask_bit(2, true)   # 衝突レイヤー2との衝突を検知
    # 衝突を検知するオブジェクトとの信号を接続
    connect("body_entered", self, "_on_ObjectEntered")
func _on_ObjectEntered(body):
    # 衝突したオブジェクトに対する処理を記述
    print("衝突したオブジェクト:", body)
    # ここに処理を追加
  1. 衝突の種類の判別: 衝突イベントが発生した場合、衝突したオブジェクトの種類を判別することもできます。以下は、衝突したオブジェクトが特定の種類であるかを判別するコード例です。
extends Area2D
func _ready():
    # 衝突を検知するオブジェクトとの信号を接続
    connect("body_entered", self, "_on_ObjectEntered")
func _on_ObjectEntered(body):
    # 衝突したオブジェクトの種類を判別
    if body is KinematicBody2D:
        print("KinematicBody2Dと衝突しました")
    elif body is RigidBody2D:
        print("RigidBody2Dと衝突しました")
    # ここに処理を追加