cocos-engine icon indicating copy to clipboard operation
cocos-engine copied to clipboard

编辑器方法open-asset,save-asset的优化建议

Open tuyazuo opened this issue 6 months ago • 0 comments

Use Case

  1. 建议增加一个方法,可根据urlOrUUID直接保存某个资源而无需传参。

编辑器消息 await Editor.Message.request('asset-db', 'save-asset', urlOrUUID, content); 的描述是,content需要传资源完整内容,这个有点不合理。

例如:我使用 open-asset 消息打开1个预制物,执行某些操作修改了此预制物,然后需要保存。 首先open-asset并不会返回资源的完整内容,其次修改是执行runtime脚本进行的修改,也无法得到修改后的内容,所以我根本没法使用save-asset消息保存此预制物。

(ps: 现在折衷的实现方式是调用 await Editor.Message.request('scene', 'save-scene'), 这样被修改的预制物体就会保存。)

  1. 通过open-asset打开的预制物,需要延时一段时间才能读取到,这个也不利于开发者操作。
        await Editor.Message.request('asset-db', 'open-asset', uuid)
        await wait(650)  //需要延时一段时间,否则无法读取到选中的节点

        let nodes = Editor.Selection.getSelected('node')
        let node = findNodeByUuid(director.getScene(), nodes[0])  //遍历场景获取打开的预制物节点
        if(!node){
            succeed = false
            err_list.push({path: path, uuid: uuid})
            console.error('---------读取不到选中节点:', path)
            continue
        }

我的本意是想通过打开1个预制物,然后执行预制物上的脚本修改预制物,但发现打开之后无法立即获取到预制物的节点,必须得延时一段时间,这个是为何,有什么改进方法吗?

Problem Description

Proposed Solution

No response

How it works

No response

Alternatives Considered

Additional Information

No response

tuyazuo avatar Jun 05 '25 06:06 tuyazuo