You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编程禁用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 22:42:24