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

在Unity中实现3D GameObject点击积分收集系统的问题咨询

Unity 点击GameObject积分系统实现方案

核心实现逻辑

通过单例模式创建全局唯一的积分管理器,所有可点击对象触发点击事件时统一调用管理器的加分接口,同时自动同步UI显示,不需要绑定任何按钮事件。


步骤1:创建全局积分管理脚本

新建名为ScoreManager的C#脚本,挂载到场景中永久存在的空对象(比如命名为GameManager的空物体)上,代码如下:

using UnityEngine;
using UnityEngine.UI;

public class ScoreManager : MonoBehaviour
{
    // 全局单例实例,所有脚本都可以直接访问
    public static ScoreManager Instance;
    // 存储当前玩家积分
    private int currentScore = 0;
    // 提前绑定UI界面上用于显示积分的Text组件
    public Text scoreDisplayText;

    private void Awake()
    {
        // 单例初始化,保证全局只有一个积分管理器
        if (Instance == null)
        {
            Instance = this;
        }
        else
        {
            Destroy(gameObject);
        }
    }

    // 对外提供的加分方法,可自定义加分数值
    public void AddScore(int addCount)
    {
        currentScore += addCount;
        // 自动更新UI显示
        scoreDisplayText.text = $"积分:{currentScore}";
    }
}

配置提示:脚本挂载完成后,把场景UI里你准备用来显示积分的Text组件拖入scoreDisplayText参数栏即可。
如果你用的是TextMeshPro组件,把代码里的Text类型替换为TMP_Text,同时引入using TMPro;命名空间即可。


步骤2:修改可点击对象的绑定脚本

在你已经写了销毁逻辑的对象脚本里,点击触发时先调用积分管理器的加分接口,再执行销毁逻辑即可,示例代码:

using UnityEngine;

public class ClickCollectible : MonoBehaviour
{
    // 点击触发方法(3D/2D对象通用)
    private void OnMouseDown()
    {
        // 加1分
        ScoreManager.Instance.AddScore(1);
        // 你已有的销毁逻辑
        Destroy(gameObject);
    }
}

必看注意事项

  • 所有可点击的GameObject必须挂载对应维度的碰撞器:3D对象挂载任意3D Collider,2D对象挂载任意2D Collider,否则OnMouseDown不会触发
  • 不需要给对象绑定任何UI按钮组件,只要挂了碰撞器和上面的点击脚本就可以正常触发逻辑
  • 如果运行时积分没有更新,先检查ScoreManager的scoreDisplayText是否已经绑定了对应的UI组件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 17:06:04