在插件中如何根据Node(不在场景中)创建Prefab

在2.4.x中可以这样

在3.6.x中有没有类似的方法,可以直接根据一个Node的数据创建Prefab

顶一下
@arsen2010
@jare
@EndEvil

好像没有, 找了下 Cocos 的 顶部菜单>开发者>消息列表 这个里面也没有

create-node

创建节点

* options {CreateNodeOptions}
  * parent {string} 父节点 uuid
  * components? {string[]} 组件名字
  * name? {string} 节点名字
  * dump? {INode | IScene} node 初始化应用的 dump 数据
  * keepWorldTransform? {boolean} 是否保持新节点的世界坐标不变
  * type? {string} 资源类型
  * canvasRequired? {boolean} 是否需要有 cc.Canvas
  * unlinkPrefab? {boolean} 是否要解绑为普通节点
  * assetUuid? {string} asset uuid,从资源实例化节点

@returns {string | string[]} 返回新节点的 uuid


人工置顶一下

试试
cce.Prefab.createPrefabAssetFromNode(nodeUUid,“db://assets/Node.prefab”)
第二个参数是保存路径的格式

1赞

3.7.2 亲测在编辑器扩展的场景脚本可以生成 prefab

    const { director } = require('cc');

    const scene = director.getScene() as cc.Node;

    if (!scene) {

        console.error("can not get scene");

        return false;

    }

    const canvas = scene.children[0];

    if (!canvas) {

        console.error("can not get canvas");

        return false;

    }

    let helloNode: cc.Node | undefined;

    for (const child of canvas.children) {

        if (child.name === "hello") {

            helloNode = child;

            break;

        }

    }

    if (!helloNode) {

        console.error("can fine hello node");

        return;

    }

    const filePath = `db://assets/prefabs/test.prefab`;

    const nodeUuid = helloNode.uuid;

    const prefabUuid = await cce.Prefab.createPrefabAssetFromNode(nodeUuid, filePath);

:hushed:,你试试new一个node再创建prefab会不会报错

@jare

试试
cce.Prefab.createPrefabAssetFromNode(nodeUUid,“db://assets/Node.prefab”)
第二个参数是保存路径的格式

3.8.2 版本,cce is not defined

本来想用 cce.Node.query(uuid) 的,找不到 cce 。3.8.x 有什么替代方法不

1赞

cce可以用,看我框架的实现extensions/app/engine/scene.ts

1赞

cce 实现了很多功能 我调试断点可以看到cce.Node,cce.Prefab里面有些方法的是我想用的,但是参数描述的什么根本看不出来 有什么方式可以看到api吗