注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

亨利的3D幻想世界

 
 
 

日志

 
 
关于我

一个在奋斗中的码农

网易考拉推荐

在Unity3d中如何使用Git来进行版本控制?  

2013-05-10 09:44:59|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

1.用Unity3D创建一个项目。例如在c:/testU3d/下创建了一个my06的项目。

2.

2.1图,打开菜单【Edit】→【Project Settings】→【Editor】

2.2 图 选择Meta Files。

3.保存所有项目之后,退出Unity3d.

4.在所处的项目文件夹中,直接使用msysgit,点击在鼠标右键菜单中的Git Init Here。

或者用TortoiseGit的鼠标右键菜单中的【Git Create repository here】,也行。

这样就完成了git的初始化,在所处的项目文件夹中创建了一个git仓库。
其实就是在所在的项目文件夹下执行git init命令。
图4


5.在git bash使用vim .gitignore命令创建.gitignore文件。在windows7上不能直接创建以点开头的文件。需要使用命令行。

.gitignore文件的作用详见《GIT权威指南》P126。文件.gitignore可以放在任何目录中,它的作用范围是所处的目录及其子目录。

创建.gitignore文件目的是忽略unity3d编译过程中产生的一些临时文件。这些临时文件不用于git的跟踪。

图5

在文件夹的根目录下,本例中在c:/testU3d/my06下

在命令行中键入vim .gitignore

vim编辑器如何使用。这里忽略。

【注意.开头的文件,在windows7下无法手工创建,需要用命令行。或者用图形客户端TortoiseGit来创建忽略文件.gitignore。】
把下面这段忽略文件的代码拷贝到.gitignore中去.

# ---------------[ Unity generated ]------------------ # /Temp /obj /UnityGenerated /Library # ----[ Visual Studio / MonoDevelop generated ]------- # ExportedObj/ *.svd *.userprefs *.csproj *.pidb *.suo *.sln *.user *.unityproj *.booproj # -------------[ OS generated ]------------------------ # .DS_Store .DS_Store? ._* .Spotlight-V100 .Trashes Icon? ehthumbs.db Thumbs.db
代码说明:
文件.gitignore可以放在任何目录中,它的作用范围是所处的目录及其子目录。
文件.gitignore的内容表示git可以忽略的,无需跟踪的文件。比如想忽略所有的后缀名为.oh的文件,可以这样写*.oh。

git里面的忽略不是删除,对于被标记为忽略的文件或者文件夹,是不需要git版本控制来跟踪,git不比较别标记为忽略的同一个文件第N个版本和第N+1个版本的差别,并且git忽略的文件和文件夹不会放在git仓库中。
关于git忽略的详细解释,请参看《git权威指南》P126页的内容。

6.就完成了Git对Unity3d的初始化管理和跟踪。我们可以用Git来对Unity3d项目进行版本控制了。

