0
初阶              v 0.8.0 更 新 : 2 0 1 3 - 0 1 - 11
教程说明   概念介 绍     对游戏开发中的一些概念和基本应用进     行简要说明。   Uni ty 实践     在Unity中的使用方法和注意事项。
游戏生产线概要艺术内容制作   艺术内容导出   游戏内容制作游戏内容构建   游戏内容打包   游戏内容加载游戏内容表现
游戏开发与Unity实践
游戏对象(Game Object)
介绍游戏对象   游戏对象是对场景中物体进行管理的基本单    元。   通过游戏对象可对场景中的物体进行定位、    查找、访问等操作。   对象有级联关系,对一个对象的操作会影响    到其子对象。如,移动一个对象,其子对象    也...
在Unity中游戏对象   游戏对象在”Hierarchy”中管理。   所有的游戏对象及其所引用的资源,会被    构建入游戏数据中。
在Unity中游戏对象 – 主要属性   Transformation     物体的位置、旋转、缩放属性。   Parent     其层级关系中的父对象。
在Unity中游戏对象 – 主要方法   Start()     对象被实例化后执行一次。   Update()     对象被激活后,每帧执行。
部件(Component)
介绍部件   类似于插件概念的模块化的结构   游戏对象需要哪些特性,就把对应的部件    挂上去。   如Collision、Audio Source、Light、    Material等。
在Unity中部件   选中一个Game Object,从Component菜    单中可以添加一个所需的Component到这    个Game Object上。
游戏开发与Unity实践
Assets
介绍Assets   Assets可理解为用于制作、加工游戏所需    的各类源数据。   这些数据不会被直接构建入游戏,即这里    数据的多少不会对游戏应用的大小有影响。   制作游戏(场景)时需要哪些数据,从    Assets中选...
在Unity中Assets   Asset在“Project”中管理。   将资源文件放置Asset目录下,Unity回自    动检测并将其导入”Project”中。
Prefab
介绍Prefab   Prefab是Asset的一种。   Prefab相当于游戏对象的模版,对于有相    同或者相似特性的游戏对象,可以用    Prefab来对其实例化,这样就不用反复的    配置其属性。
在Unity中Prefab   可将Game Object实例直接拖到Asset中,就会    自动生成一个Prefab。   如果一个对象引用其它对象,被引用的对象又不    在Prefab中,生成Prefab后引用关系会丢失。   用...
数据加载
介绍数据加载 – 打包   说明     在Build游戏数据时,应将游戏(编辑期)数据打     包,即将零散的数据资源打入一个或多个压缩包中。   目的     数据加密。     压缩数据,节省应用尺寸。     提高加载速度。
介绍数据加载 – 序列化   说明     将数据转换为其在运行时内存中的格式,这样数据     只需从文件加载入内存即可直接使用,而不用对加     载进来得数据进行解析,也不需要用解析出来的数     据来逐成员的构造和初始化游戏对象。...
介绍数据加载 – 同步   在主线程中一次性的(在一个loop中)执    行完所有加载逻辑。   如果界面也在调用加载操作的线程中,在    加载过程中界面将停止更新与响应。
介绍数据加载 – 异步   多线程     即多线程的加载,不影响其它逻辑的执行,如     界面渲染、输入操作等。   “伪”异步     自己管理资源加载,即在循环中一次加载一个     或者一批资源,保证每个循环CPU可以执行其 ...
在Unity中数据加载 -Hierarchy中的资源   普通的(即不通过Resource或WWW)场    景资源加载时,Hierarchy中的Game    Object及其所引用的Project中的资源会被    自动的全部加载进内存。
在Unity中数据加载 -Resources   Resource目录下所有资源被打成一个包    中。   可以有选择的加载数据到内存中。
在Unity中数据加载 - WWW   可将不同数据打成不同的包,在运行时动    态加载。   可从web上下载并加载包,也可加载本地    的包。
游戏开发与Unity实践
模型(Model)
介绍模型 – 顶点   顶点(位置)信息(x,y,z)所使用的数据类型    决定精度和数据大小。   提示     要考虑好场景中模型的最大尺寸和最小尺寸,顶点     数值过小或过大都会引起精度丢失问题。     精度丢失可能会引起...
介绍模型 – 法线   法线属性可以表现表面方向,影响物体的    光影效果。   提示     如果某个面的一块很黑,打灯光也无法照亮,    可以考虑现在数据中检查一下模型法线。
介绍模型 - UV   顶点与贴图的坐标映射。
介绍模型 – 顶点色   记录顶点的颜色。   通常用于静态光照,也可用于多层贴图混    合。
介绍模型 - Index   多边形是有方向的,Index的顺序决定面    的方向。
介绍模型 – 备注   顶点的数量直接影响模型精细度和顶点色    过渡的细致程度。   (可见的)模型的面的数量对渲染性能有    直接影响,对于目前大多数设备(PC、    Console、Pad等),应将其控制在几万    到几十万(...
在Unity中模型 – 使用   将模型文件放置Asset目录中的某个位置,    Unity会自动检测并将其导入到“Project”中。
在Unity中模型 – 模型文件   支持的格式有fbx, collada, ma等。   FBX - Autodesk的一种数字内容文件格式,    很多数字内容制作工具都支持对这种格式    数据的导入、导出。   Unity支持Ma...
贴图(Texture)
介绍贴图   为游戏中的元素的颜色显示或者运算提供    颜色输入。例如,模型表面的图像,用于    运算材质的颜色,用户界面上的图像等等。
介绍贴图 – 格式   Tga – 32位,有8位Alpha通道。   Png – 压缩格式,有透明色。   Jpg – 压缩格式,无半透。   DXT – 有不同的压缩格式。
介绍贴图 – 尺寸   不同的设备对渲染用贴图的尺寸有所限制。   如某些设备上要求贴图宽高是2的幂;有    些设备将最大尺寸限制到2048*2048。具    体限制请查看文档。
介绍贴图 - Mipmap   如果场景有纵深,mipmap可让远处贴图    看着不“花”(这是由多个贴图像素投影到    同一个屏幕像素上造成的)。   并且可提高渲染性能。
介绍贴图 – 优化   对于3D游戏,贴图通常都是游戏内存使    用大户,所以在贴图的使用上尽量优化的    使用。     不影响效果的情况下尽量使用尺寸小的格式。     只加载需要的贴图。
介绍贴图 – 优化举例   可使用24位色(无半透)的就不要使用32位    色。   可使用压缩格式(3D物体)的就不要使用非    压缩格式。   渲染物体总在同一深度的就不要声称mipmap。   颜色简单的可使用索引色。
介绍贴图 – 打包   将贴图打包的好处     优化内存 – 贴图文件在内存中占用2的幂宽高的空     间,打包后可移除这些空间。     优化性能 - 可节省材质数量(即可优化渲染的提交     次数)     优化尺寸 - 减少...
在Unity中贴图   支持的贴图文件格式     Png, tga, jpg, psd…   将贴图复制到Asset目录,这个贴图就可    被导入。   贴图压缩 – 设置贴图的压缩方式可在内存    和CPU间进行平衡。
在Unity中贴图 – 打包   可选择Texture Packer对贴图进行打包。
材质(Material)
介绍材质   作用     为游戏中的模型的“表面”提供属性。例如,颜色或光照的属性和      运算、物理属性、声音属性等等,使用最为广泛的是用于渲染的      材质。   渲染材质的映射模式有     Diffuse     N...
介绍材质 – Diffuse Map   材质的漫反射颜色表示的是在所有方向平均    反射的入射光量。 值 (1,1,1) 表示所有方向    可以反射 100% 的入射光。 Diffuse映射从各    个方向上看上去都不会有光影变化。漫...
介绍材质 – Normal Map   法线贴图可以指定每个像素的法线属性,    它可以同时对漫反射和高光光照产生影响。
介绍材质 – SpecularMap   高光颜色可以表现在某个方向反射的入射光线多少。    高光反应在您的眼睛与反射的入射光线的方向对齐的    时候是最亮的,所以高光是根据视图进行变化的。   法线也会影响高光,因为它会影响反射的光源...
在Unity中材质   Unity中的材质是非Graph编辑的,只能根    据shader进行属性设置。   如果需要实现特殊的效果,需要写对应的    shader文件来支持。
摄像机(Camera)
介绍摄像机   透视投影 – 有景深,近大远小,可参考真    实照相机的效果。   正交投影 – 无景深,无近大远小的效果,    大多用于2D表现,例如GUI。   FOV – 镜头广度,也可理解为“近大远小”    的程度。
在Unity中摄像机   Projection     投影模式 – 可设置正交投影、透视投影。   Target Texture     可将此摄像机中的内容渲染到一张贴图上。     可用于实现画中画、镜面等效果。
灯光(Light)
介绍灯光   环境光(Ambient Light)     照亮整个场景,无方向(或者说来自四面八方)。   点光源(Point Light)     灯泡的效果。   方向光(Directional Light)     太阳光的...
介绍灯光 – 备注   尽量减少同时激活的动态光源的数量以提    高渲染性能。
在Unity中灯光   Light Component     给对象赋予Light Component,对象就具有了光照     属性   类型     可设置Light Component的类型有Spot、     Directio...
游戏开发与Unity实践
帧动画(Frame Animation)
介绍帧动画   帧动画是游戏开发中最主要的一种动画表现方式。   Animation通常是指按照时间变化对某游戏对象    及其属性进行的改变。   帧动画可改变的内容可能包括:     Transform属性     颜色属性   ...
介绍帧动画 – 应用   物体运动 – 如场景中的机关。   角色动画 – 如骨骼动画。   特效表现 – 如粒子效果。   其它特效 - 如流水、岩浆等。
在Unity中帧动画   Unity有个动画编辑器,点击菜单Window-    >Animation打开。   选中一个Game Object后,可对其绑定的    动画进行编辑。   Unity动画支持在指定帧处产生回调。
游戏开发与Unity实践
菜单/窗体(Menu/Window)
介绍菜单/窗体   控件(Control)     可复用的界面上的元素,如按钮、滚动条、下     拉列表等。   事件/消息(Event/Message)     处理用户的操作,如点击、拖拽等。
在Unity中菜单/窗体   NGUI     NGUI是一款为Unity开发的GUI库,有完备的     Menu/Window支持。     提供了很多常用的UI控件、界面行为、事件响应。   事件模型     NGUI提供了一些...
HUD
介绍HUD   HUD - Head Up Display   屏幕上向用户反馈信息的图形、文字元素。
介绍HUD - Sprite   HUD的一个重要的元素,其特性有:     Transformation – 移动、旋转、缩放。     Animation – 可通过播放帧动画来表现2D角色     动作。     Behavior...
在Unity中HUD   NGUI     NGUI对HUD有很好的支持。   行为(Behavior)     NGUI中有个名为Tweening的脚本库,提供了      各种用于控制UI对象如何动态变化的脚本。
在Unity中HUD – 数据生产线   Texture Packer     一款贴图打包工具,可将贴图素材打包。   Atlas maker     生成Atlas(相当于各类Sprite的仓库)。
字体(Font)
介绍字体 – 矢量字体   改变字体大小不影响字体渲染效果。   很多游戏引擎或GUI并不支持运行时预生    成的字体。
介绍字体 – 贴图字体   字体样式可自定。   文字内容、颜色可动态改变。   不宜缩放,渲染质量会下降。
介绍字体 – 文字贴图   画到贴图上的文字   可高度定制文字的样式。   内容不能动态改变。   适用于游戏中的小量文字使用。
在Unity中字体 - NGUI   NGUI支持贴图字体,可支持描边或阴影    效果。   字体的材质shader要使用    Unlit/Transparent Colored。
在Unity中字体 - 矢量字体   ScaleForm生成支持矢量字体渲染,与    Unity的集成正在开发当中。   Unity的TTF导入是在编辑期预生成字体贴    图的。
在Unity中字体 – 生产线   BMFont     一款字体文件制作工具,支持简单的命令行操作。     可导出字体描述文件(fnt)和字体贴图文件。     Unity使用字体描述文件要将扩展名由fnt改成txt。   Fon...
游戏开发与Unity实践
文本本地化
介绍本地化的内容   可能需要本地化的内容有     文字(也涉及字体)     贴图(通常也是为了文字)     语音
介绍文本本地化 - 编辑工具   如果游戏的文字量比较大,就需要工具来辅    助管理本地化文字来提高编辑效率。   工具     Excel - 很多游戏项目是用Excel进行字符串本地化     管理。     其它独立工具 – 也...
文本本地化 - 转换工具   游戏加载本地化信息需要一种比较容易解    析的文件格式,通常就需要有工具将本地    化文本数据进行格式转换。
文本本地化 – 文本提取工具   对于有的项目,游戏中可能有大量的文本信息,    并且在开发过程中文本信息经常变动,这就需要    有工具能将代码中的文本提取出来合并到文本本    地化信息库中去。   此类工具有xgettext等。
在Unity中文本本地化   NGUI支持Label的本地化,但不方便大量    文本的本地化编辑。   第三方资源     TextManager类 – 可加载、解析po格式的本地     化文件。
字体本地化
介绍文本本地化 – 贴图字体   启动游戏时,根据语言确定资源所在路    径。   如果游戏内的文字量比较大,对于像中    文、日文等语言,字体贴图的数据量会比    较大。
介绍文本本地化 – 矢量字体   可使用矢量字库来使游戏支持某语言的字    体。   如果使用的文字量很少,使用字库反而会    增加应用的尺寸。   注,不是所有引擎都支持运行时矢量字体    渲染。
在Unity中文本本地化   第三方资源     TextManager – 可加载、解析po格式的本地化     文件。
游戏开发与Unity实践
多分辨率支持
介绍多分辨率支持 – 适配策略   完全缩放     画面会被拉伸。   高度、宽度适配(等比)     两侧或上下会留空或者超出屏幕。这种情况下就要考虑     画面的安全区。   完全适配(等比)     根据计算结果决定是高度...
介绍多分辨率支持 –安全区   对于高度或宽度适配的模式,在不同分辨    率的设备上能显示出来的区域会有不同,    这样在设计的时候就要确定好最小可视区    域,制作时要将必须显示和响应的内容制    作到这个区域中。
在Unity中多分辨率支持 – 适配   Unity没有设置项直接设置屏幕适配,需    要写脚本来实现。   如果使用的是NGUI,可根据情况设置    UIRoot上的Manual Height的值。
素材适配
介绍素材适配   目前的移动设备分辨率差异很大,内存资源    也有差异。大多情况下,内存资源的大小跟    分辨率的大小有一定的关系,所以为了节省    内存使用,可能需要根据分辨率(或者dpi)    区分开贴图资源的加载。比如,    ...
在Unity中素材适配 – 动态切换   NGUI可以在运行时切换Atlas。   但这种方法会使内存的高峰值会较高。   建议编辑时默认使用低分辨率资源,运行    时按照需要替换成高分辨率资源。   可改进生产线,编译前去掉关联,遍...
游戏开发与Unity实践
碰撞(Collision)
介绍碰撞   物理材质     影响物体间的相互作用,如摩擦力、弹性系数     等。   分组(空间分割)     预知的不可能相互碰撞的物体置入不同的分组     中,碰撞检测时就不用对这两个分组中的物体     进行碰撞运算,以节...
在Unity中碰撞   给Game Object添加一个Collision    Component,这个Game Object就具有了    (被)碰撞属性。   Unity可绑定的碰撞体有     Box、 Sphere、 Capsu...
刚体(Rigid Body)
介绍刚体 – 特性   质量、速率、力、加速度、旋转。   (参考物理学中关于刚体的说明)   场景的尺寸对物理表现会有影响。
介绍刚体 – 形状与性能   球体 – 性能最高。   立方体、圆柱体、胶囊、轮子 – 性能适中,    通过组合可用于略复杂的物理碰撞。   凸多边形 – 可表现任意形状的碰撞体,性    能由面数决定,但相对来说性能最低。
介绍刚体 – 碰撞检测类型   有连续碰撞和非连续碰撞检测   如果不是连续碰撞检测,物体速度较快时    可能会穿过另一碰撞物体。
在Unity中刚体   如果需要一个Game Object按照物理特性运    动,就给这个Game Object绑定一个    RigidBody Component。   Mass – 质量,影响物体的碰撞效果。   Drag – 阻...
在Unity中刚体 – CollisionDetection   Discrete – 性能高、适合低速运动物体,    物体高速运动时可能穿过其它碰撞体。   Continuous – 连续的碰撞检测,保证物体    不会穿过其它碰撞体。...
游戏开发与Unity实践
样本(Sample)
介绍样本 – 格式   格式(音频文件)     wav – 支持无压缩。     mp3, ogg – 压缩格式。   格式(在内存中)     Native – 相对省CPU,但耗内存。     Compress - 相对省内存...
介绍样本 – 加载方式   Streaming     省内存、通道数有限;     适合游戏音乐、语音对话等长音频。   In memory     性能高、费内存;     适合短小的音效。
介绍样本 – 立体声、单声道   立体声     自身有空间感。     适合于高质量的2D音频播放需求。   单声道     自身没有空间感。     适合于3D场景中的音效播放。
在Unity中样本   Wav Asset,即AudioClip。   音频格式     Native(WAV) – 省CPU、费内存。     Compressed(MPEG) – 省内存、费CPU。   加载类型     Loa...
声源(Sound Source)
介绍声源   音源,用来播放样本,决定声音播放时的    属性。
介绍声源 – 特性   优先级 – 所有设备可以同时播放声音的通    道数都是有限的,当同时播放的声音太多    时,低优先级的(通常是相对不重要的)    声音就会被停止播放。   音量 – 样本在播放时的音量。
介绍声源 – 2D/3D   2D声音跟方位、距离无关。   3D声音更容易模拟现实(3D)世界的声音    效果。
在Unity中声源   给Game Object添加Audio Source    Component,这个Game Object就有了    Sound Source的特性。   可在Inspector中设置     静音(Mute)、...
在Unity中声源 – 备注   同一时刻,一个Audio Source只播放一个    样本。但可用一个Audio Source去播放不    同的Audio Clip。
3D Sound
介绍3D Sound   方位     3D声音有方向、有位置,玩家在场景中移    动、转向时会更身临其境。   速度     速度对多普勒效果产生影响。通常用于表现高    速运动的发声体。
介绍3D Sound – 衰减曲线   对数衰减 – 声音随着距离的增大,迅速减    弱,相对接近现实世界中的声音表现。   线性衰减 – 声音随着距离的增大,均匀的    减弱。   自定义衰减曲线
在Unity中3D Sound   要播放3D声音,首先要勾    选Audio Clip的3D Sound    属性。   注,游戏场景的尺寸设定    会直接影响到3D声音。
在Unity中3D Sound – 衰减   可以选择或者自定义声音衰    减曲线。   Max Distance决定衰减曲线    中横轴的长度。
游戏开发与Unity实践
状态机(State Machine)
介绍状态机   说明     状态机是对逻辑的模块化封装,在状态内部执    行相应的逻辑,由外界条件触发状态切换。     通常一个状态有:进入、执行、退出三个阶段。   目的     划分逻辑模块,理清逻辑关系。
介绍状态机 – 应用   游戏状态控制   游戏场景切换   角色动画   等…
在Unity中状态机 – 实现   与Unreal Engine不同,Unity中没有可视    化的状态机编辑功能,需要写Script来实    现。
在Unity中状态机 – 参考   可以从互联网上找到共享的代码,如       http://wiki.unity3d.com/index.php?title=Finite_State_Machine       http://www....
通信(Communication)
介绍通信   游戏中的各个模块之间需要相互影响,这就    需要一种通信机制。   模块间通信有多种形式,不同的通信机制各    有利弊:     Object reference     Delegate     Message中心
介绍通信 – Objectreference   引用者依赖于被引用者。   耦合较强。
介绍通信 – Delegate   事件接收者与消息发送者建立明确的关联    关系。   由于这种关系是靠抽象的接口建立的,所    以耦合较弱。
介绍通信 – Message中心   通知者向消息中心发消息,接收者从消息    中心取消息。   两个通信模块无耦合关系。
在Unity中通信 - Delegate   C#语言的一个特性。   效率较高
在Unity中通信 – Objectreference   对于public的引用,Unity支持在编辑器中    编辑关联关系。   是Unity开发中的一种常用做法。
在Unity中通信 – Message -1   Unity提供Message Broadcast。   此方法效率较低。
在Unity中通信 – Message -2   还可用C#来自定义消息系统。   参考     http://www.unifycommunity.com/wiki/index.ph     p?title=CSharpMessenger
参考   http://www.gltop.com/index.php?q=node/3   http://unity3d.com/support/documentation/   http://forum.unity3d.com/  ...
Game development and unity practice
Game development and unity practice
Upcoming SlideShare
Loading in...5
×

Game development and unity practice

2,542

Published on

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

Published in: Technology
0 Comments
6 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,542
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
76
Comments
0
Likes
6
Embeds 0
No embeds

No notes for slide

Transcript of "Game development and unity practice"

  1. 1. 初阶 v 0.8.0 更 新 : 2 0 1 3 - 0 1 - 11
  2. 2. 教程说明 概念介 绍  对游戏开发中的一些概念和基本应用进 行简要说明。 Uni ty 实践  在Unity中的使用方法和注意事项。
  3. 3. 游戏生产线概要艺术内容制作 艺术内容导出 游戏内容制作游戏内容构建 游戏内容打包 游戏内容加载游戏内容表现
  4. 4. 游戏开发与Unity实践
  5. 5. 游戏对象(Game Object)
  6. 6. 介绍游戏对象 游戏对象是对场景中物体进行管理的基本单 元。 通过游戏对象可对场景中的物体进行定位、 查找、访问等操作。 对象有级联关系,对一个对象的操作会影响 到其子对象。如,移动一个对象,其子对象 也跟随其移动。
  7. 7. 在Unity中游戏对象 游戏对象在”Hierarchy”中管理。 所有的游戏对象及其所引用的资源,会被 构建入游戏数据中。
  8. 8. 在Unity中游戏对象 – 主要属性 Transformation  物体的位置、旋转、缩放属性。 Parent  其层级关系中的父对象。
  9. 9. 在Unity中游戏对象 – 主要方法 Start()  对象被实例化后执行一次。 Update()  对象被激活后,每帧执行。
  10. 10. 部件(Component)
  11. 11. 介绍部件 类似于插件概念的模块化的结构 游戏对象需要哪些特性,就把对应的部件 挂上去。 如Collision、Audio Source、Light、 Material等。
  12. 12. 在Unity中部件 选中一个Game Object,从Component菜 单中可以添加一个所需的Component到这 个Game Object上。
  13. 13. 游戏开发与Unity实践
  14. 14. Assets
  15. 15. 介绍Assets Assets可理解为用于制作、加工游戏所需 的各类源数据。 这些数据不会被直接构建入游戏,即这里 数据的多少不会对游戏应用的大小有影响。 制作游戏(场景)时需要哪些数据,从 Assets中选取、构建。
  16. 16. 在Unity中Assets Asset在“Project”中管理。 将资源文件放置Asset目录下,Unity回自 动检测并将其导入”Project”中。
  17. 17. Prefab
  18. 18. 介绍Prefab Prefab是Asset的一种。 Prefab相当于游戏对象的模版,对于有相 同或者相似特性的游戏对象,可以用 Prefab来对其实例化,这样就不用反复的 配置其属性。
  19. 19. 在Unity中Prefab 可将Game Object实例直接拖到Asset中,就会 自动生成一个Prefab。 如果一个对象引用其它对象,被引用的对象又不 在Prefab中,生成Prefab后引用关系会丢失。 用Prefab实例化多个游戏对象,如果修改Prefab 的属性,这些游戏对象的属性也会跟着改变。
  20. 20. 数据加载
  21. 21. 介绍数据加载 – 打包 说明  在Build游戏数据时,应将游戏(编辑期)数据打 包,即将零散的数据资源打入一个或多个压缩包中。 目的  数据加密。  压缩数据,节省应用尺寸。  提高加载速度。
  22. 22. 介绍数据加载 – 序列化 说明  将数据转换为其在运行时内存中的格式,这样数据 只需从文件加载入内存即可直接使用,而不用对加 载进来得数据进行解析,也不需要用解析出来的数 据来逐成员的构造和初始化游戏对象。 目的  提高数据加载与游戏初始化速度。
  23. 23. 介绍数据加载 – 同步 在主线程中一次性的(在一个loop中)执 行完所有加载逻辑。 如果界面也在调用加载操作的线程中,在 加载过程中界面将停止更新与响应。
  24. 24. 介绍数据加载 – 异步 多线程  即多线程的加载,不影响其它逻辑的执行,如 界面渲染、输入操作等。 “伪”异步  自己管理资源加载,即在循环中一次加载一个 或者一批资源,保证每个循环CPU可以执行其 他的逻辑。
  25. 25. 在Unity中数据加载 -Hierarchy中的资源 普通的(即不通过Resource或WWW)场 景资源加载时,Hierarchy中的Game Object及其所引用的Project中的资源会被 自动的全部加载进内存。
  26. 26. 在Unity中数据加载 -Resources Resource目录下所有资源被打成一个包 中。 可以有选择的加载数据到内存中。
  27. 27. 在Unity中数据加载 - WWW 可将不同数据打成不同的包,在运行时动 态加载。 可从web上下载并加载包,也可加载本地 的包。
  28. 28. 游戏开发与Unity实践
  29. 29. 模型(Model)
  30. 30. 介绍模型 – 顶点 顶点(位置)信息(x,y,z)所使用的数据类型 决定精度和数据大小。 提示  要考虑好场景中模型的最大尺寸和最小尺寸,顶点 数值过小或过大都会引起精度丢失问题。  精度丢失可能会引起Z闪烁。  “大尺寸”数据类型比较占用内存。
  31. 31. 介绍模型 – 法线 法线属性可以表现表面方向,影响物体的 光影效果。 提示  如果某个面的一块很黑,打灯光也无法照亮, 可以考虑现在数据中检查一下模型法线。
  32. 32. 介绍模型 - UV 顶点与贴图的坐标映射。
  33. 33. 介绍模型 – 顶点色 记录顶点的颜色。 通常用于静态光照,也可用于多层贴图混 合。
  34. 34. 介绍模型 - Index 多边形是有方向的,Index的顺序决定面 的方向。
  35. 35. 介绍模型 – 备注 顶点的数量直接影响模型精细度和顶点色 过渡的细致程度。 (可见的)模型的面的数量对渲染性能有 直接影响,对于目前大多数设备(PC、 Console、Pad等),应将其控制在几万 到几十万(<30万)之间。
  36. 36. 在Unity中模型 – 使用 将模型文件放置Asset目录中的某个位置, Unity会自动检测并将其导入到“Project”中。
  37. 37. 在Unity中模型 – 模型文件 支持的格式有fbx, collada, ma等。 FBX - Autodesk的一种数字内容文件格式, 很多数字内容制作工具都支持对这种格式 数据的导入、导出。 Unity支持Maya文件导入,但需要安装 Maya。
  38. 38. 贴图(Texture)
  39. 39. 介绍贴图 为游戏中的元素的颜色显示或者运算提供 颜色输入。例如,模型表面的图像,用于 运算材质的颜色,用户界面上的图像等等。
  40. 40. 介绍贴图 – 格式 Tga – 32位,有8位Alpha通道。 Png – 压缩格式,有透明色。 Jpg – 压缩格式,无半透。 DXT – 有不同的压缩格式。
  41. 41. 介绍贴图 – 尺寸 不同的设备对渲染用贴图的尺寸有所限制。 如某些设备上要求贴图宽高是2的幂;有 些设备将最大尺寸限制到2048*2048。具 体限制请查看文档。
  42. 42. 介绍贴图 - Mipmap 如果场景有纵深,mipmap可让远处贴图 看着不“花”(这是由多个贴图像素投影到 同一个屏幕像素上造成的)。 并且可提高渲染性能。
  43. 43. 介绍贴图 – 优化 对于3D游戏,贴图通常都是游戏内存使 用大户,所以在贴图的使用上尽量优化的 使用。  不影响效果的情况下尽量使用尺寸小的格式。  只加载需要的贴图。
  44. 44. 介绍贴图 – 优化举例 可使用24位色(无半透)的就不要使用32位 色。 可使用压缩格式(3D物体)的就不要使用非 压缩格式。 渲染物体总在同一深度的就不要声称mipmap。 颜色简单的可使用索引色。
  45. 45. 介绍贴图 – 打包 将贴图打包的好处  优化内存 – 贴图文件在内存中占用2的幂宽高的空 间,打包后可移除这些空间。  优化性能 - 可节省材质数量(即可优化渲染的提交 次数)  优化尺寸 - 减少贴图的总的大小。  提高制作效率 - 可统一的对贴图进行格式转换等处 理。
  46. 46. 在Unity中贴图 支持的贴图文件格式  Png, tga, jpg, psd… 将贴图复制到Asset目录,这个贴图就可 被导入。 贴图压缩 – 设置贴图的压缩方式可在内存 和CPU间进行平衡。
  47. 47. 在Unity中贴图 – 打包 可选择Texture Packer对贴图进行打包。
  48. 48. 材质(Material)
  49. 49. 介绍材质 作用  为游戏中的模型的“表面”提供属性。例如,颜色或光照的属性和 运算、物理属性、声音属性等等,使用最为广泛的是用于渲染的 材质。 渲染材质的映射模式有  Diffuse  Normal  Specular
  50. 50. 介绍材质 – Diffuse Map 材质的漫反射颜色表示的是在所有方向平均 反射的入射光量。 值 (1,1,1) 表示所有方向 可以反射 100% 的入射光。 Diffuse映射从各 个方向上看上去都不会有光影变化。漫反射 颜色将只会在受一些无阴影的光照影响时显 示,因为它会缩放入射光照。
  51. 51. 介绍材质 – Normal Map 法线贴图可以指定每个像素的法线属性, 它可以同时对漫反射和高光光照产生影响。
  52. 52. 介绍材质 – SpecularMap 高光颜色可以表现在某个方向反射的入射光线多少。 高光反应在您的眼睛与反射的入射光线的方向对齐的 时候是最亮的,所以高光是根据视图进行变化的。 法线也会影响高光,因为它会影响反射的光源方向。 高光强度可以控制表全面的光泽或光泽程度。 非常 高的高光强度可以表现如镜面一般的表面,而低强度 可以表现比较粗糙的表面。
  53. 53. 在Unity中材质 Unity中的材质是非Graph编辑的,只能根 据shader进行属性设置。 如果需要实现特殊的效果,需要写对应的 shader文件来支持。
  54. 54. 摄像机(Camera)
  55. 55. 介绍摄像机 透视投影 – 有景深,近大远小,可参考真 实照相机的效果。 正交投影 – 无景深,无近大远小的效果, 大多用于2D表现,例如GUI。 FOV – 镜头广度,也可理解为“近大远小” 的程度。
  56. 56. 在Unity中摄像机 Projection  投影模式 – 可设置正交投影、透视投影。 Target Texture  可将此摄像机中的内容渲染到一张贴图上。  可用于实现画中画、镜面等效果。
  57. 57. 灯光(Light)
  58. 58. 介绍灯光 环境光(Ambient Light)  照亮整个场景,无方向(或者说来自四面八方)。 点光源(Point Light)  灯泡的效果。 方向光(Directional Light)  太阳光的效果。 聚光(Spot Light)  舞台上聚光灯的效果。
  59. 59. 介绍灯光 – 备注 尽量减少同时激活的动态光源的数量以提 高渲染性能。
  60. 60. 在Unity中灯光 Light Component  给对象赋予Light Component,对象就具有了光照 属性 类型  可设置Light Component的类型有Spot、 Directional、Point、Area光。  环境光在“Edit->Render Settings”中设置。
  61. 61. 游戏开发与Unity实践
  62. 62. 帧动画(Frame Animation)
  63. 63. 介绍帧动画 帧动画是游戏开发中最主要的一种动画表现方式。 Animation通常是指按照时间变化对某游戏对象 及其属性进行的改变。 帧动画可改变的内容可能包括:  Transform属性  颜色属性  声音属性  等等…
  64. 64. 介绍帧动画 – 应用 物体运动 – 如场景中的机关。 角色动画 – 如骨骼动画。 特效表现 – 如粒子效果。 其它特效 - 如流水、岩浆等。
  65. 65. 在Unity中帧动画 Unity有个动画编辑器,点击菜单Window- >Animation打开。 选中一个Game Object后,可对其绑定的 动画进行编辑。 Unity动画支持在指定帧处产生回调。
  66. 66. 游戏开发与Unity实践
  67. 67. 菜单/窗体(Menu/Window)
  68. 68. 介绍菜单/窗体 控件(Control)  可复用的界面上的元素,如按钮、滚动条、下 拉列表等。 事件/消息(Event/Message)  处理用户的操作,如点击、拖拽等。
  69. 69. 在Unity中菜单/窗体 NGUI  NGUI是一款为Unity开发的GUI库,有完备的 Menu/Window支持。  提供了很多常用的UI控件、界面行为、事件响应。 事件模型  NGUI提供了一些消息脚本,将所需脚本拖到对应 的UI对象上,就可设置此对象的事件响应。
  70. 70. HUD
  71. 71. 介绍HUD HUD - Head Up Display 屏幕上向用户反馈信息的图形、文字元素。
  72. 72. 介绍HUD - Sprite HUD的一个重要的元素,其特性有:  Transformation – 移动、旋转、缩放。  Animation – 可通过播放帧动画来表现2D角色 动作。  Behavior – 各种行为表现,如淡入、淡出、翻 转、按指定轨迹运动等。
  73. 73. 在Unity中HUD NGUI  NGUI对HUD有很好的支持。 行为(Behavior)  NGUI中有个名为Tweening的脚本库,提供了 各种用于控制UI对象如何动态变化的脚本。
  74. 74. 在Unity中HUD – 数据生产线 Texture Packer  一款贴图打包工具,可将贴图素材打包。 Atlas maker  生成Atlas(相当于各类Sprite的仓库)。
  75. 75. 字体(Font)
  76. 76. 介绍字体 – 矢量字体 改变字体大小不影响字体渲染效果。 很多游戏引擎或GUI并不支持运行时预生 成的字体。
  77. 77. 介绍字体 – 贴图字体 字体样式可自定。 文字内容、颜色可动态改变。 不宜缩放,渲染质量会下降。
  78. 78. 介绍字体 – 文字贴图 画到贴图上的文字 可高度定制文字的样式。 内容不能动态改变。 适用于游戏中的小量文字使用。
  79. 79. 在Unity中字体 - NGUI NGUI支持贴图字体,可支持描边或阴影 效果。 字体的材质shader要使用 Unlit/Transparent Colored。
  80. 80. 在Unity中字体 - 矢量字体 ScaleForm生成支持矢量字体渲染,与 Unity的集成正在开发当中。 Unity的TTF导入是在编辑期预生成字体贴 图的。
  81. 81. 在Unity中字体 – 生产线 BMFont  一款字体文件制作工具,支持简单的命令行操作。  可导出字体描述文件(fnt)和字体贴图文件。  Unity使用字体描述文件要将扩展名由fnt改成txt。 Font Maker  NGUI的字体制作工具,生成Unity中可用的数据。
  82. 82. 游戏开发与Unity实践
  83. 83. 文本本地化
  84. 84. 介绍本地化的内容 可能需要本地化的内容有  文字(也涉及字体)  贴图(通常也是为了文字)  语音
  85. 85. 介绍文本本地化 - 编辑工具 如果游戏的文字量比较大,就需要工具来辅 助管理本地化文字来提高编辑效率。 工具  Excel - 很多游戏项目是用Excel进行字符串本地化 管理。  其它独立工具 – 也有一些第三方的本地化编辑工 具。如POEditor、poedit等。
  86. 86. 文本本地化 - 转换工具 游戏加载本地化信息需要一种比较容易解 析的文件格式,通常就需要有工具将本地 化文本数据进行格式转换。
  87. 87. 文本本地化 – 文本提取工具 对于有的项目,游戏中可能有大量的文本信息, 并且在开发过程中文本信息经常变动,这就需要 有工具能将代码中的文本提取出来合并到文本本 地化信息库中去。 此类工具有xgettext等。
  88. 88. 在Unity中文本本地化 NGUI支持Label的本地化,但不方便大量 文本的本地化编辑。 第三方资源  TextManager类 – 可加载、解析po格式的本地 化文件。
  89. 89. 字体本地化
  90. 90. 介绍文本本地化 – 贴图字体 启动游戏时,根据语言确定资源所在路 径。 如果游戏内的文字量比较大,对于像中 文、日文等语言,字体贴图的数据量会比 较大。
  91. 91. 介绍文本本地化 – 矢量字体 可使用矢量字库来使游戏支持某语言的字 体。 如果使用的文字量很少,使用字库反而会 增加应用的尺寸。 注,不是所有引擎都支持运行时矢量字体 渲染。
  92. 92. 在Unity中文本本地化 第三方资源  TextManager – 可加载、解析po格式的本地化 文件。
  93. 93. 游戏开发与Unity实践
  94. 94. 多分辨率支持
  95. 95. 介绍多分辨率支持 – 适配策略 完全缩放  画面会被拉伸。 高度、宽度适配(等比)  两侧或上下会留空或者超出屏幕。这种情况下就要考虑 画面的安全区。 完全适配(等比)  根据计算结果决定是高度还是宽度适配,使得画面内容 完全在屏幕内。这种情况只会在两侧或上下留空。
  96. 96. 介绍多分辨率支持 –安全区 对于高度或宽度适配的模式,在不同分辨 率的设备上能显示出来的区域会有不同, 这样在设计的时候就要确定好最小可视区 域,制作时要将必须显示和响应的内容制 作到这个区域中。
  97. 97. 在Unity中多分辨率支持 – 适配 Unity没有设置项直接设置屏幕适配,需 要写脚本来实现。 如果使用的是NGUI,可根据情况设置 UIRoot上的Manual Height的值。
  98. 98. 素材适配
  99. 99. 介绍素材适配 目前的移动设备分辨率差异很大,内存资源 也有差异。大多情况下,内存资源的大小跟 分辨率的大小有一定的关系,所以为了节省 内存使用,可能需要根据分辨率(或者dpi) 区分开贴图资源的加载。比如,  大分辨率用大贴图,小分辨率用小贴图。运行时根 据设备情况加载不同的资源。
  100. 100. 在Unity中素材适配 – 动态切换 NGUI可以在运行时切换Atlas。 但这种方法会使内存的高峰值会较高。 建议编辑时默认使用低分辨率资源,运行 时按照需要替换成高分辨率资源。 可改进生产线,编译前去掉关联,遍以后 恢复关联。
  101. 101. 游戏开发与Unity实践
  102. 102. 碰撞(Collision)
  103. 103. 介绍碰撞 物理材质  影响物体间的相互作用,如摩擦力、弹性系数 等。 分组(空间分割)  预知的不可能相互碰撞的物体置入不同的分组 中,碰撞检测时就不用对这两个分组中的物体 进行碰撞运算,以节省大量的运算。
  104. 104. 在Unity中碰撞 给Game Object添加一个Collision Component,这个Game Object就具有了 (被)碰撞属性。 Unity可绑定的碰撞体有  Box、 Sphere、 Capsule、 Mesh、 Wheel、 Terrain 注,Unity中无碰撞分组设置,需要在脚本中 实现。
  105. 105. 刚体(Rigid Body)
  106. 106. 介绍刚体 – 特性 质量、速率、力、加速度、旋转。 (参考物理学中关于刚体的说明) 场景的尺寸对物理表现会有影响。
  107. 107. 介绍刚体 – 形状与性能 球体 – 性能最高。 立方体、圆柱体、胶囊、轮子 – 性能适中, 通过组合可用于略复杂的物理碰撞。 凸多边形 – 可表现任意形状的碰撞体,性 能由面数决定,但相对来说性能最低。
  108. 108. 介绍刚体 – 碰撞检测类型 有连续碰撞和非连续碰撞检测 如果不是连续碰撞检测,物体速度较快时 可能会穿过另一碰撞物体。
  109. 109. 在Unity中刚体 如果需要一个Game Object按照物理特性运 动,就给这个Game Object绑定一个 RigidBody Component。 Mass – 质量,影响物体的碰撞效果。 Drag – 阻滞系数,用于表现物体被空气、水 等物质阻滞的效果。 Constrains – 给物体某个方向上的约束。
  110. 110. 在Unity中刚体 – CollisionDetection Discrete – 性能高、适合低速运动物体, 物体高速运动时可能穿过其它碰撞体。 Continuous – 连续的碰撞检测,保证物体 不会穿过其它碰撞体。但性能较低。 Continuous Dynamic – 针对静态网格碰 撞器(不带刚体),用于快速移动的物体。
  111. 111. 游戏开发与Unity实践
  112. 112. 样本(Sample)
  113. 113. 介绍样本 – 格式 格式(音频文件)  wav – 支持无压缩。  mp3, ogg – 压缩格式。 格式(在内存中)  Native – 相对省CPU,但耗内存。  Compress - 相对省内存,但耗CPU。  具体如何选择要看内存和CPU使用情况而定。
  114. 114. 介绍样本 – 加载方式 Streaming  省内存、通道数有限;  适合游戏音乐、语音对话等长音频。 In memory  性能高、费内存;  适合短小的音效。
  115. 115. 介绍样本 – 立体声、单声道 立体声  自身有空间感。  适合于高质量的2D音频播放需求。 单声道  自身没有空间感。  适合于3D场景中的音效播放。
  116. 116. 在Unity中样本 Wav Asset,即AudioClip。 音频格式  Native(WAV) – 省CPU、费内存。  Compressed(MPEG) – 省内存、费CPU。 加载类型  Load into memory – 预先将样本加载到内存中、播放时 从内存播放。  Stream from disc – 不加载样本,播放时边缓存边播放。
  117. 117. 声源(Sound Source)
  118. 118. 介绍声源 音源,用来播放样本,决定声音播放时的 属性。
  119. 119. 介绍声源 – 特性 优先级 – 所有设备可以同时播放声音的通 道数都是有限的,当同时播放的声音太多 时,低优先级的(通常是相对不重要的) 声音就会被停止播放。 音量 – 样本在播放时的音量。
  120. 120. 介绍声源 – 2D/3D 2D声音跟方位、距离无关。 3D声音更容易模拟现实(3D)世界的声音 效果。
  121. 121. 在Unity中声源 给Game Object添加Audio Source Component,这个Game Object就有了 Sound Source的特性。 可在Inspector中设置  静音(Mute)、 优先级、 音量(Volume)、 音调(Pitch)等。
  122. 122. 在Unity中声源 – 备注 同一时刻,一个Audio Source只播放一个 样本。但可用一个Audio Source去播放不 同的Audio Clip。
  123. 123. 3D Sound
  124. 124. 介绍3D Sound 方位  3D声音有方向、有位置,玩家在场景中移 动、转向时会更身临其境。 速度  速度对多普勒效果产生影响。通常用于表现高 速运动的发声体。
  125. 125. 介绍3D Sound – 衰减曲线 对数衰减 – 声音随着距离的增大,迅速减 弱,相对接近现实世界中的声音表现。 线性衰减 – 声音随着距离的增大,均匀的 减弱。 自定义衰减曲线
  126. 126. 在Unity中3D Sound 要播放3D声音,首先要勾 选Audio Clip的3D Sound 属性。 注,游戏场景的尺寸设定 会直接影响到3D声音。
  127. 127. 在Unity中3D Sound – 衰减 可以选择或者自定义声音衰 减曲线。 Max Distance决定衰减曲线 中横轴的长度。
  128. 128. 游戏开发与Unity实践
  129. 129. 状态机(State Machine)
  130. 130. 介绍状态机 说明  状态机是对逻辑的模块化封装,在状态内部执 行相应的逻辑,由外界条件触发状态切换。  通常一个状态有:进入、执行、退出三个阶段。 目的  划分逻辑模块,理清逻辑关系。
  131. 131. 介绍状态机 – 应用 游戏状态控制 游戏场景切换 角色动画 等…
  132. 132. 在Unity中状态机 – 实现 与Unreal Engine不同,Unity中没有可视 化的状态机编辑功能,需要写Script来实 现。
  133. 133. 在Unity中状态机 – 参考 可以从互联网上找到共享的代码,如  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/
  134. 134. 通信(Communication)
  135. 135. 介绍通信 游戏中的各个模块之间需要相互影响,这就 需要一种通信机制。 模块间通信有多种形式,不同的通信机制各 有利弊:  Object reference  Delegate  Message中心
  136. 136. 介绍通信 – Objectreference 引用者依赖于被引用者。 耦合较强。
  137. 137. 介绍通信 – Delegate 事件接收者与消息发送者建立明确的关联 关系。 由于这种关系是靠抽象的接口建立的,所 以耦合较弱。
  138. 138. 介绍通信 – Message中心 通知者向消息中心发消息,接收者从消息 中心取消息。 两个通信模块无耦合关系。
  139. 139. 在Unity中通信 - Delegate C#语言的一个特性。 效率较高
  140. 140. 在Unity中通信 – Objectreference 对于public的引用,Unity支持在编辑器中 编辑关联关系。 是Unity开发中的一种常用做法。
  141. 141. 在Unity中通信 – Message -1 Unity提供Message Broadcast。 此方法效率较低。
  142. 142. 在Unity中通信 – Message -2 还可用C#来自定义消息系统。 参考  http://www.unifycommunity.com/wiki/index.ph p?title=CSharpMessenger
  143. 143. 参考 http://www.gltop.com/index.php?q=node/3 http://unity3d.com/support/documentation/ http://forum.unity3d.com/ http://game.ceeger.com/
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×