Unity中玩家触碰游戏对象时禁用Box Collider问题咨询
Unity中玩家触碰对象时禁用Box Collider的解决方案
方法一:触发检测实现(OnTriggerEnter)
- 前置设置:把目标对象的Box Collider勾选
Is Trigger,同时玩家对象必须带有Collider和Rigidbody(Rigidbody可勾选Kinematic) - 代码示例:
using UnityEngine; public class DisableColliderOnTrigger : MonoBehaviour { private BoxCollider _boxCollider; private void Awake() { // 获取自身的BoxCollider组件 _boxCollider = GetComponent<BoxCollider>(); } private void OnTriggerEnter(Collider other) { // 按Tag判断碰撞对象是否为玩家,可根据项目需求换成Layer或组件判断 if (other.CompareTag("Player")) { // 禁用BoxCollider _boxCollider.enabled = false; // 可选:若只需触发一次,可销毁脚本避免重复检测 // Destroy(this); } } }
方法二:物理碰撞实现(OnCollisionEnter)
- 前置设置:目标对象和玩家对象都要有Collider,且至少一方带有Rigidbody(不能同时勾选Kinematic,除非是运动学对象碰撞静态对象)
- 代码示例:
using UnityEngine; public class DisableColliderOnCollision : MonoBehaviour { private BoxCollider _boxCollider; private void Awake() { _boxCollider = GetComponent<BoxCollider>(); } private void OnCollisionEnter(Collision collision) { if (collision.gameObject.CompareTag("Player")) { _boxCollider.enabled = false; } } }
关键注意点
- 提前给玩家对象设置
Player标签,或者根据项目实际标识修改判断逻辑(比如用Layer:other.gameObject.layer == LayerMask.NameToLayer("Player")) - 若需要仅触发一次,可在禁用Collider后添加开关变量或直接销毁脚本
- 检查目标对象的Box Collider初始状态是否为启用,否则逻辑不会生效
内容的提问来源于stack exchange,提问作者MrAntor
相关产品推荐
相关产品推荐

