吐槽下creator3d 插件扩展API

最近做3d插件兼容发现以前
uuidToUrl、urlToUuid、uuidToFspath、assetInfoByUuid这些API都没了;
全都要用消息异步请求,换起来太繁琐,对性能也有一定影响

比如转换uuid也要这样写成异步:
uuidToUrl 改成这样写了 await Editor.Message.request(“asset-db”,‘query-url’,uuid);

这是我写的兼容API全是异步…

1赞

这里的异步其实是为了性能考虑。

因为在 Creator 3D 里,所有数据都是跨进程的了。大部分操作本身就是异步的,如果强行封装同步接口,在使用上会更舒服,但是这里的强行会直接阻塞同进程的其他代码正常执行。导致大量并发操作的时候,速度慢于异步接口~(其实 Creator 里的同步接口就是强行将异步操作转成同步接口)

这也是为什么之前的接口都变成了 ipc 的原因~

4000多行的插件代码做兼容,我哭了…

但是性能感觉没明显提升啊,特别是(多选时)复制、粘贴、拖动节点的时候,反应明显比Creator2.x 版本要慢,卡了会变成一个个延迟显示出来。

幸苦勒 = =。
replaceAll 大法好~~啊哈哈

这里还有个原因,就是顺带统一了操作接口,不管是编辑器内外,都用 Message 进行交互,这样比较规范。虽然可能带来内部一些交互性能下降,但这样只要是编辑器内有的功能,写插件都能直接用,另外还能直接把 message 列表输出出来当成 api 列表。现在 “开发者” 菜单里已经有一个 “消息列表” 可以展示部分准备好公开的消息了~

这是我们的锅~界面上部分地方用了 setTimeout,之后会慢慢优化~
这里快的其实是大并发量下的资源查询。

之前直接查询 1w 次资源信息,这 1w 次是串行的,1个完成后才能开始下一个,并且这个过程中,所在进程会主动阻塞~

但是换成异步的之后,1w 次并发出去,同时在执行,cpu 利用率高了很多。

原来的利用率好比是一个锯条,一个请求,锯齿凸上去一会儿,结束了就下来了,然后收到下一个请求,又上去一下,一直重复。
改成异步后,所有处理都在队列里,一个结束后,立马处理下一个,没有锯齿掉下来的情况~~

大佬再问个问题
3d插件里还有这个场景脚本么:“scene-script”: “./scene-info.js”
有的话怎样通讯?

目前还没有开放,将在下一个版本开放。

场景脚本功能

场景脚本功能主要适用于一个扩展插件需要使用场景内的引擎运行时数据的场景。

例如想要输出一份节点树的数据。就需要在场景进程里,运行自己的代码,并且和外部的插件主体进行一定程度的交互。

使用方式

首先在 pacakge.json 里注册数据到场景插件:

{
    "name": "engine",
    "contributions": {
        "scene": {
            "script": "./scene.js"
        }
    }
}

然后在 scene.js 内填入相应的数据

// 模块加载的时候触发的函数
exports.load = function() {};
// 模块卸载的时候触发的函数
exports.unload = function() {};
// 模块内定义的方法
exports.methods = {
    log(str) {
        console.log(str);
        return true;
    },
};

定义完成后,我们可以通过 message 进行触发:

interface ExecuteSceneScriptMethodOptions {
    name: string;
    method: string;
    args: any[];
}
const options: ExecuteComponentMethodOptions = {
    name: 'scene',
    method: 'log',
    args: [
        'test',
    ],
};
await Editor.Message.request('scene', 'execute-scene-script', options); // true

执行后,我们会在场景控制台打印一个 test 字符串,并且 message 消息返回一个 true 布尔值。

好,谢谢大佬

建议插件开发支持一下typescript

还要右键菜单如果可以暴露出来让开发者自己配置的话就更好了 可以开发很多方便的插件

2赞

这个我赞成

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