我有一个没有任何版本控制的Unity项目,我需要与其他开发人员共享它,以便我们俩都可以从事该项目。
应该使用哪些策略与Unity Assets配合使用?
我有一个没有任何版本控制的Unity项目,我需要与其他开发人员共享它,以便我们俩都可以从事该项目。
应该使用哪些策略与Unity Assets配合使用?
Answers:
Unity具有内置的功能,可以正确支持版本控制。
只需进入File-> Project Settings-> Editor并启用外部版本控制。
我建议使用Git,它是免费的并且是最好的。
不久前,我在博客上写了关于版本控制(使用Git)的信息
长话短说:
启用外部版本控制File-> Project Settings-> Editor并创建.gitignore文件,以避免回购中不必要的内容(这不是真正必要的,但是在开发过程中将是无价之宝)。
文件的外观如下:
[Oo]bj/
[Tt]emp/
[Ll]ibrary
#These are files in the root folder of the project
*.tmproj
*.csproj
*.unityproj
*.sln
*.suo
*.user
*.pidb
*.userprefs
.gitingore
我使用了统一的项目,但有一些ommissions: ,[Bb]uild/
,。*.booproj
sysinfo.txt
我很确定我使用的是基于GitHub的Unity的新仓库模板(github.com/github/gitignore/blob/master/Unity.gitignore)以及任何Objective-C(面向iOS时)。
特定于Unity的-始终在不同的场景和不同的代码文件上工作,并手动合并其他人的更改。如果两个人都需要在同一场景上工作,请对其进行复制,然后将副本用作测试。否则,如果两个人都修改了同一场景,则一个人的更改将覆盖另一个人。您仍然可以对源文件使用源代码管理,只是一旦创建它们,就根本不要在文件系统中或通过Unity移动它们。
初学者的建议-给自己一个不错的差异/合并工具(我喜欢WinMerge),并习惯于使用它来查看他人所做的更改,并手动合并冲突文件中的更改。设置中央文档空间,例如。Google撰写文档或Wiki,并将文档保存在此处-文档应至少包含基本功能列表,以便您了解目标功能,理想情况下应包含从功能列表派生的任务列表以及明确的指示谁在完成任务。相互交谈以大致了解谁需要完成哪个任务,并在完成任务时将其从列表中删除。继续查看并重新评估该列表,以查看所有内容是否仍然有效以及是否需要重新安排优先级。
我与一个名为Defective Studios的团队合作。多年来,我们一直在为同一个问题奋斗,最近我终于屈服了,并开始编写扩展以帮助我合并游戏对象。
基本上,该方法是在窗口中创建类似于检查器的界面,并排排列每个游戏对象,组件和属性以进行比较,并提供将值(或整个对象)从一侧复制到另一侧的按钮。如果您熟悉,SerializedProperty
门课,那就是这里要做的大部分工作。我们基本上创建了一个GUI,该GUI在左右两侧之间同步折叠状态,并在a GameObject
或Component
仅存在于右侧或左侧。比较功能在每个级别检查相等性,然后根据相等性的状态将每行的背景变为红色或绿色。子项包含差异的任何行也会变为红色,并且我们还包括一个漂亮的按钮,用于递归搜索树并展开所有子项不同或具有差异的对象。
同样,还有一组掩码字段,可让您从比较中过滤某些组件类型。还比较了GameObject属性,例如名称,图层和标签。我们使用SerializedObject
和SerializedProperty
来遍历gameObject
的属性,并像在检查器中绘制的那样绘制它们。这样可以确保一致性,并且更容易编写代码!
最后一个很漂亮的细节是,比较过程(在加载对象和进行更改时触发)在由该EditorWindow.Update
函数更新的临时协程中运行,因此,如果要比较一个非常复杂的对象,窗口不会锁定编辑器。将对象与成百上千个孩子进行比较时,这是必须的。总而言之,就像我的朋友喜欢说的那样,这是一个“乐高项目”,但绝对是一种无价的工具,它立即成为我们协作工作流程的一部分。
该工具,统一合并被记录在统一的wiki,其中包括一个路线图和一个电子邮件地址,反馈和问题报告。如果您真的在复杂的合并中挣扎,请试一试,让我们知道您的想法!另外,我也不用将其构建为DLL,因此随时可以在源代码中随意查找。临时协程的实现和SerializedProperty
操作,以及我最终需要的一些GUI技巧,都是您的编辑器扩展工具包的重要组成部分。我对用户可能会进行的更改/改进非常感兴趣,因此请保持联系!
如果您有足够的资金,配备Unity Pro专业版的资产服务器相当不错。过去,我曾在一个大型的,多人的项目中使用过它,而它确实起作用了。对于原始版本控制,它执行了我们期望的操作。
我尝试过将SVN存储库与Unity项目一起使用,这有点麻烦。但是,我们最终在将该想法付诸实践之前便取消了这个想法。Unity保留了很多我不想花时间去了解的备份文件,如果它们不同步到服务器会发生什么。我认为,只要稍加技巧,它就可以实现,但是我没有很好的工作经验。
我已经使用DropBox的免费功能完成了一个小项目。这让我感到紧张,但我们从来没有任何问题。而且,我认为我们最终并不需要为该项目提供任何实际的版本控制内容,因此我不能过多地谈谈恢复或合并文件的方式。
Dropbox支持每个文件的版本控制(而不是每个提交),并且可以很好地与Unity配合使用。它最初是免费的(2 GB),之后相当便宜(50gig约10美元)。您需要PackRat插件才能访问版本历史记录。
就像使用SVN,CVS,GIT等一样,当您进入开发的每个关键阶段(例如,一周结束,里程碑结束)时,都需要确保创建标签文件夹。与前面提到的不同,如果您不这样做,将很难恢复到这样的阶段,因为您将不得不单独恢复每个文件。在开发时请记住这一点,您将无需花费Asset Server就能轻松地度过。