Godot 4 3D GDScript:如何获取碰撞对象及检测碰撞状态
碰撞检测与对象名称获取实现方案
核心前提准备
- 确保玩家对象和目标对象都添加了碰撞体组件(如Unity的Collider、Godot的Area2D/CollisionShape2D),根据需求选择:要无阻挡触发就开触发器,要物理阻挡就用普通碰撞
- 确认目标对象与玩家的图层在碰撞矩阵中设置为可检测,避免图层屏蔽导致检测失效
分引擎实现示例
Unity(C#)
在目标对象上挂载以下脚本,监听碰撞/触发事件:
using UnityEngine; public class TriggerVariableChanger : MonoBehaviour { public int targetVariable = 0; // 触发器进入(无物理阻挡) private void OnTriggerEnter(Collider other) { string colliderName = other.gameObject.name; if (colliderName == "Player") { targetVariable += 1; Debug.Log($"触发对象:{colliderName},当前变量值:{targetVariable}"); } } // 普通碰撞进入(有物理阻挡) private void OnCollisionEnter(Collision collision) { string colliderName = collision.gameObject.name; if (colliderName == "Player") { targetVariable += 1; Debug.Log($"碰撞对象:{colliderName},当前变量值:{targetVariable}"); } } }
- 触发器模式需勾选碰撞体的
Is Trigger;普通碰撞模式需至少一方带Rigidbody(静态对象可勾Kinematic)
Godot(GDScript)
给目标对象添加Area2D+CollisionShape2D,挂载脚本:
extends Area2D var target_variable = 0 func _on_body_entered(body): var collider_name = body.name if collider_name == "Player": target_variable += 1 print("触发对象:%s,当前变量值:%d" % [collider_name, target_variable]) # 需在编辑器中手动连接Area2D的body_entered信号到该函数
- 若要物理碰撞而非触发,改用
CollisionObject2D节点,监听body_collision_entered信号
Phaser 3(JavaScript)
在场景中设置碰撞检测逻辑:
class GameScene extends Phaser.Scene { constructor() { super('GameScene'); this.targetVariable = 0; } create() { this.player = this.physics.add.sprite(100, 100, 'player'); this.targetObj = this.physics.add.sprite(300, 300, 'target'); // 碰撞检测(带物理阻挡) this.physics.add.collider(this.player, this.targetObj, this.onCollide, null, this); // 或重叠检测(类似触发器): // this.physics.add.overlap(this.player, this.targetObj, this.onCollide, null, this); } onCollide(player, target) { let colliderName = target.name; this.targetVariable += 1; console.log(`碰撞对象:${colliderName},当前变量值:${this.targetVariable}`); // 如需单次触发,可移除碰撞检测: // this.physics.world.removeCollider(player.body.colliders[0]); } }
实用注意事项
- 优先用**标签(Tag)**替代名称判断,复制对象会自动给名称加后缀(如
Target(1)),标签更稳定 - 变量建议存在全局管理类或玩家对象中,避免每个目标单独维护
- 开启引擎的碰撞调试视图(如Unity Gizmos、Godot可见碰撞形状),确认碰撞体范围正确
内容的提问来源于stack exchange,提问作者Terminator
相关产品推荐
相关产品推荐

