Unity实例化GoodCube移动异常:误改Prefab而非实例对象
问题定位与修复方案
兄弟,我一眼就揪出你代码里的核心问题了——你在处理GoodCube的时候,错误地把预制体本身塞回了队列,而不是你刚刚实例化并调整过位置的那个游戏对象!
具体错误点
看你SpawnRow方法里的这段代码:
if (i == position) { GameObject goodCube = goodCubes.Dequeue(); goodCube.transform.position = spawnPoint; spawnPoint += new Vector2(1 * rowOffset, 0); goodCubes.Enqueue(goodcube); // 这里就是错误根源! }
你从队列里取出的是之前实例化好的goodCube(场景里的实际游戏对象),修改完位置后,却把原始预制体goodcube(注意变量名大小写,你定义的预制体变量是小写开头的goodcube)塞回了队列。下次再从队列取GoodCube时,拿到的就是预制体本身,修改它的transform自然会直接改动预制体资源,而非场景里的运行实例。
修复步骤
只需要把错误的那一行改成把刚才操作的实例对象塞回队列即可:
goodCubes.Enqueue(goodCube); // 改成大写开头的goodCube,也就是你刚Dequeue出来的那个实例
额外小提示
你的脚本里有个变量名拼写错误:columus应该是columns,虽然不影响当前功能,但规范的命名能避免后续潜在的混淆问题~
内容的提问来源于stack exchange,提问作者Sixten Gons Larsson
相关产品推荐
相关产品推荐

