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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 21:39:03