如下图,cocos creator构建出来的setting.js中的assets的uuid、packedAssets的packUuid的生成机制是什么,跟文件名有关系吗。
因为我想在子游戏中使用大厅的prefab,就需要把整个项目的packedAssets的映射一直保存着,这样就有一个潜在的问题:大厅和子游戏的某些packedAssets的packUuid相同的话,存储时,后存入的就会将先存入的覆盖掉。
如何能避免大厅和子游戏之间uuid或者packUuid的重复
如下图,cocos creator构建出来的setting.js中的assets的uuid、packedAssets的packUuid的生成机制是什么,跟文件名有关系吗。
因为我想在子游戏中使用大厅的prefab,就需要把整个项目的packedAssets的映射一直保存着,这样就有一个潜在的问题:大厅和子游戏的某些packedAssets的packUuid相同的话,存储时,后存入的就会将先存入的覆盖掉。
如何能避免大厅和子游戏之间uuid或者packUuid的重复
顶一下,希望有人能帮忙解答
官方有人出来解释一下吗
uuid 是随机生成的,不会重复
packUuid 是根据 uuid 哈希出来的
假设有两个项目A和B,A和B里都有一个hello.png的资源,他们的uuid也不会重复吗
不会重复,除非你手动把 hello.png.meta 复制过去
.meta中的uuid是32位的,setting.js中的uuid是22位,两者有什么关联
后者是由前者压缩而来的
好的,谢谢您的解答
请问具体是怎么压缩,或者说换算的呢,我想自己写个插件,从setting.js中把相关的UUID解析出来,自己实现分包热更新
Editor.Utils.UuidUtils.decompressUuid(uuid)
代码拆分不知道怎么搞 现在都在一个里面 不能完全分离
麻烦问下 生成settings.js的逻辑的代码在哪里哈?
我们这边升级到到2.0, 因为移除了RawAssets, 导致加载zip文件时类型是cc.Asset,但是cc.Assets没有"zip" 这个属性,所以加载的zip文件内容没有办法获取到。
_nativeAsset: {
get () {},
set (obj) {}
},
set没有任何具体的实现,直接把内容丢了,这样导致加载完成后,回调中的cc.Asset没有zip文件的内容。我们这边自定义zip文件的downloader和loader,但是creator没有个自定义Asset类型的接口。所以是不是提供自定义Asset接口的地方?我是做后端开发的,小白,有描述不清楚的地方还请见谅。
这边想到的方案是自定义一个ZipAsset,通过代码修改cc.loader._resoures 把文件对应的类型改成cc.ZipAsset。但是加载zip文件时好像又加载了import里面的一个json,这个json返回的内容指定zip的类型又是cc.Asset,目前不知道怎么绕过这个。
想到的解决问题的方法完成以下两步
1)settings.js的生成逻辑在哪里? 把cc.ZipAsset加入到assetTypes里。
2) 生成import下的json文件的逻辑在哪里? 把zip文件对应的类型改成cc.ZipAsset
抱歉这块没有开源,里面非常复杂,梳理得不够完美的话不太方便开放
请通过 asset.nativeUrl 获得 zip 的 url,然后自己做进一步处理。比如通过 loader 进一步下载 zip 文件。
这一块有点复杂,其实按照上面的方法应该就行了。实在要这么做的话,你可以参考下这个插件https://github.com/DragonBones/DragonBonesJS/blob/master/Cocos/Demos/packages/dragonbones
官方能先增加一个ZipAsset吗?对于游戏配置文件如果放在多个json文件,加载过程会很麻烦
你好,最近发现一个问题是meta文件中uuid有重复的,这样子的,两个人同时开发一个项目,A可能新建了一个文件,另外B修改了其他东西,然后当B想要从git上更新远程服务器的代码下来的时候,重新打开IDE发现会报uuid重复,存在冲突的,可以告知下uuid生成规则吗,或者生成的uuid可以自己定制修改不?
暂时的解决方案是在zip文件的loader函数中直接修改Asset
function zipLoader(item, callback) {
const bytes = item.content;
const zipFile = someFunction(bytes);
const fakeZipAsset = item._owner; // fakeZipAsset is cc.Asset
fakeZipAsset.zip = zipFile;
callback(null, null);
}
然后在加载的回调函数中就会拿到这个cc.Assets
function someCallback(err, resource) {
const fakeZipAsset = resource;
const zipFile = fakeZipAsset.zip
// then do some things with zipFile
}
packUuid 怎么还原成之前的uuid?