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

Unity(C#)销毁所有平台后加载下一关的计数问题求助

问题分析与解决方法

问题根源

你把DestroyedPlatforms放在bullet脚本里是错误的——每颗子弹都是独立的游戏对象,这个变量只属于当前子弹实例。销毁平台时只有当前子弹的DestroyedPlatforms加1,而你在Inspector里看到的是某一颗子弹的数值,其他子弹的这个变量还是0,完全没法统一统计所有平台的销毁总数。

解决方案

1. 创建全局关卡管理脚本(GameManager)

新建一个C#脚本GameManager,用单例模式实现全局访问,专门用来统计平台销毁数量和处理关卡逻辑:

using UnityEngine;
using UnityEngine.SceneManagement;

public class GameManager : MonoBehaviour
{
    // 全局唯一的单例实例
    public static GameManager Instance;

    public int totalPlatforms; // 当前关卡的总平台数,可手动在Inspector设置
    public int destroyedPlatforms; // 已销毁的平台数

    private void Awake()
    {
        // 确保单例唯一
        if (Instance == null)
        {
            Instance = this;
        }
        else
        {
            Destroy(gameObject);
            return;
        }

        // 自动获取当前场景所有带platform标签的物体数量(替代手动设置)
        totalPlatforms = GameObject.FindGameObjectsWithTag("platform").Length;
    }

    // 供外部调用的计数方法
    public void AddDestroyedPlatform()
    {
        destroyedPlatforms++;
        CheckLoadNextLevel();
    }

    // 检查是否满足下一关条件
    private void CheckLoadNextLevel()
    {
        if (destroyedPlatforms >= totalPlatforms)
        {
            // 加载下一关,需确保所有关卡已添加到Build Settings
            int currentSceneIndex = SceneManager.GetActiveScene().buildIndex;
            SceneManager.LoadScene(currentSceneIndex + 1);
            // 重置计数,避免影响下一关
            destroyedPlatforms = 0;
        }
    }
}

把这个脚本挂载到一个空物体(比如命名为GameManager)上,放到你的关卡场景中。

2. 修改bullet脚本

移除自身的DestroyedPlatforms变量,触发碰撞时调用GameManager的计数方法:

using UnityEngine;

public class bullet : MonoBehaviour
{
    public float speed = 5f;
    public Rigidbody2D rb;

    void Start()
    {
        rb.velocity = transform.up * speed;
    }

    void OnTriggerEnter2D(Collider2D other)
    {
        if (other.CompareTag("platform"))
        {
            Destroy(other.gameObject);
            // 调用全局管理器的计数方法
            GameManager.Instance.AddDestroyedPlatform();
            // 销毁当前子弹,避免继续飞行
            Destroy(gameObject);
        }
    }
}

额外注意事项

  • 确保所有平台都正确设置了platform标签,否则无法被检测到。
  • 如果场景中有动态生成的平台,需要在生成时手动调用GameManager.Instance.totalPlatforms++来更新总数。
  • 记得在Unity的Build Settings中把所有关卡场景添加进去,否则加载下一关会报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 18:12:39