Unity 3D的版本控制问题

译林军 李慧爽|2014-02-13 11:21|9231次浏览|Unity(286)移动应用(19)技术开发(9)0

Unity中的源码控制并非和其他开发环境一样简单。我们可以从开发和美术两个角度讲解这个问题。

使用源码控制主要产生两个问题:

1.Unity中的文件默认存储为二进制。

大多数的开放源码的版本控制解决方案无法处理二进制文件。你可以在系统中存储二进制文件,但无法将他们合并。Diffs也无法和大多数源码控制系统一起运行。这意味着,如果两个开发人员更改了相同的场景或预制,就更不可能将两个版本合并了。你只能删除一个版本或者重新设定另一个版本的变化。

2.巨大的数据量

Unity中的项目往往因为如纹理,声音等二进制文件而变得过大。像Git这样的远程版本控制系统,在网络上同步数据量是相当耗时的。此外,因为在大多数系统中都不能正确存储有二进制数据的diffs文件,每一个变化都是分开存储的。这样一来,存储库的大小急剧增加。

使用Git的版本/源码控制

第一步是在Unity中把元文件,预制和场景存储为文本文件。

需要更改两处设置。

Edit→Project Settings→Editor:

Set Version Control Mode to“Meta Files” Set Asset Serialization Mode to“Force Text”

这是在Unity中把所有元文件,预制和场景存储为文本文件。

序列化的预制结构看起来是这样:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

YAML 1.1

%TAG !u! tag:unity3d.com,2011:

— !u!1 &100000

GameObject:

m_ObjectHideFlags: 0

m_PrefabParentObject: {fileID: 0}

m_PrefabInternal: {fileID: 100100000}

serializedVersion: 4

m_Component:

– 4: {fileID: 400000}

– 33: {fileID: 3300000}

– 65: {fileID: 6500000}

– 23: {fileID: 2300000}

m_Layer: 0

m_Name: prefab_cube

m_TagString: Untagged

m_Icon: {fileID: 0}

m_NavMeshLayer: 0

m_StaticEditorFlags: 0

m_IsActive: 1

这个结构包含对象及其属性作为一对键和值。

现在,如果有人更改项目,不同版本可能会自动合并(或者手动合并,因为该结构是可读格式)。

那么,版本需要什么呢?

Unity的项目结构是这样的:


1

2

3

4

5

<ProjectRoot>

—| Assets

—| Library

—| Project Settings

—| Temp

在源码控制中不需要Temp文件夹,所以我们可以忽略它。

Library文件夹包含数据的信息,存储在Assets文件夹中。我们也可以忽略它。

我们使用在项目的根目录中的.gitignore文件,让git忽略这些目录。

该文件是一个简单的文本文件(没有扩展名),包含以下内容:


1

2

/Library

/Temp

Assets

我们现在还不确定如何最好地把像assets这样的二进制文件归入到源码控制方案中。

令人欣慰的是,我们已经把项目工作拆分成系统开发和美术两方面。

至于git,我们把Assets文件夹中包含的大多数元素删除掉。我们使用一个子目录,虽然它包含了被称之为“GameSystem”的测试室场景,脚本和预制。

所有其他assets如纹理,模型,声音等放入Assets文件夹中另一个子文件夹中。我们称之“GameAssets”。 从AssetStore中获取的Assets也放置在Assets文件夹中,但不同步这些assets。

在Asset文件夹中的.gitignore文件是这样的:


1

2

3

