game development and unity practice

145
游游游游游 Unity 游游 初初 v 0.8.0 初初 2013-01-11

Upload: gltop

Post on 16-Dec-2014

2.458 views

Category:

Technology


0 download

DESCRIPTION

游戏开发与Unity实践 - 初阶。 包含内容: 游戏对象模型 游戏资源 3D图形 动画 UI 本地化 屏幕 物理 声音 脚本

TRANSCRIPT

Page 1: Game development and unity practice

游戏开发与 Unity 实践

初阶

v 0 . 8 . 0

更新: 2 0 1 3 - 0 1 - 11

Page 2: Game development and unity practice

更多网 站 : http : / /www.g l top.com

新 浪 微 博 : http : / /weibo.com/g l top

腾 讯 微 博 : http : / / t .qq .com/

g l top_gamedev

QQ 群 : 242500383

Emai l : [email protected]

Page 3: Game development and unity practice

教程说明

概念介绍对游戏开发中的一些概念和基本应用进行简要说明。

Unity 实践在 Uni ty 中的使用方法和注意事项。

Page 4: Game development and unity practice

游戏生产线概要艺术内容制作

艺术内容导出

游戏内容制作

游戏内容构建

游戏内容打包

游戏内容加载

游戏内容表现

Page 5: Game development and unity practice

游戏对象模型游戏开发与 U n i t y 实践

Page 6: Game development and unity practice

游戏对象 (Game Object)

Page 7: Game development and unity practice

游 戏 对 象

介 绍

游戏对象是对场景中物体进行管理的基本单元。 通过游戏对象可对场景中的物体进行定位、查找、访问等操作。

对象有级联关系,对一个对象的操作会影响到其子对象。如,移动一个对象,其子对象也跟随其移动。

Page 8: Game development and unity practice

游 戏 对 象

在 U n i t y 中

游戏对象在” Hierarchy”中管理。 所有的游戏对象及其所引用的资源,会被构建入游戏数据中。

Page 9: Game development and unity practice

游 戏 对 象 – 主 要 属性

在 U n i t y 中

Transformation

物体的位置、旋转、缩放属性。

Parent

其层级关系中的父对象。

Page 10: Game development and unity practice

游 戏 对 象 – 主 要 方法

在 U n i t y 中

Start()

对象被实例化后执行一次。

Update()

对象被激活后,每帧执行。

Page 11: Game development and unity practice

部件( Component )

Page 12: Game development and unity practice

部 件

介 绍

类似于插件概念的模块化的结构 游戏对象需要哪些特性,就把对应的部件挂上去。

如 Collision、 Audio Source、 Light、Material等。

Page 13: Game development and unity practice

部 件

在 U n i t y 中

选中一个 Game Object,从 Component

菜单中可以添加一个所需的 Component

到这个 Game Object上。

Page 14: Game development and unity practice

游戏资源游戏开发与 U n i t y 实践

Page 15: Game development and unity practice

Assets

Page 16: Game development and unity practice

Assets

介 绍

Assets可理解为用于制作、加工游戏所需的各类源数据。

这些数据不会被直接构建入游戏,即这里数据的多少不会对游戏应用的大小有影响。

制作游戏(场景)时需要哪些数据,从Assets中选取、构建。

Page 17: Game development and unity practice

Assets

在 U n i t y 中

Asset在“ Project”中管理。 将资源文件放置 Asset目录下, Unity回自动检测并将其导入” Project”中。

Page 18: Game development and unity practice

Prefab

Page 19: Game development and unity practice

Prefab

介 绍

Prefab是 Asset的一种。 Prefab相当于游戏对象的模版,对于有相同或者相似特性的游戏对象,可以用Prefab来对其实例化,这样就不用反复的配置其属性。

Page 20: Game development and unity practice

Prefab

在 U n i t y 中

可将Game Object实例直接拖到 Asset中,就会自动生成一个 Prefab。

如果一个对象引用其它对象,被引用的对象又不在 Prefab中,生成 Prefab后引用关系会丢失。

用 Prefab实例化多个游戏对象,如果修改Prefab的属性,这些游戏对象的属性也会跟着改变。

Page 21: Game development and unity practice

数据加载

Page 22: Game development and unity practice

数 据 加 载 – 打 包

介 绍

说明在 Build游戏数据时,应将游戏(编辑期)数据打包,即将零散的数据资源打入一个或多个压缩包中。

