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
相关产品推荐
相关产品推荐

