我想在编辑器打开prefab的时候自动执行代码,调整prefab里的节点,但是这个需要读取配置信息,所以我想在代码CC_EDITOR下执行资源加载
额 其实有三种方案。
1、有nodejs基础,稍微一点就行。预制体本身存储的信息其实就是个json文件。可以用fs读取一下,然后JSON.parse一下,会得到一个数组,数组的下标就是每一项的id,你理清楚后就可以去做调整。
2、把你需要的配置文件丢到resources目录下,然后在脚本中加入Editor.Message等的方法去处理。编辑器模式下是可以运行的。
3、其实就是上面两种结合的方式,使用cocos的拓展方式去做。既可以导入其他nodejs库,又可以在编辑器里自动处理。可以去下个3.x的版本尝试写一下。道理和2.x一样的,只是3.x的引擎里的“开发者”菜单下有个“消息管理器”和“消息调试工具”。方便你调试Editor
第1、3种方案 目前来说有点麻烦; 第2种方案没理解怎么用Editor.Message,因为现在主要是加载不了文件,所以没法得到数据来调整prefab。

/**
* 获取资源
*
* @param url 以 `db://` 开头的资源路径
*/
export async function getAsset<T extends Asset>(url: string) {
const uuid = await Editor.Message.request("asset-db", "query-uuid", url);
return uuid != null
? getAssetByUUID<T>(uuid)
: err(new Error(`failed to get asset's url: ${url}.`));
}
/**
* 通过 UUID 获取资源
*
* @param uuid UUID
*/
export async function getAssetByUUID<T extends Asset>(uuid: string) {
return new Promise<Result<T, Error>>((resolve, reject) => {
assetManager.loadAny({ uuid }, (e, v) => {
if (e) {
resolve(err(e));
} else {
resolve(ok(v));
}
});
});
}
使用:
getAsset<SpriteFrame>("db://internal/default_ui/default_sprite_splash.png/spriteFrame");
1赞
谢谢老哥!!!
谢谢老哥!!!!
markmarkmark