目的数据加密。压缩数据,节省应用尺寸。提高加载速度。

Page 23: Game development and unity practice

数 据 加 载 – 序 列 化

介 绍

说明将数据转换为其在运行时内存中的格式,这样数据只需从文件加载入内存即可直接使用,而不用对加载进来得数据进行解析,也不需要用解析出来的数据来逐成员的构造和初始化游戏对象。

目的提高数据加载与游戏初始化速度。

Page 24: Game development and unity practice

数 据 加 载 – 同 步

介 绍

在主线程中一次性的(在一个 loop中)执行完所有加载逻辑。

如果界面也在调用加载操作的线程中,在加载过程中界面将停止更新与响应。

Page 25: Game development and unity practice

数 据 加 载 – 异 步

介 绍

多线程即多线程的加载,不影响其它逻辑的执行,如界面渲染、输入操作等。

“伪”异步自己管理资源加载,即在循环中一次加载一个或者一批资源,保证每个循环 CPU可以执行其他的逻辑。

Page 26: Game development and unity practice

数 据 加 载 - H ierarchy 中 的 资 源

在 U n i t y 中

普通的(即不通过 Resource或WWW)场景资源加载时, Hierarchy中的 Game

Object及其所引用的 Project中的资源会被自动的全部加载进内存。

Page 27: Game development and unity practice

数 据 加 载 - Resources

在 U n i t y 中

Resource目录下所有资源被打成一个包中。

可以有选择的加载数据到内存中。

Page 28: Game development and unity practice

数 据 加 载 - WWW

在 U n i t y 中

可将不同数据打成不同的包,在运行时动态加载。

可从 web上下载并加载包,也可加载本地的包。

Page 29: Game development and unity practice

3D 图形游戏开发与 U n i t y 实践

Page 30: Game development and unity practice

模型( Model )

Page 31: Game development and unity practice

模 型 – 顶 点

介 绍

顶点(位置)信息 (x,y,z)所使用的数据类型决定精度和数据大小。

提示要考虑好场景中模型的最大尺寸和最小尺寸,顶

点数值过小或过大都会引起精度丢失问题。精度丢失可能会引起 Z 闪烁。“大尺寸”数据类型比较占用内存。

Page 32: Game development and unity practice

模 型 – 法 线

介 绍

法线属性可以表现表面方向,影响物体的光影效果。

提示如果某个面的一块很黑,打灯光也无法照亮,可以考虑现在数据中检查一下模型法线。

Page 33: Game development and unity practice

模 型 - UV

介 绍

顶点与贴图的坐标映射。

Page 34: Game development and unity practice

模 型 – 顶 点 色

介 绍

记录顶点的颜色。 通常用于静态光照,也可用于多层贴图混

合。

Page 35: Game development and unity practice

模 型 - Index

介 绍

多边形是有方向的, Index的顺序决定面的方向。

Page 36: Game development and unity practice

模 型 – 备 注

介 绍

顶点的数量直接影响模型精细度和顶点色过渡的细致程度。

(可见的)模型的面的数量对渲染性能有直接影响,对于目前大多数设备( PC、Console、 Pad等),应将其控制在几万到几十万( <30 万)之间。

Page 37: Game development and unity practice

模 型 – 使 用

在 U n i t y 中

将模型文件放置 Asset目录中的某个位置,Unity会自动检测并将其导入到“ Project”中。

Page 38: Game development and unity practice

模 型 – 模 型 文 件

在 U n i t y 中

支持的格式有 fbx, collada, ma等。 FBX - Autodesk的一种数字内容文件格式,

很多数字内容制作工具都支持对这种格式数据的导入、导出。

Unity 支持 Maya文件导入,但需要安装Maya。

Page 39: Game development and unity practice

贴图( Texture )

Page 40: Game development and unity practice

贴 图

介 绍

为游戏中的元素的颜色显示或者运算提供颜色输入。例如,模型表面的图像,用于运算材质的颜色,用户界面上的图像等等。

Page 41: Game development and unity practice

贴 图 – 格 式

介 绍

Tga – 32位,有 8位 Alpha通道。 Png – 压缩格式,有透明色。 Jpg – 压缩格式,无半透。 DXT – 有不同的压缩格式。

Page 42: Game development and unity practice

贴 图 – 尺 寸

