关于这些技巧
这些技巧并不是适用于每一个项目。
1.基于我的经验它们适用于3到20人的小团队。
2.一些结构性,重用性,清晰度等等上的技巧使用需要付出性能上的开销代价,根据你团队和项目的大小来决定是否需要付出这些开销代价。
3.许多技巧的选择可能会有自己不同的喜好(它们可能有对比,但是这里列出来的都是可用的好技术)
4.一些技巧可能和unity官方提倡的用法大相径庭。例如,规模化的使用预设相对于使用实例来说是Unity官方不提倡的,开销的代价非常大(使用大量预设的时候)。然而我看到这些技巧能够带来很好的结果,即使它们看起来很疯狂。
今天将给大家介绍前5个技巧,一共50个,Are you ready?
进程
1.避免资源分支。任何之源都应该只能有一个版本。如果你一定需要分支预设,场景或者网格,那就遵循一个清晰的进程已确定正确版本。“错误”分支都有个扯淡的名字,例如,使用双下划线作为前缀:__MainScene_Backup.预设分支需要一个特定的流程保证它们使用的安全(请看下面的预设部分)。
2.每个团队成员都应该拷贝一份工程出来当做测试使用如果你们使用项目版本控制。工程有更改时,这份清晰的拷贝工程要及时更新测试。没人应该去更改清理的拷贝工程。这对解决丢失资源非常有用。
3.考虑使用外部关卡编辑器来编辑关卡。Unity不是一个完美的关卡编辑器。例如,我们使用TuDee来创建关卡编辑,这受益于我们使用tile-friendly工具(拍摄网格,多个90度的旋转,2D视角)。直接从XML文件初始化预设。关于 Guerrilla Tool Development的更多信息请访问原文。
4.考虑把关卡信息储存在XML文件中而不是在场景里。这是个很棒的技巧:
1.这样可以避免在每个场景都重构数据。
2.这样加载更快(如果大多数场景对象之间共享)。
3.这样更容易合并场景(即使使用Unity新特征中的基于文本的场景,无论如何仍然有大量的数据在融合时不好实行)。
4.这样更容易追踪跨级别的数据。
你仍然可以把Unity当做关卡编辑器使用(尽管你不需要。)你需要写一些代码序列化和反序列化你的数据,在游戏编辑和启动的时候加载关卡数据,并在关卡编辑器中储存数据。你可能还需要模仿Unity的ID系统来维护对象之间的引用。
5.考虑使用泛型定义检查器代码。编写自定义检查器十分简单,但是Unity的系统有许多弊端:
1.不支持利用继承。
2.不支持定义一个字段类型的检查器组件,只支持类类型。例如,如果每个游戏对象都有一个字段类型SomeCoolType,你想让它在检查器面板中不同的显示,你就必须在你的所在类里写检查器。
你可以从底层重新实现检查器系统来解决这个问题。使用反射的一些小窍门,这并没有看起来那么困难,细节在文章的最后章节有提供。
组织场景
6.使用命名为空的游戏物体作为场景文件夹。仔细组织你的场景便于更容易地查找相关对象。
7.把相关预设和场景文件(empty game objects)放在(0, 0,0)点。如果一个transform不是专门用来确定物体的位置,那么应该把它放到远点。那样可以在处理当前和世界坐标系的问题时少出问题,而且代码十分简单。
8.减少使用有偏移量的GUI组件。偏移量只应该在父容器里布局组件时使用;不应该让它们依靠祖父类来定位。偏移量不应该取消正确的相互显示。它基本上时为了防止类似以下这种情况:父容器任意定位到(100,-50)。子类,应该定位在(10,10),然后相对于父容器来说就定位在(90, 60)。当容器不可见或者无可视化表示的时候这种错误很容易出现。
9.把你的世界场景地板坐标 y值设为0。这样把对象放到场景地板上时会更加简单,游戏逻辑,AI和物理特性可以把它们当做2D场景世界来处理。
10.运行游戏的每个场景。这大大的减少了测试时间,让所有的场景都运行你需要做两件事:首先,提供一种方法来模拟之前需要加载的不可用的场景数据。其次,对象的产生必须保持在场景加载中,看一下代码:
myObject = FindMyObjectInScene();
if(myObjet ==null){
myObject = SpawnMyObject();
}
11.把角色和站立对象的基准点放在底部,而不是中间。这样更容易把角色和对象精确地放到场景层上。也更容易在游戏逻辑、AI甚至物理特性上适当的当做2D方式来处理。
12.让所有网格的朝向保持一致(Z轴正向或负方向)。这适用于类似角色和其他有朝向概念的对象网格。如果所有物体的方向保持一致可以简化算法。
13.一开始把scale属性设置好。可以把它们的缩放因子scalefactor设置为1,然后把transforms的缩放设置为1,1,1。使用一个对象引用(比如一个立方体)可以让缩放比较更容易。
14.做一个plane 用作GUI组件或手动创建粒子。让plane面向Z轴正向可以更简单的使用公告牌属性、更便捷地生成GUI。
15.制作和测试美术资源
1.给场景加入天空盒。
2.网格。
3.各种纯色的shader测试:白色,黑色,50%的灰色,红色,绿色,蓝色,洋红色,黄色,青色。
4.渐变色的shader测试:黑到白,红到绿,红到蓝,绿到蓝。
5.白色和黑色的调色盘。
6.平滑和粗糙的标准贴图。
7.测试场景的光照快速设置。
你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。
我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:
撤销:Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + B
斜体:Ctrl/Command + I
标题:Ctrl/Command + Shift + H
无序列表:Ctrl/Command + Shift + U
有序列表:Ctrl/Command + Shift + O
检查列表:Ctrl/Command + Shift + C
插入代码:Ctrl/Command + Shift + K
插入链接:Ctrl/Command + Shift + L
插入图片:Ctrl/Command + Shift + G
查找:Ctrl/Command + F
替换:Ctrl/Command + G
直接输入1次#,并按下space后,将生成1级标题。
输入2次#,并按下space后,将生成2级标题。
以此类推,我们支持6级标题。有助于使用TOC
语法后生成一个完美的目录。
强调文本 强调文本
加粗文本 加粗文本
标记文本
删除文本
引用文本
H2O is是液体。
210 运算结果是 1024.
链接: link.
图片:
带尺寸的图片:
居中的图片:
居中并且带尺寸的图片:
当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。
去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片
.
// An highlighted block
var foo = 'bar';
一个简单的表格是这么创建的:
项目 | Value |
---|---|
电脑 | $1600 |
手机 | $12 |
导管 | $1 |
使用:---------:
居中
使用:----------
居左
使用----------:
居右
第一列 | 第二列 | 第三列 |
---|---|---|
第一列文本居中 | 第二列文本居右 | 第三列文本居左 |
SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:
TYPE | ASCII | HTML |
---|---|---|
Single backticks | 'Isn't this fun?' |
‘Isn’t this fun?’ |
Quotes | "Isn't this fun?" |
“Isn’t this fun?” |
Dashes | -- is en-dash, --- is em-dash |
– is en-dash, — is em-dash |
一个具有注脚的文本。2
Markdown将文本转换为 HTML。
您可以使用渲染LaTeX数学表达式 KaTeX:
Gamma公式展示 Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb N Γ(n)=(n−1)!∀n∈N 是通过欧拉积分
Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=∫0∞tz−1e−tdt.
你可以找到更多关于的信息 LaTeX 数学表达式here.
可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图:
这将产生一个流程图。:
我们依旧会支持flowchart的流程图:
如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。
如果你想加载一篇你写过的.md文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。
mermaid语法说明 ↩︎
注脚的解释 ↩︎