m0_72595733 2024-06-17 17:35 采纳率: 84.6%
浏览 16
已结题

Unity中记分问题

在做Unity小游戏时,出现了记分问题,感觉代码也没有错,但是运行出来不能记分,不知道是那出现了问题

img

img

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-06-17 17:35
    关注

    引自免费微信小程序:皆我百晓生

    从你提供的代码片段来看,有几个关键点需要注意,以解决Unity中的记分问题。首先,我们来看一下代码中可能存在的问题:

    1. scoreText的初始化:在Start()方法中,你试图获取一个名为"Canvas/Text"的游戏对象上的Text组件。如果这个对象在场景中不存在,或者路径不正确,将会导致NullReferenceException异常。

    2. OnGUI方法的使用OnGUI方法在Unity 5之后已经过时,推荐使用CanvasUI系统来处理界面元素。

    3. 触发器计分逻辑:在OnTriggerEnter2D方法中,你尝试增加score,但是没有实际改变score变量的值(缺少=号)。

    接下来,我将提供一段修改后的代码,用于解决上述问题:

    using UnityEngine;
    using UnityEngine.UI;
    
    public class Score : MonoBehaviour
    {
        public static int score = 0;
        public Text scoreText;
    
        private bool chufa = false;
    
        // Start is called before the first frame update
        void Start()
        {
            scoreText = GameObject.Find("Canvas/Text").GetComponent<Text>();
            if(scoreText == null)
            {
                Debug.LogError("Score Text not found!");
            }
            else
            {
                UpdateScoreText();
            }
        }
    
        // Update is called once per frame
        void Update()
        {
            UpdateScoreText();
        }
    
        private void OnTriggerEnter2D(Collider2D collision)
        {
            if (!chufa)
            {
                score++;
                chufa = true;
            }
        }
    
        private void UpdateScoreText()
        {
            if (scoreText != null)
            {
                scoreText.text = "Score: " + score.ToString();
            }
        }
    }
    

    这段代码做了以下几点改进:

    • Start()方法中,添加了对scoreText是否为null的检查,如果未找到,将在控制台输出错误信息。
    • OnGUI方法替换为Update()方法中的UpdateScoreText()调用,使用Text组件更新分数显示。
    • OnTriggerEnter2D方法中,正确地增加了score变量,并设置chufa标志为true,防止重复计分。
    • 添加了UpdateScoreText()方法,专门负责更新分数文本。

    请确保在你的Unity场景中有一个带有Text组件的Canvas对象,其名称和层次结构与代码中指定的一致。此外,记得将此脚本附加到游戏中的适当GameObject上。如果还有其他问题,可以进一步检查你的项目设置和场景配置。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 6月25日
  • 已采纳回答 6月17日
  • 修改了问题 6月17日
  • 创建了问题 6月17日