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

Unity C#实例化对象与控制台输出不一致问题排查

问题分析与修复方案

首先看你的代码逻辑,核心问题出在同一个预制体的RawImage纹理被重复赋值了:

你在外层col循环里实例化每个预制体后,先进入内层row循环,在这个循环里你已经根据条件设置了img.texture(比如符合条件时设为RED的NewTexture[1]),并且打印了对应的日志。但内层循环结束后,你又执行了一段独立的if(sum1 == sum2)判断,再次给同一个img赋值纹理——这就会把之前在内层循环里设置的RED纹理给覆盖掉,最终导致所有预制体都显示最后一次赋值的BLUE。

举个例子:第四个预制体在内层循环里满足条件被设为RED,控制台也打印了RED的日志,但内层循环结束后,sum1 != sum2,所以代码执行了else分支,把纹理又改回了BLUE,这就造成了日志和实际显示不符的情况。

修复步骤

你需要调整代码逻辑,避免重复赋值同一个预制体的纹理。具体来说,要确认什么时候应该设置纹理,确保每个预制体只被赋值一次,或者让后续的赋值逻辑不会覆盖之前的正确设置。

方案1:移除外层的重复赋值逻辑

如果内层循环已经处理了所有预制体的纹理设置,那么外层的if(sum1 == sum2)判断就是多余的,直接删除这段代码即可:

// 删掉这段会覆盖纹理的冗余代码
/*
if(sum1 == sum2) {
    img.texture = NewTexture[1];
    p.SetActive(true);
    redcounter++;
    print("RED ARE NOW AT:" + redcounter);
} else {
    img.texture = NewTexture[0];
    p.SetActive(true);
    bluecounter++;
    print("BLUE ARE NOW AT:" + bluecounter);
}
*/

方案2:调整逻辑,让外层赋值只处理未被内层设置的情况

如果外层的判断是用来处理某些特殊场景(比如内层循环没有进入纹理设置分支的情况),那么可以加一个标记,判断内层是否已经设置过纹理,外层只处理未设置的情况:

// 在外层循环开始时添加一个标记,记录当前预制体是否已设置纹理
bool isTextureSet = false;

for(int row = 0; row < table.GetLength(1); row++){
    // ... 内层循环原有代码 ...
    if(data1 != null && data2 != null && data3 != null && data4 != null) {
        img.texture = NewTexture[1];
        p.SetActive(true);
        redcounter++;
        print("RED ARE NOW AT:" + redcounter);
        isTextureSet = true; // 标记已设置纹理
    } else {
        img.texture = NewTexture[0];
        p.SetActive(true);
        bluecounter++;
        print("BLUE ARE NOW AT:" + bluecounter);
        isTextureSet = true; // 标记已设置纹理
    }
    // ... 内层循环其他代码 ...
}

// 外层只处理未设置过纹理的情况
if(!isTextureSet){
    if(sum1 == sum2) {
        img.texture = NewTexture[1];
        p.SetActive(true);
        redcounter++;
        print("RED ARE NOW AT:" + redcounter);
    } else {
        img.texture = NewTexture[0];
        p.SetActive(true);
        bluecounter++;
        print("BLUE ARE NOW AT:" + bluecounter);
    }
}

额外调试建议

  • 可以给每个实例化的预制体添加名称标记(比如p.name = $"BigEye_Prefab_{col}"),这样在Hierarchy面板里能直观看到每个预制体对应的循环索引,方便定位问题。
  • 把sum1、sum2这类临时变量的初始化放在外层循环的开头,避免上一轮循环的残留值影响当前循环的判断逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:15:36