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

Unity C#如何实现正确的金币累加计分计数器

Unity C# 金币收集计数器修正方案

原代码核心错误

  • 计数变量写在碰撞方法内部的for循环中,属于局部临时变量,每次触发碰撞都会从0重置,无法实现多次碰撞间的数值累计
  • 无意义的for循环完全不符合业务逻辑:单次碰撞事件仅对应一个碰撞对象,循环3次会导致单次拾取金币时重复输出3次日志,属于冗余逻辑
  • 没有全局持久化的计数存储变量,收集数无法在游戏运行过程中持续累加

修正后可直接运行的代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Script : MonoBehaviour
{
    // 声明为类成员变量,在脚本整个生命周期内保留数值,初始收集数为0
    private int coinCount = 0;

    void OnCollisionEnter(Collision collision)
    { 
        // 判定碰撞对象是否为金币
        if (collision.collider.CompareTag("coin"))
        {
            // 收集数累加1
            coinCount++;
            // 销毁被收集的金币对象
            Destroy(collision.gameObject);
            // 输出当前累计收集数量
            Debug.Log("Coins collected: " + coinCount);
        }
    }
}

配置注意事项

  • 请提前在Unity编辑器中将金币预制体/场景对象的Tag设置为coin,字符串大小写完全匹配才能正常触发判定
  • Unity普通碰撞生效的前置条件:碰撞双方都挂载Collider组件,且至少一方挂载非动力学Rigidbody组件

如果你的金币碰撞体勾选了Is Trigger选项(用于实现无物理阻挡的拾取),请将碰撞回调替换为触发器版本,代码如下:

private int coinCount = 0;
void OnTriggerEnter(Collider other)
{
    if (other.CompareTag("coin"))
    {
        coinCount++;
        Destroy(other.gameObject);
        Debug.Log("Coins collected: " + coinCount);
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 18:22:21