刚开始使用unity做开发时,拿到一个范例工程先上传SVN,之后再自己做一些修改后,发现有非常多文件都有变化,这才知道有很多本地生成的文件,是不用上传的,但是不知道哪些才是需要共用的。之后又困扰于修改提交时看不到diff,无法把握每次修改内容。在网上多方查找,找到以下几篇算是比较系统的介绍unity的文件介绍,翻译转载过来备忘

1、本文主要介绍工程文件结构,哪些目录、文件需要放在版本控制系统中。

http://developers.nravo.com/mastering-unity-project-folder-structure-level-0-vcs/#.U0yXvPmSyNw

2、.meta文件介绍

3、Asset目录下的系统保留目录

http://docs.unity3d.com/Documentation/Manual/ScriptCompileOrderFolders.html

 

从新建工程中查看unity文件系统

新建一个“test”的工程,导入“Standard Assets (Mobile)”这个包,新建一个"Tets.cs"的脚本文件,绑定到主摄像机上。做完这些后来看看生成的目录结构,如下图:

这么多文件和目录中,只有两个目录是需要放入版本控制中的:Assets 和 ProjectSettings。其他所有文件都是从这两个目录文件中生成出来的:

Assembly-CSharp-vs.csproj / Assembly-CSharp.csproj:

为C#脚本生成的Visual Studio和MonoDevelop的工程文件。

Assembly-UnityScript-vs.unityproj / Assembly-UnityScript.unityproj

JS的工程文件

testproject.sln / testproject-csharp.sln

IDE的solution,第一个包含c#、JS、Boo,第二个是纯C#工程,用VS打开,因为VS不处理JS和Boo工程

testproject.userprefs / testproject-csharp.userprefs

MonoDevelop用来存放当前打开的文件、断点、监视点等信息的配置文件。

备注:

上面列出的这些文件中除了.userprefs外,其他文件都会在执行unity菜单Assets -> Sync MonoDevelop Project后重新生成

Assets:

所有游戏资源全都放在这个目录下,包括脚本、纹理、声音、自定义编辑器等。这是工程中最重要的文件夹

ProjectSettings:

存放工程设置。包括物理、标签、玩家设置等。换句话说,你在菜单Edit → Project Settings中做过的所有设置都放在这个目录下

Library

重要Assets的本地缓存,不用放在版本控制中

obj / Temp

unity运行过程中生成的临时文件。obj是MonoDevelop用的,Temp是unity用的

建立版本控制系统:

unity官方推荐开发者用unity原生的Unity Asset Server来进行版本控制。我们团队用了一个月之后,觉得这个原生本版控制不够强大,没有分支、锁定,要付费(团队牌照$500),感觉像是个简化版的SVN。

之后采取的方法是将Assets转换为文本格式保存,用Git进行版本控制

assets转换为文本的设置(unity 4.3):

1、Edit→ Preferences → Packages → Repository中设为External

2、Edit → Project Settings → Editor → Version Control Mode设为Hidden Meta Files(非必须)

3、最重要的:Edit → Project Settings → Editor → Asset Serialization Mode中设为Force Text,这里是选择用二进制还是文本格式保存。

4、保存配置

.meta文件介绍

当你在场景中引用一个资源(asset)时,unity不使用名字或路径,而用一个全局唯一的GUID来指向工程中的资源。这个GUID就放在meta文件中,unity会为Assets目录下的所有文件夹和资源文件生成一个meta文件。

GUID有优点也有缺点

优点:移动、重命名、改动资源文件,都对GUID没有影响,GUID还是指向这个资源文件。

缺点:注意不要随意删除资源文件相关的meta文件。如果删除了meta文件,unity会认为原始的资源文件被删除了,并给此资源重新生成一个新的GUID。这就是为什么有时候场景中资源的引用会突然断开。

除了GUID,meta文件还有重新导入资源的信息。比如纹理资源可设为以标准纹理、普通地图、GUI纹理、cookie、纹理、光照贴图导入。这些导入设置是放在meta文件中的。

