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

Unity C#脚本i=i+1自增计数失效 多物体计数异常问题

问题根因
  • 计数变量i为实例成员,每个挂载ActionObjet的物体都会独立持有一份i的副本,修改互不影响,无法实现全局累计。
  • 收集逻辑写在Update中监听全局空格键事件,所有激活的脚本实例会在同一帧同步执行判断:只要任意一个物体的image1处于启用状态,所有挂了该脚本的物体都会同时执行计数、切换UI、播放音频的逻辑,直接导致UI状态被互相覆盖、计数重复或丢失,这是偶发仅2个物体可正常触发计数的核心原因。
  • 缺少必要约束:没有防重复收集标记、没有多UI同时弹出的拦截,且完全没有实现计数达3后显示通关界面的判断逻辑。

Unity运行场景截图

修复方案

直接替换原有脚本代码即可,原有Inspector公开字段引用全部保留,不需要重新拖拽赋值:

using UnityEngine;
using UnityEngine.UI;

public class ActionObjet : MonoBehaviour
{
    public Image image1;
    public Image image2;
    public Image image3;
    // 静态全局计数,所有脚本实例共享同一份值
    private static int collectCount = 0;
    // 静态交互锁,同一时间仅允许一个物体弹出交互UI
    private static bool isInteracting = false;
    // 单个物体收集标记,防止重复计数
    private bool isCollected = false;

    void Start()
    {
        image1.enabled = false;
        image2.enabled = false;
        // 仅首次初始化时隐藏通关界面
        if (collectCount == 0) image3.enabled = false;
    }

    void Update()
    {
        // 仅当前物体弹出了交互UI、且未被收集时,才响应空格完成收集
        if (Input.GetKeyDown(KeyCode.Space) && image1.enabled && !isCollected)
        {
            isCollected = true;
            collectCount++;
            print($"已收集物体数:{collectCount}");
            
            // 切换UI状态
            image2.enabled = true;
            image1.enabled = false;
            // 释放交互锁,允许交互下一个物体
            isInteracting = false;
            // 播放收集音效
            FindObjectOfType<AudioManager>().Play("bruit_recuperer_objet");

            // 计数达标显示通关界面
            if (collectCount >= 3)
            {
                image3.enabled = true;
            }
        }
    }

    void OnMouseDown()
    {
        // 已收集、或正在交互其他物体时不响应点击
        if (isCollected || isInteracting) return;
        
        image1.enabled = true;
        isInteracting = true;
    }
}
关键改动说明
  • 将计数变量改为static静态类型,所有实例共享计数值,解决独立计数问题
  • 新增静态交互锁,避免同时弹出多个交互UI、多实例同时触发逻辑的冲突
  • 为每个可收集物体增加收集状态标记,杜绝重复计数
  • 收窄空格事件的触发范围,仅当前激活交互UI的实例会执行收集逻辑,消除全局监听带来的逻辑混乱
  • 补全计数阈值判断,收集满3个物体自动显示通关界面
  • 将硬编码的按键字符串替换为KeyCode枚举,避免字符串拼写错误导致的按键失效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 22:51:19