[提问]:2.x 插件 cc.engine.getInstanceById 在3.x用什么代替

如题,或者有获取到选中节点信息的方法,Editor.Selection.getSelected只能获取到 uuid 但怎么通过 uuid 获取到具体的节点信息?

通过cc.director.getScene(); 递归遍历获取

有没有别的,这个我想过,通过 getChildByUuid来拿,但是感觉比较消耗性能

cc.director.getScene() 在 Prefab 编辑界面无效,这可咋整…

通过 scene:query-node 消息的形式实现了我的需求了(查找当前选中的节点上的 sp.Skeleton 组件中的 skeletonData 引用):

/**
 * 查找节点上引用的骨骼资源
 * @param {string} nodeUuid 
 * @returns {Promise<string>} 
 */
async querySkeletonOnNode(nodeUuid) {
    const node = await Editor.Message.request('scene', 'query-node', nodeUuid);
    if (node && node['__comps__']) {
        const components = node['__comps__'];
        for (let i = 0; i < components.length; i++) {
            if (components[i].type === 'sp.Skeleton') {
                const uuid = components[i].value.skeletonData.value.uuid;
                return (uuid !== '' ? uuid : null);
            }
        }
    }
    return null;
}

此方法在场景和预制体编辑界面都有效。

2赞

试试 cce.Node.query(id)

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