Assets目录下的系统保留目录

http://docs.unity3d.com/Documentation/Manual/ScriptCompileOrderFolders.html

脚本编译顺序:

1、Standard Assets, Pro Standard Assets , Plugins 目录下的脚本

2、Standard Assets/Editor, Pro Standard Assets/Editor and Plugins/Editor 目录下的脚本

3、名字为Editor的目录之外的所有脚本

4、名字为Editor的目录下的脚本

Assets根目录下的WebPlayerTemplates 目录内的脚本不会编译。

比如一个UnityScript文件需要引用一个C#文件中定义的类。你可以将C#文件放在Plugin目录下,UnityScript文件放在一个非特殊目录下。如果不这样做,会提示C#类找不到。

http://wiki.unity3d.com/index.php/Special_Folder_Names_in_your_Assets_Folder

Standard Assets:其中的脚本最早被编译

Pro Standard Assets:与Standard Assets一样,是付费版的内容,比如纹理渲染、屏幕特效等

Editor:这个目录名字比较特殊(不一定在Assets根目录下),此目录下的脚本是unity编辑器的脚本API。如果你的脚本需要用到UnityEditor命名空间中的内容,就需要放在名为Editor的目录下。整个工程中可以有多个Editor目录。

备注:普通目录下可随意放置Editor目录层级,但在Standard Assets, Pro Standard Assets , Plugins这三个保留目录中则必须在根目录下。比如普通目录下为My Extension/Scripts/Editor,如果需要放在系统目录下则必须Standard Assets/Editor/My Extension/Scripts

Plugins:放置脚本使用的本地插件,编译时会被自动包含。必须放在Assets根目录下。Windows下的本地插件后缀为.dll,MAC下为.bundle,Linux下为.so

Resources:此目录下的资源可由脚本直接引用文件路径和名字,而不是常用(推荐)的直接引用(编辑器中拖放)。所以编译时此目录下的所有文件都会被自动包含(包括没有用过的资源)。工程中可以有多个Resources文件夹。不推荐在多个Resources目录下存放同名文件。一旦编译,所有Resources目录下的所有资源都会被一起打包。

运行时导入资源请参考官方说明http://docs.unity3d.com/Documentation/Manual/LoadingResourcesatRuntime.html

Gizmos:此目录下的纹理/图标用于Gizmos.DrawIcon(),按名字调用,在编辑器中绘制在屏幕上。

WebPlayerTemplates :网页版,略过

Streaming Assets:Application.streamingAssetsPath中使用的资源,略过