介 绍

不同的设备对渲染用贴图的尺寸有所限制。 如某些设备上要求贴图宽高是 2的幂;有些设备将最大尺寸限制到 2048*2048。具体限制请查看文档。

Page 43: Game development and unity practice

贴 图 - Mipmap

介 绍

如果场景有纵深,mipmap可让远处贴图看着不“花”(这是由多个贴图像素投影到同一个屏幕像素上造成的)。

并且可提高渲染性能。

Page 44: Game development and unity practice

贴 图 – 优 化

介 绍

对于 3D游戏,贴图通常都是游戏内存使用大户,所以在贴图的使用上尽量优化的使用。不影响效果的情况下尽量使用尺寸小的格式。只加载需要的贴图。

Page 45: Game development and unity practice

贴 图 – 优 化 举 例

介 绍

可使用 24位色(无半透)的就不要使用 32位色。 可使用压缩格式( 3D物体)的就不要使用非压缩格式。

渲染物体总在同一深度的就不要声称 mipmap。 颜色简单的可使用索引色。

Page 46: Game development and unity practice

贴 图 – 打 包

介 绍

将贴图打包的好处优化内存 – 贴图文件在内存中占用 2的幂宽高的空间,打包后可移除这些空间。

优化性能 - 可节省材质数量(即可优化渲染的提交次数)

优化尺寸 - 减少贴图的总的大小。提高制作效率 - 可统一的对贴图进行格式转换等处理。

Page 47: Game development and unity practice

贴 图

在 U n i t y 中

支持的贴图文件格式Png, tga, jpg, psd…

将贴图复制到 Asset目录,这个贴图就可被导入。

贴图压缩 – 设置贴图的压缩方式可在内存和 CPU 间进行平衡。

Page 48: Game development and unity practice

贴 图 – 打 包

在 U n i t y 中

可选择 Texture Packer对贴图进行打包。

Page 49: Game development and unity practice

材质( Material )

Page 50: Game development and unity practice

材 质

介 绍

作用 为游戏中的模型的“表面”提供属性。例如,颜色或光照的属性

和运算、物理属性、声音属性等等,使用最为广泛的是用于渲染

的材质。

渲染材质的映射模式有 Diffuse

Normal

Specular

Page 51: Game development and unity practice

材 质 – Diff use Map

介 绍

材质的漫反射颜色表示的是在所有方向平均反

射的入射光量。 值 (1,1,1) 表示所有方向可以

反射 100% 的入射光。 Diffuse 映射从各个方

向上看上去都不会有光影变化。漫反射颜色将

只会在受一些无阴影的光照影响时显示,因为

它会缩放入射光照。

Page 52: Game development and unity practice

材 质 – Normal Map

介 绍

法线贴图可以指定每个像素的法线属性,

它可以同时对漫反射和高光光照产生影响。

Page 53: Game development and unity practice

材 质 – Specular Map

介 绍

高光颜色可以表现在某个方向反射的入射光线多少。 高

光反应在您的眼睛与反射的入射光线的方向对齐的时候

是最亮的,所以高光是根据视图进行变化的。

法线也会影响高光,因为它会影响反射的光源方向。 高

光强度可以控制表全面的光泽或光泽程度。 非常高的高

光强度可以表现如镜面一般的表面,而低强度可以表现

比较粗糙的表面。

Page 54: Game development and unity practice

材 质

在 U n i t y 中

Unity中的材质是非 Graph编辑的,只能根据 shader进行属性设置。

如果需要实现特殊的效果,需要写对应的shader文件来支持。

Page 55: Game development and unity practice

摄像机( Camera )

Page 56: Game development and unity practice

摄 像 机

介 绍

透视投影 – 有景深,近大远小,可参考真实照相机的效果。

正交投影 – 无景深,无近大远小的效果,大多用于 2D表现,例如 GUI。

FOV – 镜头广度,也可理解为“近大远小”的程度。

Page 57: Game development and unity practice

摄 像 机

在 U n i t y 中

Projection

投影模式 – 可设置正交投影、透视投影。

Target Texture

可将此摄像机中的内容渲染到一张贴图上。可用于实现画中画、镜面等效果。

Page 58: Game development and unity practice

灯光( Light )

Page 59: Game development and unity practice

灯 光

介 绍

环境光(Ambient Light) 照亮整个场景,无方向(或者说来自四面八方)。