7.游戏项目用git的思考。游戏项目和其他软件开发项目有很大的不同,其它大部分的软件开发项目本质上都是基于源代码文本的管理(例如Java,C#,PHP,Python,Ruby),而游戏项目非常特别,基本上都是使用游戏引擎开发,更深入的说是游戏源代码文本和紧密的美术文件联系在一起,这个时候就会出现其它语言平台项目所遇不到的问题,是游戏项目特有的问题,尤其是在多人协作的时候。美术文件是怎么管理的,美术文件经过游戏引擎之后,本质上已经是二进制文件,不是文本文件了,而如果使用的是git,git是分布式的版本控制,svn是集中式的版本控制,在多人协作游戏开发项目的时候,svn因为有对文件加锁解锁的机制,可以保证某一时刻某个文件的唯一性,就是保证在游戏项目中美术文件的唯一使用性,也就是只有一个人能修改这个美术文件,而git先天是分布式的版本控制,没有加锁解锁机制,在多人合作的时候,不能保证游戏项目的美术文件的唯一使用性,即不能保证在多人协作的情况下,这个美术文件只能给某个人使用,因为美术文件无法合并。有的游戏公司是这样解决的,通过某某算法,在使用git的情况下,保证美术文件的合并是正常的,如果不知道这个算法的情况下,通常的做法就是程序员管游戏的源代码文本文件,美工管美术文件,程序员和美工之间一定要明确职责,谁负责什么功能一定要分清楚,这样能保证在多人协作开发游戏的情况下,git的对游戏的二进制文件合并是正常的。如果游戏开发团队认为上述操作方法不友好,那么就放弃使用git,而使用svn。这种情况很有可能是git的唯一比svn不足的地方了。这也是为什么参考引用文档2中,unity3d  官方游戏公司只给出了svn的示范,而不给出git的官方示范的原因之一,也许unity3d官方认为使用svn这种传统的(我认为git是要早晚取代svn的)集中式版本控制开发游戏项目比git要好的原因之一。Perforce和SVN类似也是集中式的版本控制软件,但是是商业软件。在很多游戏项目中,Perforce被广泛的使用。关于更多游戏项目二进制文件的管理,请参看参看引用文档4、文档5。


8.这个二进制美术文件合并问题是目前unity项目多人合作需要面对的问题,也就是7中提到的某某算法。已经有团队放出了相关的解决方案,UniMerge,在unity assets store商店上售价15美元,https://www.assetstore.unity3d.com/cn/#!/content/9733

在Unity3d中如何使用Git来进行版本控制? - herry2013git - 亨利的3D幻想世界
 
该开发团队还在Unite 2015技术大会上对这个插件做了介绍说明。
https://www.youtube.com/watch?v=b033hYK5chw

在Unity3d中如何使用Git来进行版本控制? - herry2013git - 亨利的3D幻想世界
 
类似的,还有unity官方提供了unity smart merge,参考https://docs.unity3d.com/Manual/SmartMerge.html

当然,也有团队反应,使用这个插件不够完美。其实这个二进制美术文件合并问题属于游戏引擎开发商应该提供的工具。因为git合并文本文件,是使用git自身已经提供的文本文件合并工具,像这种特殊类型的二进制美术文件合并问题,应该是需要游戏引擎开发商对目前主流的git管理工具提供一个他们独有格式的合并工具的。

当然,有团队说,在实际项目中使用UniMerge,很烦琐,不好用。这是需要该工具进一步完善的地方。

9. 使用Scene Fusion解决美术文件合作问题。这个Scene Fusion插件也是属于收费插件,查询官网的信息来看,价格上比UniMerge更昂贵。
可以访问插件的官网查看详细介绍。http://www.kinematicsoup.com/

插件的演示:
https://www.youtube.com/watch?v=DJVhuMYb8Ow

在Unity3d中如何使用Git来进行版本控制? - herry2013git - 亨利的3D幻想世界


 Scene Fusion官网宣称,使用该插件可以做到多人实时合作场景,无需担心场景文件合并的问题,当然还有很多其它优点。因为该插件十分昂贵,我没有亲自使用过这个插件。(官网介绍,最便宜的套餐价格是,2人合作,每月30美元,这里我就深刻体会到了大家常说的一句话:“金钱不是万能的,但是没有钱是万万不能的。”)



10.程序员和美工严格分开的方案。程序员使用git管理程序文本文件,美工使用svn或者unity asset sever或者其它能保证任意时刻唯一性的版本管理软件管理美术文件。程序和美术合并测试的时候,git再从svn或者unity asset server里面读取美工做好的美术文件。


11.资深游戏制作人Jane Ng在2016年GDC大会的演讲《Making the World of Firewatch》,讲述自己的开发团队使用unity开发2016年热门 冒险游戏Firewatch的制作经历,在演讲的第一部分就专门谈到他们团队如何协作的。
https://www.youtube.com/watch?v=hTqmk1Zs_1I

在Unity3d中如何使用Git来进行版本控制? - herry2013git - 亨利的3D幻想世界
 
演讲是英文的,这里有中文总结
https://zhuanlan.zhihu.com/p/25709031






参考引用文档

1.http://www.chrisdanielson.com/2011/06/04/unity3d-projects-version-control-git/ ---明白git对unity版本管理的整个流程,但是文档中对忽略文件的编写不够好


2.http://docs.unity3d.com/Documentation/Manual/ExternalVersionControlSystemSupport.html---unity官网文档给出的unity项目版本管理示范,但是用的是SVN,其中第四点是删除/Library。在git里面就是对Unity项目下的Library目录的忽略。


3.http://blog.i-evaluation.com/2013/09/12/unity3d-with-git-gitignore-for-bitbucket-and-github/---这篇文档写忽略文件写得好,但是原文中想忽略Library目录,原文为Library/,应该写为/Library.后者的写法才起作用。


4.http://www.zhihu.com/question/29411544-----------git和游戏项目的二进制管理问题,知乎回答,游戏公司各个大牛对这个问题最专业的讨论意见。


5.http://blog.codingnow.com/2011/05/asset_management.html-------资深游戏制作人云风对此问题的看法。



本集视频演示

1080P高清格式在线视频地址 百度云登录播放

http://pan.baidu.com/share/link?shareid=45279686&uk=1731225724&fid=672429368753987

在Unity3d中如何使用Git来进行版本控制? - herry2013git - 亨利的3D幻想世界

 


1080P分辨率格式 在线视频 Youtube

https://www.youtube.com/watch?v=3-lXjWAV0vc

  

720P分辨率格式在线视频 直线教程网

http://www.linecg.com/video/play29775.html

  

低分辨率格式在线视频 优酷

(因为国内99%的视频网站不支持用户直接上传1080P视频,会被网站程序自行压缩,降低分辨率)

http://v.youku.com/v_show/id_XNzA5MTQzNzQ4.html

本集1080P分辨率 视频文件 可以在网盘下载

百度网盘

http://pan.baidu.com/s/1gdkRCwr

在Unity3d中如何使用Git来进行版本控制? - herry2013git - 亨利的3D幻想世界
  


Mega网盘
https://mega.co.nz/#F!QA9wVZLJ!kktjeJv6-znVd9RHg78YXA

在Unity3d中如何使用Git来进行版本控制? - herry2013git - 亨利的3D幻想世界
 

115网盘 礼品文件接收方式
http://115.com/lb/5lbcjtivkelf

在Unity3d中如何使用Git来进行版本控制? - herry2013git - 亨利的3D幻想世界
 

 


 
  评论这张
 
阅读(4821)| 评论(2)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018