如何为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
相关产品推荐
相关产品推荐

