zoukankan      html  css  js  c++  java
  • unity文件解析以及版本控制

           刚开始使用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中使用的资源,略过

  • 相关阅读:
    UWP 应用获取各类系统、用户信息 (1)
    Windows Composition API 指南
    详解 UWP (通用 Windows 平台) 中的两种 HttpClient API
    Win2D 官方文章系列翻译
    Spring的IOC容器, AOP切面及启动流程简述
    maven和gradle的全局阿里云镜像代理
    SpringBoot项目中@Async方法没有执行的问题分析
    Oracle向MySQL迁移的注意点整理
    SpringBoot项目替换内部的依赖jar包
    MySQL的主从复制
  • 原文地址:https://www.cnblogs.com/sytfyf/p/6206544.html
Copyright © 2011-2022 走看看