ccc1.9.3 更换父节点问题

在编辑器中,将一个节点拖放成为另一个节点的子节点后,在视图中并不会出现视觉变化。
但在代码中,用例如 nodeA.parent = nodeB之后,nodeA的位置在视觉上会有变化,特别时当nodeB本身有缩放旋转时,这个变化更明显。
有什么办法在代码中,更换父节点后,仍能保持之前的视觉状态吗?

比如像unity那样 SetParent(node, keepWorldTransform)这样的方法

1赞

自己顶一下,求大神解答啊。

代码中不行的喔,抱歉!

需要做什么操作才能达到我要的效果,这个非常重要,请一定帮帮忙!
既然编辑器里能做到,那这个功能完全可以做到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;
            }
3赞

点个赞!这速度刚刚的!这样的代码要是以后能加入到node里的setParent方法里就好了。