惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Tenable Blog
Last Week in AI
Last Week in AI
P
Proofpoint News Feed
Engineering at Meta
Engineering at Meta
H
Help Net Security
F
Fortinet All Blogs
MyScale Blog
MyScale Blog
宝玉的分享
宝玉的分享
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 司徒正美
量子位
N
Netflix TechBlog - Medium
Apple Machine Learning Research
Apple Machine Learning Research
小众软件
小众软件
Recorded Future
Recorded Future
博客园 - 三生石上(FineUI控件)
Vercel News
Vercel News
aimingoo的专栏
aimingoo的专栏
I
InfoQ
Microsoft Security Blog
Microsoft Security Blog
Scott Helme
Scott Helme
The Last Watchdog
The Last Watchdog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
IT之家
IT之家
AI
AI
WordPress大学
WordPress大学
Security Archives - TechRepublic
Security Archives - TechRepublic
Google Online Security Blog
Google Online Security Blog
U
Unit 42
V2EX - 技术
V2EX - 技术
MongoDB | Blog
MongoDB | Blog
Schneier on Security
Schneier on Security
博客园 - Franky
H
Heimdal Security Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Jina AI
Jina AI
W
WeLiveSecurity
P
Privacy & Cybersecurity Law Blog
Cloudbric
Cloudbric
B
Blog RSS Feed
N
News | PayPal Newsroom
S
Securelist
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
I
Intezer
Hacker News - Newest:
Hacker News - Newest: "LLM"
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
博客园_首页
罗磊的独立博客
H
Hackread – Cybersecurity News, Data Breaches, AI and More
雷峰网
雷峰网

博客园 - mcwind

Unity开发IOS游戏的优化建议 Unity3d 如何使用程序集(续) Unity 几个Mesh特效的例子 Unity动态载入文本数据的方法归类 Unity动态载入可执行代码的方法 Unity几个有用的游戏运动特效 三维游戏引擎——Unity 角色模型优化要点续:换肤和导入 三维游戏引擎——Unity 角色模型优化要点 3D游戏引擎——Unity 如何绘制反面 3D游戏引擎——Unity中网格合并示例研究 资源:三维CAD二次开发网站 [收藏]你想成为一名游戏策划吗? [收藏]学习:游戏策划入门 如何让你开发的游戏赚钱 如何更改MapleTr登录页面和标题 Some Useful Articles Of TDD (Test Driven Development) On MSDN 第一次试用Live Writer手记 收藏:航空航天院所 倒腾sql2005数据表内容的方法 - mcwind - 博客园
Unity——Export/Import Package功能和项目管理的研究
mcwind · 2011-02-27 · via 博客园 - mcwind

本文摘要

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

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官方提供了一个收费的Asset Server,我没有用过,不知能否解决这个问题。如果我们能通过一些手段让免费的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会让你选择是否导出被依赖的内容。如果钩选择会自动添加被依赖的内容,并显示在列表中。如下图。

image image

不导出依赖

导出依赖

  • 导入时,Unity会判断当前项目中是否存在名称、路径完全相同的文件。若有,则判断修改时间是否一致,若一致就忽略,否则会提示是否覆盖。注意Unity并不管文件的新旧,只是简单地询问用户是否用包中的文件覆盖项目中的同名文件。如下图:

image

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

image

      正是由于导出的包自动包含了相关元数据信息,弥补了用SVN无法管理这些数据的缺陷,我们就可以将二者配合使用,达到多人在一个项目中协同工作的效果。具体建议如下:

  1. 首先用SVN建立对整个项目文件夹的管理,包括asset和library目录以及下面的文件;
  2. 由负责集成的项目组成员管理并提交该项目更新到svn数据库
  3. 其他协作人员从svn数据库下载最新的项目文件
  4. 协作人员对自己负责的内容进行工作,然后将成果输出。输出时不要钩选依赖
  5. 将输出的unitypackage文件提交给集成人员(通过svn或者其他途径都可以)
  6. 集成人员将新的unitypackage导入项目,然后再提交到svn数据库

      如果对人员分工、规范以及项目目录规划得好的话,采用这种方式完全可以实现多人同时工作,提高项目开发和迭代的效率。如果有朋友提供更好的建议,也希望不吝赐与众分享。有关Unity的其他话题也可以查阅我的其他文章。关于本文内容,我可能会再有进一步心得后加以完善。