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

Unity OnCollisionEnter2D中变量仅自增一次、Destroy运行正常问题求助

问题原因

最核心的问题是你当前声明的res是实例成员变量:

  • 这个脚本挂载在每一个会和敌人碰撞的对象(比如子弹、玩家碰撞判定体等)上,每个对象实例都会持有独立的res副本,初始值默认为0
  • 碰撞触发后你调用了Destroy(gameObject)直接销毁了当前对象,当前实例的res副本也会跟着被销毁。下一次触发碰撞的是新的同类型对象,它持有的res还是初始0,自增后只显示1,看起来就像只递增了一次。

修复方案

你可以任选以下一种方式解决:

  1. 把res改为静态成员变量,所有同类型脚本实例共用同一个值:
// 变量声明处加static修饰
public static int res;

注意:静态变量的值不会随场景切换自动重置,重新开始游戏时需要手动给res赋值为0,否则会保留上一次游戏的累计值。

  1. 把计数变量存到全局单例管理类中,避免和单次碰撞的实例生命周期绑定:
// 假设你有全局管理类GameManager的单例
private void OnCollisionEnter2D(Collision2D collision)
{
    if(collision.gameObject.CompareTag("enemy") )
    {
        GameManager.Instance.res++;
        Destroy(gameObject); 
        Debug.Log(GameManager.Instance.res);
    }
}

其他排查方向

如果调整变量后依然有问题,可以检查两项配置:

  • 敌人对象是否在单次碰撞后就被销毁,不会触发后续碰撞
  • 当前对象的Rigidbody2D是否开启了碰撞后休眠的相关配置

内容的提问来源于stack exchange,提问作者maxel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 08:27:03