点光源(Point Light) 灯泡的效果。

方向光(Directional Light) 太阳光的效果。

聚光(Spot Light) 舞台上聚光灯的效果。

Page 60: Game development and unity practice

灯 光 – 备 注

介 绍

尽量减少同时激活的动态光源的数量以提高渲染性能。

Page 61: Game development and unity practice

灯 光

在 U n i t y 中

Light Component

给对象赋予 Light Component,对象就具有了光照属性

类型可设置 Light Component的类型有

Spot、 Directional、 Point、 Area 光。环境光在“ Edit->Render Settings”中设置。

Page 62: Game development and unity practice

动画游戏开发与 U n i t y 实践

Page 63: Game development and unity practice

帧动画( Frame Animation)

Page 64: Game development and unity practice

帧 动 画

介 绍

帧动画是游戏开发中最主要的一种动画表现方式。 Animation通常是指按照时间变化对某游戏对象及其属性进行的改变。

帧动画可改变的内容可能包括: Transform属性 颜色属性 声音属性等等…

Page 65: Game development and unity practice

帧 动 画 – 应 用

介 绍

物体运动 – 如场景中的机关。 角色动画 – 如骨骼动画。 特效表现 – 如粒子效果。 其它特效 - 如流水、岩浆等。

Page 66: Game development and unity practice

帧 动 画

在 U n i t y 中

Unity有个动画编辑器,点击菜单Window->Animation打开。

选中一个 Game Object后,可对其绑定的动画进行编辑。

Unity动画支持在指定帧处产生回调。

Page 67: Game development and unity practice

UI游戏开发与 U n i t y 实践

Page 68: Game development and unity practice

菜单 / 窗体( Menu/Window)

Page 69: Game development and unity practice

菜 单 / 窗 体

介 绍

控件( Control)可复用的界面上的元素,如按钮、滚动条、下

拉列表等。

事件 / 消息( Event/Message)处理用户的操作,如点击、拖拽等。

Page 70: Game development and unity practice

菜 单 / 窗 体

在 U n i t y 中

NGUI

NGUI是一款为 Unity开发的GUI 库,有完备的Menu/Window 支持。

提供了很多常用的 UI 控件、界面行为、事件响应。

事件模型NGUI提供了一些消息脚本,将所需脚本拖到对应的 UI对象上,就可设置此对象的事件响应。

Page 71: Game development and unity practice

HUD

Page 72: Game development and unity practice

HUD

介 绍

HUD - Head Up Display

屏幕上向用户反馈信息的图形、文字元素。

Page 73: Game development and unity practice

HUD - Sprite

介 绍

HUD的一个重要的元素,其特性有:Transformation – 移动、旋转、缩放。Animation – 可通过播放帧动画来表现 2D 角

色动作。Behavior – 各种行为表现,如淡入、淡出、

翻转、按指定轨迹运动等。

Page 74: Game development and unity practice

HUD

在 U n i t y 中

NGUI

NGUI对 HUD有很好的支持。

行为( Behavior)NGUI中有个名为 Tweening的脚本库,提供

了各种用于控制 UI对象如何动态变化的脚本。

Page 75: Game development and unity practice

HUD – 数 据 生 产 线

在 U n i t y 中

Texture Packer

一款贴图打包工具,可将贴图素材打包。

Atlas maker

生成 Atlas(相当于各类 Sprite的仓库)。

Page 76: Game development and unity practice

字体( Font )

Page 77: Game development and unity practice

字 体 – 矢 量 字 体

介 绍

改变字体大小不影响字体渲染效果。 很多游戏引擎或 GUI并不支持运行时预生成的字体。

Page 78: Game development and unity practice

字 体 – 贴 图 字 体

介 绍

字体样式可自定。 文字内容、颜色可动态改变。 不宜缩放,渲染质量会下降。

Page 79: Game development and unity practice

字 体 – 文 字 贴 图

介 绍

画到贴图上的文字 可高度定制文字的样式。 内容不能动态改变。 适用于游戏中的小量文字使用。

Page 80: Game development and unity practice

字 体 - NGUI

在 U n i t y 中

NGUI 支持贴图字体,可支持描边或阴影效果。

字体的材质 shader要使用 Unlit/

Transparent Colored。

Page 81: Game development and unity practice

字 体 - 矢 量 字 体

