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

Unity中OnTriggerEnter2D触发后coins仅单次增加的问题求助

Unity中OnTriggerEnter2D仅触发一次coins不累计的问题解决

你的问题核心是coins是Bullet脚本的实例变量,每一颗子弹对象都有独立的coins值:第一次碰撞时,当前子弹的coins从0变为5;后续碰撞的是新的子弹实例,它们的coins初始值为0,加5后仍显示5,导致你看到数值一直没变化。另外如果子弹碰撞后未销毁,可能和飞机持续处于触发状态,但OnTriggerEnter2D仅在首次进入触发区域时执行一次,不会重复触发。

下面是具体的解决方法:

方案1:用全局变量统一管理coins

创建一个全局的GameManager类来存储金币数据,确保所有碰撞操作都累加同一个变量:

using UnityEngine;

public class GameManager : MonoBehaviour
{
    public static GameManager Instance;
    public int totalCoins;

    void Awake()
    {
        if (Instance == null)
            Instance = this;
        else
            Destroy(gameObject);
    }
}

修改Bullet脚本,调用全局金币变量:

using UnityEngine;

public class Bullet : MonoBehaviour
{
    public Rigidbody2D rb;

    void Update()
    {
        rb.velocity = new Vector2(0f, 8f);
    }

    private void OnTriggerEnter2D(Collider2D other)
    {
        if (other.CompareTag("Plane"))
        {
            GameManager.Instance.totalCoins += 5;
            // 碰撞后销毁子弹,避免残留对象或重复触发
            Destroy(gameObject);
        }
    }
}

额外检查项

  • 确保飞机和子弹的Collider2D都勾选了Is Trigger
  • 至少其中一个对象挂载了非静态的Rigidbody2D组件(若设为Kinematic,需确保运动逻辑正常)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 02:22:12