Unity 2D:仅敌人血量归0销毁时加币,阻止场景切换触发
解决敌人销毁时仅击杀加金币的问题
方案一:添加击杀标记区分销毁原因
给敌人脚本增加一个布尔变量,标记是否是被玩家击杀导致的销毁,只有标记为真时才执行加币逻辑:
- 定义标记变量:
private bool isKilledByPlayer = false;
- 在处理敌人受伤的逻辑中(比如
TakeDamage方法),当血量归0时设置标记并销毁:
public void TakeDamage(int damage) { // 假设你有一个health变量存储敌人血量 health -= damage; if (health <= 0) { isKilledByPlayer = true; Destroy(gameObject); } }
- 修改
OnDestroy方法(注意Unity生命周期方法首字母必须大写,否则不会触发):
void OnDestroy() { if (isKilledByPlayer) { AddCoins(Coins); } }
方案二:直接在击杀时执行加币(更简洁)
不需要依赖OnDestroy,直接在敌人血量归0的瞬间调用加币方法,再销毁敌人,从根源避免场景切换时的误触发:
public void TakeDamage(int damage) { health -= damage; if (health <= 0) { AddCoins(Coins); // 击杀时立即加币 Destroy(gameObject); } }
注意:你原代码中的onDestroy是小写,Unity的生命周期方法要求驼峰式命名(OnDestroy),这个错误会导致方法无法被Unity正确调用,需要修正。
内容的提问来源于stack exchange,提问作者Vasil Kirilov
相关产品推荐
相关产品推荐

