如何批量生成prefab?

如题。
想把某个目录下的scene全部导出到另一个目录下生成prefab,如何实现?一次次手动在编辑器上拖太麻烦了。Creator有命令行工具么?

我只知道能跟用拖曳的
雖然不是很清楚
但是如果許多節點都需要做成預制
這些節點為何不包起來成一個節點變成預制體呢?

类似这样自己封装一个加载资源的方法…并且记录资源信息,以方便之后释放资源

你可以编写一个插件实现你要的功能

在资源管理器里面生成prefab的api为:

Editor.Ipc.sendToPanel('scene', 'scene:create-prefab', node.uuid, 'db://assets/xxx/xxx.prefab');

然后node.uuid参数可以通过2中方式获取

  1. 通过scene-walk脚本获取
'get-prefab-root-info'(event, data) {
    let ret = null;
    let scene = cc.director.getScene().getChildren();
    let prefabNode = scene[0];
    if (prefabNode) {
        // prefabNode 就是场景编辑器中的预制根节点
        let uuid = prefabNode.uuid;
        ret = uuid;
        // 之后的逻辑就可以像编写游戏代码一样随便获取prefab node的各种信息
        var node = cc.engine.getInstanceById(uuid);
    }

    if (event.reply) {
        event.reply(null, ret);
    }
}
  1. 通过场景编辑器获取正在选择的node
Editor.Selection.curSelection('node');// 获取的是多选的节点
Editor.Selection.curActivate('node');// 获取的是当前激活的节点

祝你好运!

3赞

hi 创建一个预制体出现了问题,版本2.4.4

代码:
var uuids = Editor.Selection.curActivate(‘node’);
Editor.Ipc.sendToPanel(‘scene’, ‘scene:create-prefab’, uuids, “db://assets/test.prefab”);

log:

  • Failed to create asset db://assets/test.prefab/Canvas.prefab, messages: Error: Parent path /Users/xxx/xxx/xxx/assets//test.prefab is not exists

  • Failed to create prefab db://assets/test.prefab/Canvas.prefab, messages: Error: Parent path /Users/xxx/xxx/xxx/assets/test.prefab is not exists

  • [object Object]

但是

        var uuids = Editor.Selection.curActivate('node');
        Editor.Ipc.sendToPanel('scene', 'scene:create-prefab', uuids, "db://assets");

成功了,看来不能指定perfab的名字,而是一个路径 ?

看样子是的

且必须打开要创建prefab的节点的所在的场景。

open-by-uuid打开了场景但是没有找到对应的回调 , open-by-uuid后直接create-prefab的话不行。ccc的拓展有些麻烦, 这样可能会导致生态发展的慢一点吧 。

自信点,把可能去掉

5赞