[Unity] Unity3D - 导入/导出Package功能和项目管理的研究

查看:1768 |回复:12 | 2014-1-11 17:50:43

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 大西几 于 2021-2-24 17:22 编辑

Unity3D - 导入/导出Package功能和项目管理的研究      

        本文首先描述了Unity在支持大型游戏项目开发时的两个不足:即对模块化和svn协同缺乏支持。随后,分析了Unity自带的Export/Import Package 功能,并提出了使用此功能与svn配合实现多人项目协同的方法。

Unity项目协同的挑战

     在使用Unity开发游戏项目时,一般都需要多人同时工作。例如每人负责不同的场景,或者一些人负责调试光照和渲染,另一些负责编写程序逻辑。总之一个人全包的情况对于稍大一点的项目而言少之又少。但遗憾的是Unity对协同项目工作和大型项目的支持可以用糟糕来形容。
     首先,Unity没有模块化开发的概念。我们知道模块化是开发大型项目必须的一种实践方法。例如用VC开发大型程序时,我们可以把程序拆分成多个dll项目来开发,由此减少单个项目的复杂度和编译时间。另一个例子是flash程序的开发,同样可以把工作拆分成多个flash项目,最后将每个项目生成的swf或者swc合在一起工作。
     然而到目前的3.0版本为止,Unity仍然不支持类似dll或者swc/swf这种模块化构建应用程序的方法。对Unity而言,一个游戏就是一个工程。如果游戏规模很大,包含很多资源,那么项目就不可避免地变得臃肿和难以维护。Unity在打开、刷新、编译这类工程时也会耗用更多的时间。以至于在Unity官方论坛上都能看到许多这方面的抱怨。例如这篇帖子http://answers.unity3d.com/questions/19688/splitting-complex-project-into-multiple-projects就详细地描述了一个770M左右大小的项目所面临的困境。
      其次,Unity会将项目信息以二进制格式保存在library目录中,其中被称为元数据(Meta Data)的信息更是记录了构成游戏的许多关键数据(例如模型导入所使用的各项设置、Asset之间的引用关系等)。但由于这些数据是二进制格式,并且存放方式很不清晰,因此在使用SVN等版本管理系统时,无法采取多人修改-合并的方式。只能一个人改完后,提交整个项目,然后下一个人再改。严重阻碍了项目协同。Unity官方提供了一个收费的AssetServer,我没有用过,不知能否解决这个问题。如果我们能通过一些手段让免费的svn发挥作用,何乐而不为呢?
      对于Unity的第一个缺点,我们暂时没有好的办法来解决,只能希望Unity后续的版本能提供模块化的支持。(Unity和ExitGame近期宣布展开合作,推出一款针对MMOG开发的产品组合。Unity将推出一个叫Legion的版本,与ExitGame的Photon配合。我猜测Legion应该对大型游戏项目要支持得更好些吧。)
      至于第二个缺点,我们可以用Unity的输出/导入包(Export/Import Package)功能,配合svn在一定程度上加以解决。

用“输出/导入包(Export/Import Package)”功能实现项目协同


Unity的Export/Import Package功能主要用途是在不同的项目之间实现asset复用。该功能的基本介绍和操作详见官方文档,本文将进一步描述该功能的具体表现,以及如何利用该功能实现多人项目的协作。
导入导出包功能具有下列特性:  
  • 在导出时,Unity会记录导出内容在项目中的完整路径,并在导入时重建对应的目录结构。因此我们可以方便地在项目间同步目录。  
  • 导出时,Unity会让你选择是否导出被依赖的内容。如果钩选择会自动添加被依赖的内容,并显示在列表中。如下图。
7_1_5caf34ce2722d71.jpg
不导出依赖
7_1_2893658b8330443.jpg
导出依赖
  • 导入时,Unity会判断当前项目中是否存在名称、路径完全相同的文件。若有,则判断修改时间是否一致,若一致就忽略,否则会提示是否覆盖。注意Unity并不管文件的新旧,只是简单地询问用户是否用包中的文件覆盖项目中的同名文件。如下图:


  
  • 最重要的是,Unity输出包时,还包含了asset对应的元数据。用WinRAR或者其他压缩软件打开Unity导出的.unitypackage文件,就可以看到这些元数据文件,如下图:


      正是由于导出的包自动包含了相关元数据信息,弥补了用SVN无法管理这些数据的缺陷,我们就可以将二者配合使用,达到多人在一个项目中协同工作的效果。具体建议如下:
  • 首先用SVN建立对整个项目文件夹的管理,包括asset和library目录以及下面的文件;
  • 由负责集成的项目组成员管理并提交该项目更新到svn数据库
  • 其他协作人员从svn数据库下载最新的项目文件
  • 协作人员对自己负责的内容进行工作,然后将成果输出。输出时不要钩选依赖
  • 将输出的unitypackage文件提交给集成人员(通过svn或者其他途径都可以)
  • 集成人员将新的unitypackage导入项目,然后再提交到svn数据库

       如果对人员分工、规范以及项目目录规划得好的话,采用这种方式完全可以实现多人同时工作,提高项目开发和迭代的效率。

2014-1-11 17:50:43  
 赞 赞 1

使用道具 登录

12个回答,把该问题分享到群,邀请大神一起回答。
2#
nice~
回复 收起回复
2014-2-20 18:13:58   回复
 赞 赞 1

使用道具 登录

4#
{:1_145:}
回复 收起回复
2014-7-1 23:55:53   回复
 赞 赞 1

使用道具 登录

5#
学习
回复 收起回复
2015-4-16 08:35:11   回复
 赞 赞 1

使用道具 登录

6#
想要成大触,天天上元素!
回复 收起回复
2015-4-21 09:36:02   回复
 赞 赞 1

使用道具 登录

7#
元素帖子强,满满正能量!
回复 收起回复
2018-10-17 09:54:57   回复
 赞 赞 1

使用道具 登录

8#

这世上没有什么是元素币搞不定的,如果有,那就用更多!
回复 收起回复
2018-10-17 09:59:35   回复
 赞 赞 1

使用道具 登录

9#
厉害了厉害厉害  谢楼主分享
回复 收起回复
2018-10-17 10:07:32   回复
 赞 赞 1

使用道具 登录

10#
回复 收起回复
2018-10-17 10:10:54   回复
 赞 赞 1

使用道具 登录

11#
认真的看看
回复 收起回复
2018-10-17 10:27:54   回复
 赞 赞 1

使用道具 登录

12#
天下武功出少林,世界资源入元素!
回复 收起回复
2018-10-17 11:35:02   回复
 赞 赞 1

使用道具 登录

13#
很厉害啊
回复 收起回复
2018-10-17 11:40:30   回复
 赞 赞 1

使用道具 登录

CG 游戏行业专业问题

Unity3D技术手机游戏引擎手游引擎
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表