You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Unity中userRow方块设为红色仍显黄色且Debug无输出求助

问题排查与解决方案

咱们来拆解你遇到的两个核心问题:userRow方块显示黄色但Debug.Log检测不到,以及日志无输出。我从代码里发现了几个关键问题,逐个分析:

1. 视觉混淆:你看到的黄色方块可能来自row数组,而非userRow

你的代码里同时生成了两组重叠的方块:

  • row数组对应displayBlock,后续的create pattern逻辑一直在修改row里方块的颜色(设置为colors[1]黄色)
  • userRow数组对应userBlock,你只在初始化时统一设置为红色,之后没有再修改过它的颜色

如果displayBlock的渲染层级比userBlock更高(或者两个方块完全重叠),那么你看到的黄色其实是row里的方块,userRow的红色方块被彻底挡住了。这就解释了为什么Debug.Log检查userRow时找不到黄色——因为它本来就是全红的!

验证方法:

临时注释掉row数组的生成代码,或者在Hierarchy面板里禁用displayBlockParent,看看userRow的方块是不是全红的。

2. 数组反转导致的索引不匹配(即使userRow真的有黄色,也检测不到)

你在初始化完rowuserRow后调用了:

Array.Reverse(row);
Array.Reverse(userRow);

但后续遍历userRow时,仍然用原来的三维坐标转索引公式:

userRow[i * (xNum * zNum) + j * zNum + k]

反转数组后,数组的元素顺序完全颠倒了,原来的索引index对应的元素现在在totalElements - 1 - index的位置。这意味着你遍历检查的userRow元素,和你视觉上看到的位置根本不对应!即使某个位置的userRow方块是黄色,你的代码也检查不到它,自然不会输出日志。

修复方案:

方案一:调整索引计算(适配反转后的数组)

先计算总元素数:

int total = yNum * xNum * zNum;

然后在遍历userRow时,用反转后的索引:

int originalIndex = i * (xNum * zNum) + j * zNum + k;
int reversedIndex = total - 1 - originalIndex;
var targetBlock = userRow[reversedIndex];
// 然后检查targetBlock的颜色

方案二:在反转数组前完成所有坐标相关的操作

如果你反转数组只是为了修正生成顺序,那可以把反转操作移到所有颜色设置和逻辑处理之后,这样索引和坐标的对应关系就不会乱了。

3. 额外的潜在问题:材质实例共享

Unity中,如果多个对象共享同一个材质实例,修改一个对象的颜色会影响所有使用该材质的对象。不过你用Instantiate创建方块,默认会生成材质的实例(除非你勾选了Static或者手动共享材质),但还是可以确认一下:

// 确保是修改材质实例,而不是原始材质(你代码里写的是对的,但可以再确认)
userRow[...].GetComponent<Renderer>().material.color = colors[0];
// 注意是.material而不是.sharedMaterial

快速验证步骤

  1. 先确认你看到的黄色方块属于哪个数组:在Scene视图中选中黄色方块,查看它的父物体是displayBlockParent还是userBlockParent
  2. 如果是displayBlockParent(即row数组),那说明你混淆了两组方块的作用,调整逻辑即可;如果是userBlockParent,那用方案一的索引修正方式,重新检查颜色。

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

火山引擎 最新活动