编程禁用2DCollider遇错误:Collision2D.enabled为只读属性无法赋值
问题解决与代码修正
错误原因
你报错的核心问题是:Collision2D是碰撞回调的参数对象,它的enabled属性是只读的,无法直接赋值。你真正需要修改的是传送门游戏对象上挂载的Collider2D组件的启用状态,而不是碰撞事件里的Collision2D实例。
另外你的当前代码逻辑和需求不符——你现在写的是碰撞到传送门时关闭它,但实际需求是收集足够数量的环后启用传送门碰撞器。
修正后的代码
public class RingPickup : MonoBehaviour { // 在编辑器中拖拽赋值传送门的Collider2D组件 public Collider2D portalCollider; // 通关需要收集的环数量 public int requiredRings = 5; // 已收集的环数量 private int collectedRings = 0; // 收集环时调用此方法(由环的拾取脚本触发) public void CollectRing() { collectedRings++; // 检查是否满足开启传送门的条件 if (collectedRings >= requiredRings) { // 启用传送门的碰撞器 portalCollider.enabled = true; } } // 初始时关闭传送门碰撞器 void Start() { portalCollider?.enabled = false; } }
配套环拾取脚本示例
在环的挂载脚本中,添加拾取触发逻辑,调用上面的收集方法:
public class Ring : MonoBehaviour { private void OnTriggerEnter2D(Collider2D other) { if (other.CompareTag("Player")) { RingPickup ringPickup = FindObjectOfType<RingPickup>(); ringPickup?.CollectRing(); Destroy(gameObject); } } }
内容的提问来源于stack exchange,提问作者Luke Jones
相关产品推荐
相关产品推荐