unity文件解析以及版本控制的更多相关文章

  1. CocosStudio文件解析工具CsdAnalysis

    起因 因为工作需要,所以需要使用CocosStudio来制作界面动画什么的.做完了发现需要找里边对象的时候会有很长一串代码,感觉不是很爽.之前写OC代码的时候可以吧程序中的对象指针跟编辑器中的对象相对 ...

  2. 通过正则表达式实现简单xml文件解析

    这是我通过正则表达式实现的xml文件解析工具,有些XHTML文件中包含特殊符号,暂时还无法正常使用. 设计思路:常见的xml文件都是单根树结构,工具的目的是通过递归的方式将整个文档树装载进一个Node ...

  3. 八、Android学习第七天——XML文件解析方法(转)

    (转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 八.Android学习第七天——XML文件解析方法 XML文件:exten ...

  4. phpcms V9 首页模板文件解析

    在了解了<phpcms V9 URL访问解析>之后,我们已经知道首页最终执行的是content模块下index控制器的init方法. 下面, 我们逐步分析过程如下: 第一.首页默认执行的是 ...

  5. (转)AVI文件格式解析+AVI文件解析工具

    AVI文件解析工具下载地址:http://download.csdn.net/detail/zjq634359531/7556659 AVI(Audio Video Interleaved的缩写)是一 ...

  6. itextSharp 附pdf文件解析

    一.PdfObject: pdf对象 ,有9种,对象是按照对象内涵来分的,如果按照对象的使用规则来说,对象又分为间接对象和直接对象.间接对象是PDF中最常用的对象,如前面对象集合里面的,所有对象都是间 ...

  7. 《热血传奇2》wix、wil文件解析Java实现

    在百度上搜索java+wil只有iteye上一篇有丁点儿内容,不过他说的是错的!或者说是不完整的,我个人认为我对于热血传奇客户端解析还是有一定研究的,请移步: <JMir——Java版热血传奇2 ...

  8. paper 37 : WINCE的BIB文件解析

    WINCE的BIB文件解析 BIB的全称为Binary Image Builder,在Wince编译过程中的最后MakeImage阶段会用到BIB文件,BIB文件的作用是指示构建系统如何构建二进制映像 ...

  9. 如何让你的Apache支持include文件解析和支持shtml的相关配置

    源地址:http://www.itokit.com/2011/0430/65992.html Apache支持include文件解析shtml首先要应该修改Apache配置文件httpd.conf . ...

随机推荐

  1. C# Socket连接 无法访问已释放的对象

    在进行Socket长连接时,若服务器或客户端出现异常时,另外一端对Socket对话进行操作时,程序会出现无法访问已释放的对象的问题.例如客户端出现问题主动断开Socket时,当服务器操作Socket时 ...

  2. Java EE : 二、图解 Cookie(小甜饼)

    目录 Java EE : 一.图解Http协议 Java EE : 二.图解 Cookie(小甜饼) Java EE : 三.图解Session(会话) 概述 一.概述 二.详细介绍Cookie 传输 ...

  3. Vertica并发DML操作性能瓶颈的产生与优化(转)

    文章来源:中国联通网研院网优网管部IT技术研究团队 作者:陆昕 1. 引言 众所周知,MPP数据库以其分布式的超大存储能力以及列式的高速汇总能力,已经成为大数据分析比不可少的工具.Vertica就是这 ...

  4. 权重和层叠规则决定了CSS样式优先级

    一.基本的优先级规则 比较同一级别的个数,数量多的优先级高,如果相同即比较下一级别的个数,至于各级别的优先级如下: important > 内联 > ID > 类 > 标签 | ...

  5. ExtJs 之 ComboBox级联使用

    刚接触ExtJs不到一周,项目使用ExtJs框架,有个版块用到了combobox的级联(两级),遇到了一系列的问题,两天来一直查API.网络资料,终于解决了. 先列出遇到的一系列问题(也许你也遇到过! ...

  6. 项目实际部署记录(ubuntu)

    服务器为Ubuntu系统 安装JDK版本:jdk-7u79-linux-x64.tar.gz 安装tomcat版本:apache-tomcat-7.0.69.tar.gz 数据库oracle ,已导出 ...

  7. cloudfoundry上搭建go服务端

    虽然只有60天试用期,我还是把教程公布一下: 1. 注册一个cloudfoundry账号 https://console.run.pivotal.io/register 2. 安装CLI部署工具包 h ...

  8. dom事件与event对象总结

    1 事件:就是文档或浏览器窗口中发生的一些特定的交互瞬间.    tips:js和xhtml的交互是通过当用户或浏览器操作网页时发生的事件来处理的. 1.1 事件流:即事件的顺序.        事件 ...

  9. IOS开发_中遍历数组的方法及比较

    数组,做为一种常用的数据类型,频繁出现在编码中,其中肯定少不了对数组的遍历,本博文对数组遍历,进行一下自己的归纳,如果是大牛,一笑而过就好,互相学习,欢迎指正. 话不多说直接进入主题 首先创建一个数组 ...

  10. HDU 4941 Magical Forest(2014 Multi-University Training Contest 7)

    思路:将行列离散化,那么就可以用vector 存下10W个点 ,对于交换操作 只需要将行列独立分开标记就行   . r[i] 表示第 i 行存的是 原先的哪行         c[j] 表示 第 j ...