在 3.8.5,对 Node.setPosition/Rotation/WorldPosition 等一些接口(没有包括所有接口)的行为有些修改。
之前的逻辑是,不管传进来的值是否和当前值相等,无脑设置,包括触发后续的回调等操作。新的接口会判断传进来的值是否相等,如果相等,那么直接返回。
对于之前在引擎外部修改 Node.getXXX 返回的 readonly 属性,然后再调用引擎设置接口,这种情况会有问题。比如:
// 这里直接缓存 node.getWorldPosition() 的值
let worldPosition = node.getWorldPosition();
worldPosition.x = 10;
// 这里会直接返回,因为 worldPosition 指向的就是 node 的 world position
node.setWorldPosition(worldPosition);
正确的做法应该是
// 克隆出来在游戏代码自己用
let worldPosition = node.getWorldPosition().clone();
worldPosition.x = 10;
node.setWorldPosition(worldPosition);