👏

[Godot] 衝突している点の座標を得る方法

2024/10/23に公開

RigidBody3DがほかのPhysicsBody3Dと衝突しているときに、接触している点の座標を知りたいとします。接触している点は一つだけではないので、3次元空間の座標の配列を得るには以下のようなコードを使います。

collision_points.gd
extends RigidBody3D

func _process(delta: float) -> void: 
	# Do something to collide with other PhysicsBody3Ds
func _integrate_forces(state: PhysicsDirectBodyState3D) -> void:
	var point_count:int = state.get_contact_count()
	if point_count > 0: 
		for i:int in point_count:
			print("point", str(i), ": ", state.get_contact_collider_position(i))
    # output is like below
    # point0: (0, 0, -3.19594)
    # point1: (0, 0, -3.399997)
    # point2: (0, 0, -3.419997)
    # point3: (0.174807, -0.216054, -3.399997)
    # point4: (0.174807, -0.216054, -3.419997)

!注意点!
RigidBody3Dのcontact_monitorをtrueにしてmax_contacts_reportedを0より大きい数字(上の例だと少なくとも5以上)にしてください。

Document
参考

Discussion