在编辑器中,将一个节点拖放成为另一个节点的子节点后,在视图中并不会出现视觉变化。
但在代码中,用例如 nodeA.parent = nodeB之后,nodeA的位置在视觉上会有变化,特别时当nodeB本身有缩放旋转时,这个变化更明显。
有什么办法在代码中,更换父节点后,仍能保持之前的视觉状态吗?
比如像unity那样 SetParent(node, keepWorldTransform)这样的方法
在编辑器中,将一个节点拖放成为另一个节点的子节点后,在视图中并不会出现视觉变化。
但在代码中,用例如 nodeA.parent = nodeB之后,nodeA的位置在视觉上会有变化,特别时当nodeB本身有缩放旋转时,这个变化更明显。
有什么办法在代码中,更换父节点后,仍能保持之前的视觉状态吗?
比如像unity那样 SetParent(node, keepWorldTransform)这样的方法
自己顶一下,求大神解答啊。
代码中不行的喔,抱歉!
需要做什么操作才能达到我要的效果,这个非常重要,请一定帮帮忙!
既然编辑器里能做到,那这个功能完全可以做到Node的api中啊。
一定一定帮忙啊。没这个功能,很多效果实现起来太费劲了。
顶楼主一个,这个要是自己做也行,不过很麻烦,要是node能提供这样的api就好了。
你可以参考这样的代码自己实现
// keep world transform not changed
let worldPos = NodeUtils.getWorldPosition(node);
let worldRotation = NodeUtils.getWorldRotation(node);
let lossyScale = NodeUtils.getWorldScale(node);
node.parent = parent;
// restore world transform
NodeUtils.setWorldPosition(node, worldPos);
NodeUtils.setWorldRotation(node, worldRotation);
if (parent) {
let parentWorldScale = NodeUtils.getWorldScale(parent);
lossyScale.x /= parentWorldScale.x;
lossyScale.y /= parentWorldScale.y;
node.scale = lossyScale;
} else {
node.scale = lossyScale;
}
点个赞!这速度刚刚的!这样的代码要是以后能加入到node里的setParent方法里就好了。