IDmhd 2024-04-07 13:14 采纳率: 0%
浏览 24

Unty游戏得分UI数字重叠,不刷新

使用Unity做2D游戏,希望能够碰撞金币和路障时自动加分,但是现在得分显示不刷新,旧的分数依然存在,新的分数继续显示,一直叠加,试了一下按空格加分,情况也是一样,可以加分,但是旧的分数不会消失,最终叠在一起

img

下面是我的代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Shiqujinbi : MonoBehaviour
{
    int JinbiCount = 0;
    int LuzhangCount = 0;

    private void OnTriggerEnter2D(Collider2D collision)
    {
        if(collision.CompareTag("Jin bi"))
        {
            Destroy(collision.gameObject);
            JinbiCount += 1;
        }
        else if (collision.CompareTag("Lu zhang"))
        {
            Destroy(collision.gameObject);
            LuzhangCount += 1;
        }
    }


     void Update()
    {
        void Xianshi() { OnGUI(); };
    }

    public class Xianshi { void OnGUI() { } }
        void OnGUI() 
    {
        GUI.skin.label.fontSize = 50;
        GUI.Label(new Rect(20, 20, 500, 500), "金币:" + JinbiCount);
        GUI.Label(new Rect(20, 100, 500, 500), "障碍:" + LuzhangCount);

    }


}



  • 写回答

5条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-04-07 13:14
    关注

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

    好的,让我帮你解决这个问题。在Unity游戏中,分数并不会立即更新,而是会根据碰撞次数来累积分数。因此,如果你想让金币和障碍被碰触时自动加分,你需要通过添加更多的碰撞检测事件来实现。

    以下是修改后的代码:

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.UI;
    
    public class Shiqujinbi : MonoBehaviour
    {
        int JinbiCount = 0;
        int LuzhangCount = 0;
    
        private void OnTriggerEnter2D(Collider2D collision)
        {
            if(collision.CompareTag("Jin bi"))
            {
                Destroy(collision.gameObject);
                JinbiCount += 1;
            }
            else if (collision.CompareTag("Lu zhang"))
            {
                Destroy(collision.gameObject);
                LuzhangCount += 1;
            }
        }
    
        private void OnTriggerStay2D(Collider2D collision)
        {
            if(collision.CompareTag("Jin bi") || collision.CompareTag("Lu zhang"))
            {
                foreach (var item in JinbiItems)
                {
                    item碎屑效果激活;
                }
                foreach (var item in LuzhangItems)
                {
                    item碎屑效果激活;
                }
            }
        }
    
        private void OnTriggerExit2D(Collider2D collision)
        {
            if(collision.CompareTag("Jin bi") || collision.CompareTag("Lu zhang"))
            {
                foreach (var item in JinbiItems)
                {
                    item碎屑效果关闭;
                }
                foreach (var item in LuzhangItems)
                {
                    item碎屑效果关闭;
                }
            }
        }
    
        private List<Item> JinbiItems = new List<Item>();
        private List<Item> LuzhangItems = new List<Item>();
    
        void Start()
        {
            foreach (var item in typeof(Item))
            {
                JinbiItems.Add(item);
                LuzhangItems.Add(item);
            }
        }
    
        void Update()
        {
            foreach (var item in JinbiItems)
            {
                item碎屑效果激活;
            }
            foreach (var item in LuzhangItems)
            {
                item碎屑效果激活;
            }
        }
    }
    

    在这个版本中,我们创建了两个list,分别用来存储金币和障碍碎屑的效果。在每个碰撞事件触发后,我们都会检查碰撞对象是否是金币或障碍物,并将它们添加到对应的破碎效果列表中。

    注意:这个例子假设你的物品都有一个碎屑效果属性,它是一个自定义的组件类,继承自RigidbodyComponent。你需要根据你的具体需求来实现这个功能。

    另外,这段代码没有处理可能存在的问题,例如,金币和障碍物的数量是否正确等。在实际应用中,你应该在循环结束后进行一些清理工作,确保所有的碎片都被正确地清除。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月7日