在 U n i t y 中

ScaleForm生成支持矢量字体渲染,与Unity的集成正在开发当中。

Unity的 TTF导入是在编辑期预生成字体贴图的。

Page 82: Game development and unity practice

字 体 – 生 产 线

在 U n i t y 中

BMFont

一款字体文件制作工具,支持简单的命令行操作。可导出字体描述文件( fnt)和字体贴图文件。Unity使用字体描述文件要将扩展名由 fnt改成 txt。

Font Maker

NGUI的字体制作工具,生成Unity中可用的数据。

Page 83: Game development and unity practice

本地化游戏开发与 U n i t y 实践

Page 84: Game development and unity practice

文本本地化

Page 85: Game development and unity practice

本 地 化 的 内 容

介 绍

可能需要本地化的内容有文字(也涉及字体)贴图(通常也是为了文字)语音

Page 86: Game development and unity practice

文 本 本 地 化 - 编 辑工 具

介 绍

如果游戏的文字量比较大,就需要工具来辅助管理本地化文字来提高编辑效率。

工具Excel - 很多游戏项目是用 Excel进行字符串本

地化管理。其它独立工具 – 也有一些第三方的本地化编辑工

具。如 POEditor、 poedit等。

Page 87: Game development and unity practice

文 本 本 地 化 - 转 换工 具

游戏加载本地化信息需要一种比较容易解析的文件格式,通常就需要有工具将本地化文本数据进行格式转换。

Page 88: Game development and unity practice

文 本 本 地 化 – 文 本提 取 工 具

对于有的项目,游戏中可能有大量的文本信息,并且在开发过程中文本信息经常变动,这就需要有工具能将代码中的文本提取出来合并到文本本地化信息库中去。

此类工具有 xgettext等。

Page 89: Game development and unity practice

文 本 本 地 化

在 U n i t y 中

NGUI 支持 Label的本地化,但不方便大量文本的本地化编辑。

第三方资源TextManager类 – 可加载、解析 po格式的本

地化文件。

Page 90: Game development and unity practice

字体本地化

Page 91: Game development and unity practice

文 本 本 地 化 – 贴 图字 体

介 绍

启动游戏时,根据语言确定资源所在路径。 如果游戏内的文字量比较大,对于像中文、

日文等语言,字体贴图的数据量会比较大。

Page 92: Game development and unity practice

文 本 本 地 化 – 矢 量字 体

介 绍

可使用矢量字库来使游戏支持某语言的字体。

如果使用的文字量很少,使用字库反而会增加应用的尺寸。

注,不是所有引擎都支持运行时矢量字体渲染。

Page 93: Game development and unity practice

文 本 本 地 化

在 U n i t y 中

第三方资源TextManager – 可加载、解析 po格式的本地化文件。

Page 94: Game development and unity practice

屏幕游戏开发与 U n i t y 实践

Page 95: Game development and unity practice

多分辨率支持

Page 96: Game development and unity practice

多 分 辨 率 支 持 – 适配 策 略

介 绍

完全缩放 画面会被拉伸。

高度、宽度适配(等比) 两侧或上下会留空或者超出屏幕。这种情况下就要考虑

画面的安全区。

完全适配(等比) 根据计算结果决定是高度还是宽度适配,使得画面内容完全在屏幕内。这种情况只会在两侧或上下留空。

Page 97: Game development and unity practice

多 分 辨 率 支 持 – 安 全区

介 绍

对于高度或宽度适配的模式,在不同分辨率的设备上能显示出来的区域会有不同,这样在设计的时候就要确定好最小可视区域,制作时要将必须显示和响应的内容制作到这个区域中。

Page 98: Game development and unity practice

多 分 辨 率 支 持 – 适配

在 U n i t y 中

Unity没有设置项直接设置屏幕适配,需要写脚本来实现。

如果使用的是 NGUI,可根据情况设置UIRoot上的Manual Height的值。

Page 99: Game development and unity practice

素材适配

Page 100: Game development and unity practice

素 材 适 配

介 绍

目前的移动设备分辨率差异很大,内存资源也有差异。大多情况下,内存资源的大小跟分辨率的大小有一定的关系,所以为了节省内存使用,可能需要根据分辨率(或者 dpi)区分开贴图资源的加载。比如,大分辨率用大贴图,小分辨率用小贴图。运行时根据设备情况加载不同的资源。