/**

!/GameSystem

!/.gitignore

在Assets文件夹中,我们把git中的一切都删除,除了GameSystem文件夹和.gitignore文件夹。

这样,我们将删除版本控制中像艺术资产这样的大数据块,也删除assetstore中的数据包。

我们仍然试图找出如何最好地处理在源码控制环境中的资产文件。

欢迎大家一起分享你们的开发使用心得!

原文链接:http://www.bitsalive.com/unity-3d-and-version-control/

Unity 3D的版本控制问题

时间: 2024-10-09 20:22:57

Unity 3D的版本控制问题的相关文章

【Unity 3D】学习笔记二十八:unity工具类

unity为开发者提供了很多方便开发的工具,他们都是由系统封装的一些功能和方法.比如说:实现时间的time类,获取随机数的Random.Range( )方法等等. 时间类 time类,主要用来获取当前的系统时间. using UnityEngine; using System.Collections; public class Script_04_13 : MonoBehaviour { void OnGUI() { GUILayout.Label("当前游戏时间:" + Time.t

Unity 3D 实战核心技术详解 书籍出版

经过半年的努力,处女作<Unity 3D 实战核心技术详解>终于问世了,购买网址: http://www.broadview.com.cn/article/70 在12月5日到12日期间,在打折的基础上优惠,书籍内容全是干货,购买方式:可以查看网页中的"如何购买".

unity 3d yield 用法总结

最近,需要需要用unity 3d做点东西,但是了碰到了延迟加载问题,我总结余下: Coroutines & Yield是unity3d编程中重要的概念,它可以实现将一段程序延迟执行或者将其各个部分分布在一个时间段内连续执行,但是在Javascript与C#中实现Coroutines & Yield,在语法上却有一些区别: javascript中yield用法很简单,直接yield就行了,或者yield WaitForSeconds (2); c#中的用法如下: yield不可单独使用 需要

Unity 3d中Shader是什么,可以吃吗?

众所周知,Unity3d是一款跨平台非常广的游戏引擎,上手容易,界面友好,集成功能众多,是目前开发手游的主流引擎.本人有幸使用Unity 3d进行开发已一年多时间,已领略了这歀引擎的强大之处. 编写shader也是我工作内容的一部分,先来说说shader是什么吧,我以自己的理解说明一下: 首先 shader是一种语言,一种在GPU,也就是显卡上执行的高级语言.shader的本意是着色器,可以自定义GPU的渲染管线中的两个环节(即顶点和片段).由此,我们可以控制对象在屏幕上的渲染效果,甚至实现一些

【Unity 3D】学习笔记四十二:粒子特效

粒子特效 粒子特效的原理是将若干粒子无规则的组合在一起,来模拟火焰,爆炸,水滴,雾气等效果.要使用粒子特效首先要创建,在hierarchy视图中点击create--particle system即可 粒子发射器 粒子发射器是用于设定粒子的发射属性,比如说粒子的大小,数量和速度等.在创建完粒子对象后,在右侧inspector视图中便可以看到所有的粒子属性: emit:是否是使用粒子发射器. min size:粒子最小尺寸. max size:粒子最大尺寸. min energy:粒子的最小生命周期

【图说】Eclipse与Unity 3D协同工作

原地址:http://blog.csdn.net/h570768995/article/details/9355313 Eclipse开发过程中总会碰到很多的难题,如何利用好工具帮助我们更快捷的开发也是一件重要事. 下面介绍Eclipse与Unity 3D协同工作: 1,首先在Unity3D中简单建立一个工程文件 2,好的,接下来点击[File]->[Build setting] 3,然后点击[Build],记好你Build出来的.apk的名字.这时候在工程目录下会出现“temp”文件夹(没有B

【Unity 3D】学习笔记三十四:游戏元素——常用编辑器组件

常用编辑器组件 unity的特色之一就是编辑器可视化,很多常用的功能都可以在编辑器中完成.常用的编辑器可分为两种:原有组件和拓展组件.原有组件是编辑器原生的一些功能,拓展组件是编辑器智商通过脚本拓展的新功能. 摄像机 摄像机是unity最为核心组件之一,游戏界面中显示的一切内容都得需要摄像机来照射才能显示.摄像机组件的参数如下: clear flags:背景显示内容,默认的是skybox.前提是必须在render settings 中设置天空盒子材质. background:背景显示颜色,如果没

【Unity 3D】学习笔记二十六:unity游戏脚本(六)

在3D游戏世界中,任何一个游戏对象在创建的时候都会附带Transform(变换)组件,并且该组件是无法删除的,也不应该删除.在unity中,Transform面板一共有3个属性: Position  (位置) Rotation(旋转) Scale(缩放) 这三个值都是用来调整游戏对象在游戏界面中的位置,状态等相关参数. Position  (位置) 任何一个游戏对象的三维坐标都保存在Vector3容器中,该容器记录对象在X轴,Y轴,Z轴的坐标.一旦Vector33容器中的坐标发生变化,那么Sce

C#程序员整理的Unity 3D笔记(十三):Unity 3D基于组件的思想

如果你接触过<设计模式>.软件架构的编程思想,就会知道优秀的设计准则:"组合优于继承的". 这句话很简短,但开始学习OOP的时候,真切的是--不太好理解(以我个人当初学习为例). OOP的继承思想 在设计主角(Player)的时候,为了能够复用A.B.C的功能,我开始把A.B.C按照继承来写,多了一些Virutal\Override\Protected等修饰符,功能没有任何问题,就是有些别扭.如Start.Update方法,只能在A中采用模板方法处理,万一B.C.Playe