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

如何为Unity 2D射击游戏设置递增的关卡通关分数要求

问题:实现关卡递增的分数通关要求

我正在学习C#和Unity,目前开发一款基础2D射击游戏。当前游戏固定需要3分即可进入下一关卡(场景),分数会重置。我希望设置为第2关需3分、第3关需5分、第4关需7分这样的递增要求,而非所有关卡都要求3分,请问该如何实现?

原代码

public class Pickups : MonoBehaviour
{
    public TMP_Text scoreText;

    private void Start()
    {
        Scoring.totalScore = 0;
        scoreText.text = "Score: " + Scoring.totalScore;
    }


    private void Update()
    {
        if(Scoring.totalScore>=3)
        {
           int currentSceneIndex = SceneManager.GetActiveScene().buildIndex;
            SceneManager.LoadScene(currentSceneIndex +1);
            Scoring.totalScore = 0; 
        }
    }


    private void OnTriggerEnter2D(Collider2D collision) 
    {
        if (collision.tag == "Gem")
        {
            Scoring.totalScore++;
            AudioManager.instance.PlaySfx(1);

            scoreText.text = "Score: " + Scoring.totalScore;
            Destroy(collision.gameObject);  
        }
    }
}

解决方案

方案一:公式计算(适合有固定规律的分数要求)

你的分数要求是第2关3分、第3关5分、第4关7分,属于奇数递增规律,对应公式:通关分数 = 2 * 当前场景索引 + 1(假设场景Build Index对应关系为:第1关=0、第2关=1、第3关=2、第4关=3),代入后完全匹配需求。如果想让第1关保持3分,加个简单判断即可。

修改后的Update方法代码:

private void Update()
{
    int currentSceneIndex = SceneManager.GetActiveScene().buildIndex;
    // 根据场景索引计算所需分数
    int requiredScore = 2 * currentSceneIndex + 1;
    // 单独指定第1关的分数要求
    if(currentSceneIndex == 0)
    {
        requiredScore = 3;
    }
    
    if(Scoring.totalScore >= requiredScore)
    {
        SceneManager.LoadScene(currentSceneIndex +1);
        Scoring.totalScore = 0; 
    }
}

方案二:数组自定义(适合无规律的分数要求)

如果后续关卡分数要求没有固定规律,用数组存储各关卡的通关分数会更灵活,可直接在Inspector面板修改对应值。

修改后的完整代码示例:

public class Pickups : MonoBehaviour
{
    public TMP_Text scoreText;
    // 索引对应场景Build Index,可在编辑器直接修改各关卡分数要求
    public int[] levelRequiredScores = new int[] {3, 3, 5, 7};

    private void Start()
    {
        Scoring.totalScore = 0;
        scoreText.text = "Score: " + Scoring.totalScore;
    }


    private void Update()
    {
        int currentSceneIndex = SceneManager.GetActiveScene().buildIndex;
        // 避免场景索引超出数组范围报错
        if(currentSceneIndex >= levelRequiredScores.Length)
        {
            return;
        }
        int requiredScore = levelRequiredScores[currentSceneIndex];
        
        if(Scoring.totalScore >= requiredScore)
        {
            SceneManager.LoadScene(currentSceneIndex +1);
            Scoring.totalScore = 0; 
        }
    }


    private void OnTriggerEnter2D(Collider2D collision) 
    {
        if (collision.tag == "Gem")
        {
            Scoring.totalScore++;
            AudioManager.instance.PlaySfx(1);

            scoreText.text = "Score: " + Scoring.totalScore;
            Destroy(collision.gameObject);  
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 23:26:04