Page 101: Game development and unity practice

素 材 适 配 – 动 态 切换

在 U n i t y 中

NGUI可以在运行时切换 Atlas。 但这种方法会使内存的高峰值会较高。 建议编辑时默认使用低分辨率资源,运行时按照需要替换成高分辨率资源。

可改进生产线,编译前去掉关联,遍以后恢复关联。

Page 102: Game development and unity practice

物理游戏开发与 U n i t y 实践

Page 103: Game development and unity practice

碰撞( Collision )

Page 104: Game development and unity practice

碰 撞

介 绍

物理材质影响物体间的相互作用,如摩擦力、弹性系数等。

分组(空间分割)预知的不可能相互碰撞的物体置入不同的分组中,碰撞检测时就不用对这两个分组中的物体进行碰撞运算,以节省大量的运算。

Page 105: Game development and unity practice

碰 撞

在 U n i t y 中

给 Game Object添加一个Collision

Component,这个Game Object就具有了(被)碰撞属性。

Unity可绑定的碰撞体有Box、 Sphere、 Capsule、 Mesh、 Wheel、

Terrain

注,Unity中无碰撞分组设置,需要在脚本中实现。

Page 106: Game development and unity practice

刚体( Rigid Body )

Page 107: Game development and unity practice

刚 体 – 特 性

介 绍

质量、速率、力、加速度、旋转。 (参考物理学中关于刚体的说明) 场景的尺寸对物理表现会有影响。

Page 108: Game development and unity practice

刚 体 – 形 状 与 性 能

介 绍

球体 – 性能最高。 立方体、圆柱体、胶囊、轮子 – 性能适中,通过组合可用于略复杂的物理碰撞。

凸多边形 – 可表现任意形状的碰撞体,性能由面数决定,但相对来说性能最低。

Page 109: Game development and unity practice

刚 体 – 碰 撞 检 测 类型

介 绍

有连续碰撞和非连续碰撞检测 如果不是连续碰撞检测,物体速度较快时可能会穿过另一碰撞物体。

Page 110: Game development and unity practice

刚 体

在 U n i t y 中

如果需要一个Game Object 按照物理特性运动,就给这个Game Object 绑定一个RigidBody

Component。 Mass – 质量,影响物体的碰撞效果。 Drag – 阻滞系数,用于表现物体被空气、水等物质阻滞的效果。

Constrains – 给物体某个方向上的约束。

Page 111: Game development and unity practice

刚 体 – Coll ision Detection

在 U n i t y 中

Discrete – 性能高、适合低速运动物体,物体高速运动时可能穿过其它碰撞体。

Continuous – 连续的碰撞检测,保证物体不会穿过其它碰撞体。但性能较低。

Continuous Dynamic – 针对静态网格碰撞器(不带刚体),用于快速移动的物体。

Page 112: Game development and unity practice

声音游戏开发与 U n i t y 实践

Page 113: Game development and unity practice

样本( Sample )

Page 114: Game development and unity practice

样 本 – 格 式

介 绍

格式(音频文件)wav – 支持无压缩。mp3, ogg – 压缩格式。

格式(在内存中)Native – 相对省 CPU,但耗内存。Compress - 相对省内存,但耗 CPU。具体如何选择要看内存和 CPU使用情况而定。

Page 115: Game development and unity practice

样 本 – 加 载 方 式

介 绍

Streaming

省内存、通道数有限;适合游戏音乐、语音对话等长音频。

In memory

性能高、费内存;适合短小的音效。

Page 116: Game development and unity practice

样 本 – 立 体 声 、 单声 道

介 绍

立体声自身有空间感。适合于高质量的 2D 音频播放需求。

单声道自身没有空间感。适合于 3D场景中的音效播放。

Page 117: Game development and unity practice

样 本

在 U n i t y 中

Wav Asset,即AudioClip。 音频格式

Native(WAV) – 省CPU、费内存。 Compressed(MPEG) – 省内存、费CPU。

加载类型 Load into memory – 预先将样本加载到内存中、播放时从内存播放。

Stream from disc – 不加载样本,播放时边缓存边播放。

Page 118: Game development and unity practice

声源( Sound Source )

Page 119: Game development and unity practice

声 源

介 绍

音源,用来播放样本,决定声音播放时的属性。

Page 120: Game development and unity practice

