Unity 3D的版本控制问题
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中的数据包。
我们仍然试图找出如何最好地处理在源码控制环境中的资产文件。
欢迎大家一起分享你们的开发使用心得!
Unity 3D的版本控制问题的更多相关文章
- unity 3d开发的大型网络游戏
unity 3d开发的大型网络游戏 一.总结 1.unity的官网上面应该有游戏列表 2.unity3D是很好的3d游戏引擎,也支持2d,也能做很多画面精良的3A级游戏 3.范围:电脑游戏,手机游戏, ...
- Circular progress bar in Unity 3D
Circular progress bar in Unity 3D - UnityScripthttp://stackoverflow.com/questions/22662706/circular- ...
- Unity 3D 游戏上线之后的流水总结
原地址:http://tieba.baidu.com/p/2817057297?pn=1 首先.unity 灯光烘焙 :Unity 3D FBX模型导入.选项Model 不导入资源球.Rig 不导入骨 ...
- C#程序员整理的Unity 3D笔记(十五):Unity 3D UI控件至尊–NGUI
目前,UGUI问世不过半年(其随着Unity 4.6发布问世),而市面上商用的产品,UI控件的至尊为NGUI:影响力和广度(可搜索公司招聘Unity 3D,常常能看到对NGUI关键词). NGUI虽然 ...
- C#程序员整理的Unity 3D笔记(十三):Unity 3D基于组件的思想
如果你接触过<设计模式>.软件架构的编程思想,就会知道优秀的设计准则:“组合优于继承的”. 这句话很简短,但开始学习OOP的时候,真切的是—-不太好理解(以我个人当初学习为例). OOP的 ...
- 【图说】Eclipse与Unity 3D协同工作
原地址:http://blog.csdn.net/h570768995/article/details/9355313 Eclipse开发过程中总会碰到很多的难题,如何利用好工具帮助我们更快捷的开发也 ...
- C#程序员整理的Unity 3D笔记(十):Unity3D的位移、旋转的3D数学模型
遇到一个想做的功能,但是实现不了,核心原因是因为对U3D的3D数学概念没有灵活吃透.故再次系统学习之—第三次学习3D数学. 本次,希望实现的功能很简单: 如在小地图中,希望可以动态画出Player当前 ...
- 再议Unity 3D
一年前,偶发冲动,翻译了<[译] Unity3D游戏和facebook绑定(1:简介)>系列文章. 现在看有2个明显的好处, 一:给这个不温不火的博客带了top 3的人气: 二:我个人由此 ...
- [Unity 3D] Unity 3D 里的碰撞检测
Unity 3D里两个碰撞体之间发生碰撞可以用OnCollision族函数和OnTrigger族函数来获知和处理.Unity官方给出了两张可发生碰撞的组合表: Collision detection ...
随机推荐
- [COCOS2DX-LUA]0-006.cocos2dx中关于拖动屏幕物件,同时点击home键,返回后页面变黑的问题。
基本信息介绍: 引擎框架: Quick-Cocos2dx-Community-3.6 测试机型: 魅族MX5 问题简介: 有拖动效果的物件,在拖动的工程中,手指不放,同时点击home键退到后台. 再返 ...
- c语言学习笔记之结构体存储
今天讲讲结构体存储问题 首先,结构体简单说是对不同类型的封装,一开始我们可能会想结构体在内存中的存储的大小是直接元素的和 例如 我们可能会觉得是 结构体大小=int(4个字节)+ short(2个字节 ...
- Vue组件注册
全局注册方法 Vue.component('my-component-name', { // ... 选项 ... }) Vue.component('component-a', { /* ... * ...
- Linux下安装pgadmin,并外部访问
环境: Centos 7 .已经安装的postgresql11,具体安装可以查看https://www.cnblogs.com/whitebai/p/12122240.html 1.下载阿里的 rep ...
- neo4j批量导入数据的两种解决方案
neo4j批量导入数据有两种方法,第一种是使用cypher语法中的LOAD CSV,第二种是使用neo4j自带的工具neo4j-admin import. LOAD CSV 导入的文件必须是csv文件 ...
- Go热门开源项目大全
监控系统 项目 简介 Star数 grafana/grafana Grafana 是一个用于监控指标分析和图表展示的工具, 后端支持 Graphite, InfluxDB & Promethe ...
- Java的注解浅析
人的一生就像一篇文章,只有经过多次精心修改,才能不断完善 Java注解概念理解: Java注解又称为Java标注,是JDK5引入的一中注释机制,Java中大家熟悉的五种注解分别是:@Override, ...
- 收集整理element-ui 表格组件的常用操作方法
一.简单的表格行内编辑效果 原理是通过Css控制绑定的输入控件与显示值,在选中行样式下对控件进行隐藏或显示. 1.注意下样式的设置 2.change事件 @change="handleEdi ...
- SpringBoot ---yml 整合 Druid(1.1.23) 数据源
SpringBoot ---yml 整合 Druid(1.1.23) 数据源 搜了一下,网络上有在配置类写 @Bean 配置的,也有 yml 配置的. 笔者尝试过用配置类配置 @Bean 的方法,结果 ...
- Java引用类型之软引用(2)
下面接着上一篇介绍第2阶段和第3阶段的处理逻辑. 2.process_phase2() 第2个阶段移除所有的referent还存活的Reference,也就是从refs_list中移除Referenc ...