译林军 李慧爽|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的版本控制问题的更多相关文章

  1. unity 3d开发的大型网络游戏

    unity 3d开发的大型网络游戏 一.总结 1.unity的官网上面应该有游戏列表 2.unity3D是很好的3d游戏引擎,也支持2d,也能做很多画面精良的3A级游戏 3.范围:电脑游戏,手机游戏, ...

  2. Circular progress bar in Unity 3D

    Circular progress bar in Unity 3D - UnityScripthttp://stackoverflow.com/questions/22662706/circular- ...

  3. Unity 3D 游戏上线之后的流水总结

    原地址:http://tieba.baidu.com/p/2817057297?pn=1 首先.unity 灯光烘焙 :Unity 3D FBX模型导入.选项Model 不导入资源球.Rig 不导入骨 ...

  4. C#程序员整理的Unity 3D笔记(十五):Unity 3D UI控件至尊–NGUI

    目前,UGUI问世不过半年(其随着Unity 4.6发布问世),而市面上商用的产品,UI控件的至尊为NGUI:影响力和广度(可搜索公司招聘Unity 3D,常常能看到对NGUI关键词). NGUI虽然 ...

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

    如果你接触过<设计模式>.软件架构的编程思想,就会知道优秀的设计准则:“组合优于继承的”. 这句话很简短,但开始学习OOP的时候,真切的是—-不太好理解(以我个人当初学习为例). OOP的 ...

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

    原地址:http://blog.csdn.net/h570768995/article/details/9355313 Eclipse开发过程中总会碰到很多的难题,如何利用好工具帮助我们更快捷的开发也 ...

  7. C#程序员整理的Unity 3D笔记(十):Unity3D的位移、旋转的3D数学模型

    遇到一个想做的功能,但是实现不了,核心原因是因为对U3D的3D数学概念没有灵活吃透.故再次系统学习之—第三次学习3D数学. 本次,希望实现的功能很简单: 如在小地图中,希望可以动态画出Player当前 ...

  8. 再议Unity 3D

    一年前,偶发冲动,翻译了<[译] Unity3D游戏和facebook绑定(1:简介)>系列文章. 现在看有2个明显的好处, 一:给这个不温不火的博客带了top 3的人气: 二:我个人由此 ...

  9. [Unity 3D] Unity 3D 里的碰撞检测

    Unity 3D里两个碰撞体之间发生碰撞可以用OnCollision族函数和OnTrigger族函数来获知和处理.Unity官方给出了两张可发生碰撞的组合表: Collision detection ...

随机推荐

  1. K近邻算法(一)

    K 近邻算法思想: 寻找该点周围最近的K个点.根据这K 个点的类别来判断该点的类别: 核心: 数据归一化.(在必要的时候必须进行数据归一化处理,防止某一特征在计算数据时占比较重) 计算欧拉距离 . 使 ...

  2. [NOI2012]随机数生成器【矩阵快速幂】

    NOI2012 随机数生成器 题目描述 栋栋最近迷上了随机算法,而随机数是生成随机算法的基础.栋栋准备使用线性同余法(Linear Congruential Method)来生成一个随机数列,这种方法 ...

  3. 【HEOI2015】公约数数列 题解(分块)

    前言:毒瘤数据结构题,半个下午都在搞它了…… --------------------------- 题目链接 题目大意:给定一个长度为$n$的序列,有两种操作:1.把$a_x$的值改成$y$.2.求 ...

  4. Redis服务之高可用组件sentinel

    前文我们了解了redis的常用数据类型相关命令的使用和说明,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13419690.html:今天我们来聊一下redis ...

  5. echarts全国疫情统计可视化地图(第一阶段)

    DBUtil.java package com.helloechart; import java.sql.Connection; import java.sql.DriverManager; impo ...

  6. 13、Visitor 访问者模式 访问数据结构并处理数据 行为型设计模式

    1.模式的定义与特点 访问者(Visitor)模式的定义:将作用于某种数据结构中的各元素的操作分离出来封装成独立的类,使其在不改变数据结构的前提下可以添加作用于这些元素的新的操作,为数据结构中的每个元 ...

  7. Kubernetes 使用arthas进行调试

    环境 因为k8s中是最基本的jre,网上说缺少tools.jar,但是补充了以后还是不行,最后还是将整个jdk给移到容器中的. jre中执行: /home # /opt/jre/bin/java -j ...

  8. 2020-04-06:为什么HashMap不一直使用红黑树?

    红黑树的阈值是8,当链表大于等于8时链表变成了红黑树结构,大大减少了查找的时间. 当长度低于6时会由红黑树转成链表,TreeNodes占用空间是普通Nodes的两倍,所以只有当bin包含足够多的节点时 ...

  9. 【译】gRPC-Web for .NET now available

    .NET 的 gRPC-Web 现在正式发布了.我们在一月份发布了实验版,从那时起,我们就根据早期的用户反馈进行着改进. 有了这个版本,gRPC-Web 就变成了 grpc-dotnet 项目的一个完 ...

  10. leetcode 877. Stone Game 详解 -——动态规划

    原博客地址 https://blog.csdn.net/androidchanhao/article/details/81271077 题目链接 https://leetcode.com/proble ...