声 源 – 特 性

介 绍

优先级 – 所有设备可以同时播放声音的通道数都是有限的,当同时播放的声音太多时,低优先级的(通常是相对不重要的)声音就会被停止播放。

音量 – 样本在播放时的音量。

Page 121: Game development and unity practice

声 源 – 2D/3D

介 绍

2D 声音跟方位、距离无关。 3D 声音更容易模拟现实 (3D)世界的声音

效果。

Page 122: Game development and unity practice

声 源

在 U n i t y 中

给 Game Object添加 Audio Source

Component,这个 Game Object就有了Sound Source的特性。

可在 Inspector中设置静音(Mute)、 优先级、 音量( Volume)、

音调( Pitch)等。

Page 123: Game development and unity practice

声 源 – 备 注

在 U n i t y 中

同一时刻,一个 Audio Source只播放一个样本。但可用一个 Audio Source去播放不同的 Audio Clip。

Page 124: Game development and unity practice

3D Sound

Page 125: Game development and unity practice

3D Sound

介 绍

方位3D 声音有方向、有位置,玩家在场景中移动、转向时会更身临其境。

速度速度对多普勒效果产生影响。通常用于表现高速运动的发声体。

Page 126: Game development and unity practice

3D Sound – 衰减 曲 线

介 绍

对数衰减 – 声音随着距离的增大,迅速减弱,相对接近现实世界中的声音表现。

线性衰减 – 声音随着距离的增大,均匀的减弱。

自定义衰减曲线

Page 127: Game development and unity practice

3D Sound

在 U n i t y 中

要播放 3D 声音,首先要勾选 Audio Clip的 3D

Sound属性。 注,游戏场景的尺寸设定会直接影响到 3D 声音。

Page 128: Game development and unity practice

3D Sound – 衰减

在 U n i t y 中

可以选择或者自定义声音衰减曲线。

Max Distance 决定衰减曲线中横轴的长度。

Page 129: Game development and unity practice

脚本游戏开发与 U n i t y 实践

Page 130: Game development and unity practice

状态机( State Machine )

Page 131: Game development and unity practice

状 态 机

介 绍

说明状态机是对逻辑的模块化封装,在状态内部执行相应的逻辑,由外界条件触发状态切换。

通常一个状态有:进入、执行、退出三个阶段。

目的划分逻辑模块,理清逻辑关系。

Page 132: Game development and unity practice

状 态 机 – 应 用

介 绍

游戏状态控制 游戏场景切换 角色动画 等…

Page 133: Game development and unity practice

状 态 机 – 实 现

在 U n i t y 中

与 Unreal Engine不同, Unity中没有可视化的状态机编辑功能,需要写 Script来实现。

Page 134: Game development and unity practice

状 态 机 – 参 考

在 U n i t y 中

可以从互联网上找到共享的代码,如 http://wiki.unity3d.com/index.php?title=Finite_State_Machine

http://www.playmedusa.com/blog/2010/12/10/a-finite-state-machine-in-c-

for-unity3d

/

Page 135: Game development and unity practice

通信( Communication )

Page 136: Game development and unity practice

通 信

介 绍

游戏中的各个模块之间需要相互影响,这就需要一种通信机制。

模块间通信有多种形式,不同的通信机制各有利弊:Object reference

Delegate

Message中心

Page 137: Game development and unity practice

通 信 – Object reference

介 绍

引用者依赖于被引用者。 耦合较强。

Page 138: Game development and unity practice

通 信 – Delegate

介 绍

事件接收者与消息发送者建立明确的关联关系。

由于这种关系是靠抽象的接口建立的,所以耦合较弱。

Page 139: Game development and unity practice

通 信 – Message中 心

介 绍

通知者向消息中心发消息,接收者从消息中心取消息。

两个通信模块无耦合关系。

Page 140: Game development and unity practice

通 信 - Delegate

在 U n i t y 中

C# 语言的一个特性。 效率较高

Page 141: Game development and unity practice

通 信 – Object reference

在 U n i t y 中

对于 public的引用, Unity 支持在编辑器中编辑关联关系。

是 Unity开发中的一种常用做法。

Page 142: Game development and unity practice

通 信 – Message - 1

在 U n i t y 中

Unity提供 Message Broadcast。 此方法效率较低。

Page 145: Game development and unity practice

结束

GLTOP游戏开发