3.1.2 编辑器下节点会在一些操作之后混淆成同一个?

一个非常迷惑的bug
首先我想做的,不用说很明显是贪吃蛇(这是bug状态的截图):


在这里我加入了一个通过编辑器创建节点来预览的功能:
setlength里面就是循环实例化prefab然后添加子节点

使用这个功能的时候发现snake节点prefab状态下很容易出bug就不说了,我这里已经在解除了关联以减少bug,
但!!!非常迷惑的是在第一次点击之后编辑器可以很成功地添加节点,但是在后续修改某些节点属性/切换场景等操作后,及其迷惑的bug发生了: 所有body节点变成了一个!!!并且无法正常进行删除操作,只能删掉snake节点重新建立
虽然说这只是编辑器内使用的功能,是完全有办法回避的,但就是很不爽一个方便的操作变成鸡肋,改着改着数据丢了又得重设置一遍 :fearful:
是否有理由怀疑这个bug和其他帖子内看到,以及日常使用中偶发的节点错乱bug,是有联系的? :thinking:

发现一点端倪:在从游戏预览切回编辑器时会发生这个问题,但是不保存完全不影响游戏预览,是编辑器在刷新时出问题了吗?

你好,脚本修改后保存,脚本会重载,此时如果 setLength 函数是自执行的话,可能导致了上述问题。

加了log也并没有发现有自动执行的问题,而且这个脚本如果不修改数据是不加节点的,应该不是这个问题吧

这里能发现虽然似乎节点变成一个,但是脚本获取sibling还是不同的

instantiate 后的 n 具有相同的 uuid,可以把 第一个 n 存起来作为模板,在 while 中再使用 一次 let n2 = instantiate(n)

检查了uuid确实如此

是我草率了大佬,这个问题的本质在于嵌套的预制体,父级的预制体实例一旦解除关联,子预制体实例就会被当作同一个节点了 :sweat: 不知道这个算是bug还是设计如此,有点坑

预制体资源的实例化( json 数据的反序列化)会保持数据中的 uuid 不变,类似于加载一个场景,场景中的节点 uuid 和 xxx.scene 文件中的数据一致。通过引擎接口对现有节点对象进行复制,就会切换它们的 uuid

该主题在最后一个回复创建后14天后自动关闭。不再允许新的回复。