👏
[Godot] 衝突している点の座標を得る方法
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以上)にしてください。
Discussion