cocos对象序列化后的格式,即诸如prefab和scene的格式,私以为对git不够友好,不方便在git等版本管理工具中处理版本冲突。
为了方便开发流程更好和版本管理工具结合,建议如下:
1.序列化文件中,给每个对象分配一个uuid,而不是按照文件中出现的顺序用整数编号,这样同一对象从创建开始到删除为止,其id不做更改。
2.在序列化文件中,如果一个对象在一个字段中引用另一个对象,现在的办法是引用整数编号,建议改为引用目标对象的uuid,这样当对象在文件中出现的顺序发生变更时,不会再影响其它引用这些对象的对象的内容。
3.在构建流程中,再把uuid替换成整数编号,减少空间占用,但是在代码库中,对象始终用uuid来表示。
是有这一点 现在我在预制中随便点点 就大几百行的变动
1赞
点赞(至少5个字)
以前某个回帖里面提过,不过好像还没什么反应。
uuid比较全局化,文件里面的内部结构不一定用uuid。可以是临时的某个id,只要不是按顺序的index就行。
1赞
这种优化,直接改了实现机制,怕是不好改,感觉牵扯得太多了
其实还好,只不过是把反序列化的时候,通过数组存obj并用index引用,改成通过map存obj用key引用。
把key从强顺序index改成弱顺序key,不和对象序列化排列顺序关联即可。key也可以是个int。
1赞
想到了一个更改序列化格式,用uuid而不是定义顺序来检索对象定义的理由:
现有的序列化格式,语义取决于对象在json文件中被定义的先后顺序,较难被AI理解(需要使用很长的上下文和很强的推理能力才能分析出来对象树结构),因此cocos开发流程很难被AI辅助自动化。
如果把序列化格式进行更改,为每一个对象都添加uuid字段作为唯一索引,讲极大降低AI理解序列化文件的难度,可能有助于AI开发工具直接操作json文件来辅助cocos项目开发。
感觉这样用uuid对文件大小和编辑器打开时间会很不友好,本来打开稍微大一点的项目就够慢的了,这样做恐怕得在优化完加载后才有可能
这样改动的同时,也需要编辑器做另外的一个修复
现在编辑器有些地方的 json object 存储到文件时在不同平台不同机器上顺序不是固定的,这也会导致 json object 实际数据没变,但是顺序不一样的文件变动