Unity弹幕游戏开发:如何实现玩家死亡时得分计时器停止计数
代码问题梳理
- 触发判断逻辑错误:
OnTriggerEnter2D中的代码块括号位置错误,Destroy(gameObject)是碰撞到玩家后的唯一执行逻辑,后续设置isFinished = false的代码不在if判断内,不管碰撞到任何对象都会执行,且销毁当前脚本挂载的物体后,计分手动就直接停止运行,根本不会触发停止计数的逻辑。 - 初始得分不符合需求:你要求得分从1开始计数,但
Start方法中scoreAmount初始值设为了0f。 - 无效冗余代码:
Update方法中isFinished = true的赋值完全冗余,不会改变原有状态。 - 脚本挂载逻辑错误:该计分脚本应该挂载在全局常驻的UI管理类物体上,不能挂载在玩家、敌人这类会被销毁的物体上,否则物体销毁后脚本直接停止运行。
修正后代码
using UnityEngine; using UnityEngine.UI; public class ScorePerSecond : MonoBehaviour { public Text scoreText; public float scoreAmount; public float pointIncreasedPerSecond; private string ENEMY_TAG = "Enemy"; private string FOLLOWENEMY_TAG = "Followenemy"; // 标记是否正在计分,命名更清晰避免逻辑混淆 private bool isScoring = false; // Start is called before the first frame update void Start() { // 游戏启动就开始计分 isScoring = true; // 按需求从1开始计分 scoreAmount = 1f; pointIncreasedPerSecond = 5f; } // Update is called once per frame void Update() { if (isScoring) { scoreText.text = "Survived time " + (int)scoreAmount; scoreAmount += pointIncreasedPerSecond * Time.deltaTime; } } // 玩家碰撞到敌人时调用该方法停止计分 public void StopScoring() { isScoring = false; } }
使用说明
你可以在玩家的死亡逻辑里调用这个脚本的StopScoring()方法,就能实现死亡时立刻停止计数的效果。如果需要在该脚本内直接处理碰撞逻辑,可以自行放开注释中的OnTriggerEnter2D方法,调整碰撞判断条件适配你的项目层级即可。
内容的提问来源于stack exchange,提问作者Invinsiblee
相关产品推荐
相关产品推荐

