scene自己更新或者保存的时候,会产生很多全新的id,多人协作的时候合并会互相覆盖冲突,有什么好的解决办法么
就是别用scene,其他人只能制作prefab。然后由一个人管理,把prefab放进来或者动态载入prefab。
多人协作的禁忌:
1、多个人同时在一个版本上修改一个scene或prefab;
2、多个人同时在一个版本上修改同一行代码;
3、多个人同时在一个版本上,一个人移动了A文件,一个人修改了A文件。
所以避免同一个版本修改即可,串行修改,不要并行修改。
mark!!!
公共的scene多人开发时不要同时去修改。
你的模块涉及到scene,要改就先拉新,改完就马上提交,不要等模块开发完再一起提交,保不齐这中间时间谁又来改了。
多人开发本身就不会去动场景,都是自己做自己的预制体
要么管理混乱,要么架构混乱。设计上不要把预制体直接往场景里拖,拖得越多,交集越多,设计肯定不合理。场景基本就挂一个控制脚本,或者再多一个背景,其余都是独立的预制体。
就算功能并行的时候,会改动到同一个预制体,也是明显能预见的,改动前沟通一下或者提前安排都是可以解决。除非两个人各搞各的,根本不管对方死活(反正我先提交了,改的就是你)
看你们情况,只能做动态加载
所以我明白为什么我们框架知有一个场景里面挂了一个空节点绑定代码,其它场景都是预制体了
scene 只挂一些空节点,其他全部动态加载、。
延伸一下,说一个另外的相关设计。
其实cocos 在scene/prefab 文件的文本结构设计上,对合并是不太友好的。
最主要的一个点就是 “id” 这个属性,对应的数值是文件里面相对的顺序index。例如:
"_children": [
{
"__id__": 2
},
{
"__id__": 19
},
{
"__id__": 27
},
{
"__id__": 66
}
]
这种结构下任意插入一个节点,会让大量的id进行改变,从而扩散了变更。
如果id设计成不依赖相对顺序的话(例如uuid等),在文本层面,就可以合并在场景的不同树上的操作。
之前有个很多人讨论的ab流派哪个好的,支持a流派的人他们很大原因就是觉得多人协作冲突问题。
但是组件化的开发,要求之一就是组件颗粒程度够细,能拆的多分散就多分散,能动态加载就动态加载,能把一个脚本劈成好几份挂在子节点上就劈,子节点能拆成预制件就拆。如果很粗犷的把功能塞scene上那你还不如a流派代码控制。
所以冲突是不可能被解决的,只能避免,多人开发的话就赶紧开会,定下开发规范。这样除非你们任务分配有问题导致出现两个人要改同一个ui展示(这样别说预制件会冲突,你们代码和功能都冲突了,赶紧找策划打一架)
拆分成prefab啊

