[3.8.4 升级必读]:Node 的一些 set 接口行为的修正

判断值的话,还可以省点new的内存 :upside_down_face:

1赞

做的就是值判断呀。 但由于你是同一个引用, 值判断的时候自然就是相等的呀。

1赞

做的就是值判断啊, 左右两边都是同一对象判断值,自然就是相等呀。

1赞

说的是Equals判断,判断每个字段是不是相等 而不是判断是不是同一个对象。

1赞

嗯。是的。

1赞

点个赞

引擎这个操作 虽然 逻辑上说得通, 但多少是反直觉的。不是好设计

1赞

worldPosition能改成getter么,直接返回clone的对象,反正都不能修改,返回原对象也没用

1赞

同一个对象 x值被修改了 再设置一次会生效吗 我看上面说的不会生效啊 你这个叫值的判断吗看上面的说明明显是比对是不是同一个对象 而不是判断xyz是否相等

1赞

直接返回 clone 对象性能很差,不建议。

1赞

不会生效!
判断代码是:对比两个对象的 x,y,z 的值是否相等。
但你想想,如果左右两边是同一个对象,那这个值是100%相等呀。

1赞

问题是你不生效的话 问题是我的值都修改了啊 我的位置信息其实已经修改了 但是你说我是同一个对象你就不给我去设置这个位置合理吗?你见过那个引擎会这样干的?

1赞

那我update里面有一百个对象 每帧都要new 100个v3出来这些不是开销吗 之前都不需要的 假如里面有500个对象呢 那我不是得卡死

1赞

readonly你还要在外面改是不是很怪,其次你外面new一个复用不是很好为什么要搞500个

1赞

就是为了避免每帧new啊。 clone 就是 new。 所以,才把这个是否需要clone,交给外部处理。 你说的这种情况, 500个对象, new 一个,复用就行。

1赞

为何不加一个标记呢,这样就在set的时候处理就能解决这个set的相同引用的问题

1赞

算了 再怎么说都没用!不知道你们是不是都比别的引擎设计的人要聪明,你们多拿引擎来开发下游戏啊

1赞

this.node.worldPosition = worldPos; 走的是 setter,不是地址引用。相当于:
this.node.setWorldPosition(worldPos);

1赞

如果项目想保持原来的错误逻辑,那么可以在第一个场景的添加如下脚本组件(组件名字随便取的,可以根据需要修改)。NodeOverride.ts.zip (1.8 KB)。

其实就是覆盖 Node 的一些方法和属性的覆盖,可以根据需要自己覆盖更多的方法。

2赞

主要是旧项目这些逻辑问题很难排查

1赞

论坛里面已经很多人因为这个位置的改动 发帖了你们还硬着改动 不能搞个新接口用新的逻辑 老的接口还按老的方法去执行吗 非要一刀砍。假如玩家觉得你新接口效果好自然会改用新接口

1赞