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

Unity 2D开发中GameControl脚本无法添加分数文本问题求助

Flappy Bird Unity练手项目:scoreText计分功能失效排查

问题背景

GameControl脚本中gameOverText游戏结束文本逻辑运行正常,新增的scoreText分数文本相关功能无法生效。
参考Inspector面板配置截图:
GameControl组件Inspector配置参考

现有GameControl脚本代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;

public class GameControl : MonoBehaviour
{
    public static GameControl instance;
    public GameObject gameOverText;
    public Text scoreText;
    public bool gameOver = false;
    public float scrollingSpeed = -1.5f;    

    private int score = 0;

    void Awake()
    {
        if(instance == null)
        {
            instance = this;
        }
        else if(instance != this)
        {
            Destroy(gameObject);
        }
    }

    void Update()
    {
        if(gameOver == true && Input.GetMouseButtonDown(0))
        {
            SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
        }
    }
    
    public void PlayerScored()
    {
        if (gameOver)
        {
            return;
        }
        score++;
        scoreText.text = "Score: " + score.ToString();
    }

    public void PlayerDied()
    {
        gameOverText.SetActive(true);
        gameOver = true;
    }
}

排查&修复步骤

按优先级从高到低逐一检查:

  • 优先检查Console控制台报错:如果出现NullReferenceException指向PlayerScored()方法里的scoreText行,说明Inspector面板未给scoreText字段拖拽赋值。gameOverText能正常运行是因为你已经把对应游戏对象拖到了字段槽位,public的scoreText字段同样需要你把Hierarchy中挂载分数文本的UI对象拖到GameControl组件的对应槽位,才能正常调用。
  • 检查计分触发逻辑是否正常调用:你定义的PlayerScored()方法不会自动执行,需要在管道中间的得分触发器逻辑里主动调用。给管道得分区挂载碰撞检测脚本,确认小鸟穿过触发器时能正确执行GameControl.instance.PlayerScored(),参考实现:
using UnityEngine;

public class PipeScoreTrigger : MonoBehaviour
{
    private bool isScored = false;
    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.CompareTag("Player") && !isScored)
        {
            isScored = true;
            GameControl.instance.PlayerScored();
        }
    }
}

注意要给小鸟对象设置Player标签,得分触发器勾选isTrigger选项,避免物理碰撞阻挡小鸟移动。

  • 检查文本组件类型匹配:如果你场景里的分数文本用的是TextMeshPro(TMP)组件,代码里写的UnityEngine.UI.Text类型和它不匹配,要么换成原生UGUI Text组件,要么修改代码:引入using TMPro;命名空间,把public Text scoreText;改成public TMP_Text scoreText;,再重新拖拽赋值。
  • 可选优化:在Start()生命周期里加一行初始值设置,开局就显示默认分数,避免第一次得分前文本显示异常:
void Start()
{
    scoreText.text = "Score: 0";
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 10:27:23