GDScriptの使い方をChatGPTに聞く

衝突判定

<< 戻る

あなた:
GDScript2でCharacterBody2Dを使ったCollisionを実装している時、今接触しているほかのCollisionをスクリプトで取得する方法は
ChatGPT:

GDScript 2.0(Godot 4.x)で CharacterBody2D を使っている場合、「現在接触している他のコリジョン(Collision)」を取得するには、get_slide_collision()get_last_slide_collision()get_slide_collision_count() を使います。

基本的な例:

gdscript
extends CharacterBody2D func _physics_process(delta): var velocity = Vector2.ZERO # 移動ベクトルを計算(例として右方向に移動) velocity.x = 100 # move_and_slideで移動 velocity = move_and_slide(velocity) # 衝突した数を取得 var collision_count = get_slide_collision_count() for i in range(collision_count): var collision = get_slide_collision(i) if collision: print("衝突相手: ", collision.get_collider())

ポイント:

  • move_and_slide() を使った後でないと get_slide_collision() は意味を持ちません。

  • get_slide_collision(i)KinematicCollision2D オブジェクトを返します。

  • その中の get_collider() で実際にぶつかったオブジェクト(NodeCollisionObject2D)を取得できます。

衝突しているすべてのオブジェクトを取得する:

gdscript
for i in get_slide_collision_count(): var collision = get_slide_collision(i) var other = collision.get_collider() print("今接触している: ", other.name)

必要であれば、そのオブジェクトが特定のグループに入っているかどうかチェックすることもできます:

gdscript
if other.is_in_group("enemies"): print("敵に当たった!")

他にも気になることがあれば、細かく教えてください。タイルとの当たり判定とか、複数同時の接触とか、いろいろあるので!

今のところ、この会話は役に立ちましたか?