1. 初阶 v 0.6.2 更新:2012-08-26
2. 教程说明 概念介绍 – 对游戏开发中的一些概念和 基本应用进行简要说明。 Unity实践 – 在Unity中如何使用和注意事 项。
3. 游戏生产线概要艺术内容制作 艺术内容导出 游戏内容制作游戏内容构建 游戏内容打包 游戏内容加载游戏内容表现
4. 游戏开发与Unity实践
5. 游戏对象(Game Object)
6. 介绍游戏对象 游戏对象是对场景中物体进行管理的基本单 元。 通过游戏对象可对场景中的物体进行定位、 查找、访问等操作。 对象有级联关系,对一个对象的操作会影响 到其子对象。如,移动一个对象,其子对象 也跟随其移动。
7. 在Unity中游戏对象 游戏对象在”Hierarchy”中管理。 主要属性 transformation – 物体的位置、旋转、缩放属性。 parent – 其层级关系中的父对象。 主要方法(在Script中的) Start() – 对象被实例化后执行一次。 Update() – 对象被激活后,每帧执行。
8. 部件(Component)
9. 介绍部件 类似于插件概念的模块化的结构 游戏对象需要哪些特性,就把对应的部件 挂上去。 如Collision、Audio Source、Light、 Material等。
10. 在Unity中部件 选中一个Game Object,从Component菜 单中可以添加一个所需的Component到这 个Game Object上。
11. 游戏开发与Unity实践
12. Assets
13. 介绍Assets Assets可理解为用于制作、加工游戏所需 的各类源数据。 这些数据不会被直接构建入游戏。 制作游戏(场景)时需要哪些数据,从 Assets中选取、构建。
14. 在Unity中Assets Asset在“Project”中管理。 将资源文件放置Asset目录下,Unity回自 动检测并将其导入”Project”中。
15. Prefab
16. 介绍Prefab Prefab是Asset的一种。 Prefab相当于游戏对象的模版,对于有相 同或者相似特性的游戏对象,可以用 Prefab来对其实例化,这样就不用反复的 配置其属性。
17. 在Unity中Prefab 可将Game Object实例直接拖到Asset中,就会 自动生成一个Prefab。 如果一个对象引用其它对象,被引用的对象又不 在Prefab中,生成Prefab后引用关系会丢失。 用Prefab实例化多个游戏对象,如果修改Prefab 的属性,这些游戏对象的属性也会跟着改变。
18. 游戏开发与Unity实践
19. 模型(Model)
20. 介绍模型 顶点 – 要考虑好精度问题,尺寸过小或过大都会引起精度丢失问 题。 法线 – 法线属性可以表现表面方向,影响物体的光影效果。 ○ 如某个面的一块很黑,打灯光也无法照亮,可以考虑现在数据中检查一下模 型法线。 UV – 顶点与贴图的坐标映射。 顶点色 – 通常用于静态光照,也可用于多层贴图混合。 Index – 多边形是有方向的,Index的顺序决定面的方向。 注 顶点的数量直接影响模型精细度和顶点色过渡的细致程度。
21. 在Unity中模型 使用 将模型文件放置Asset目录中的某个位置,Unity会自动 检测并将其导入到“Project”中。 模型文件 支持的格式有fbx, collada, ma等。 FBX – Autodesk的一种数字内容文件格式,很多数字内 容制作工具都支持对这种格式数据的导入、导出。 Unity支持Maya文件导入,但需要安装Maya。
22. 贴图(Texture)
23. 介绍贴图 作用 为游戏中的元素的颜色显示或者运算提供颜色输入。例如,模型表面的图像,用于运 算材质的颜色,用户界面上的图像等等。 格式 Tga – 32位,有8位Alpha通道。 Png – 压缩格式,有透明色。 Jpg – 压缩格式,无半透。 DXT – 有不同的压缩格式。 Mipmap – 如果场景有纵深,mipmap可让远处贴图看着不“花”,并且提高远处 物体的渲染性能。 尺寸 – 不同的设备对渲染用贴图的尺寸有所限制,如某些设备上要求贴图宽 高是2的幂;有些设备将最大尺寸限制到2048*2048。具体限制请查看文档。
24. 在Unity中贴图 支持格式 Png, tga, jpg, psd… 将贴图复制到Asset目录,这个贴图就可 被导入。 贴图压缩 – 设置贴图的压缩方式可在内存 和CPU间进行平衡。
25. 材质(Material)
26. 介绍材质 作用 为游戏中的模型的”表面”提供属性。例如,颜色或光照的属性和运算、物理属性、声音属性等等。 映射模式 Diffuse – 材质的漫反射颜色表示的是在所有方向平均反射的入射光量。 值 (1,1,1) 表示所有方向可以 反射 100% 的入射光。 Diffuse映射从各个方向上看上去都不会有光影变化。漫反射颜色将只会在受 一些无阴影的光照影响时显示,因为它会缩放入射光照。 Normal – 法线贴图可以指定每个像素的法线属性,它可以同时对漫反射和高光光照产生影响。 Specular – 高光颜色可以表现在某个方向反射的入射光线多少。 高光反应在您的眼睛与反射的入射光 线的方向对齐的时候是最亮的,所以高光是根据视图进行变化的。 法线也会影响高光,因为它会影 响反射的光源方向。 高光强度可以控制表全面的光泽或光泽程度。 非常高的高光强度可以表现如镜 面一般的表面,而低强度可以表现比较粗糙的表面。
27. 在Unity中材质 Unity中的材质是非Graph编辑的,只能根 据shader进行属性设置。 如果需要实现特殊的效果,需要写对应的 shader文件来支持。
28. 摄像机(Camera)
29. 介绍摄像机 透视投影 – 有景深,近大远小,可参考真 实照相机的效果。 正交投影 – 无景深,无近大远小的效果, 大多用于2D表现。 FOV – 镜头广度,也可理解为“近大远小” 的程度。
30. 在Unity中摄像机 Projection 投影模式 – 可设置正交投影、透视投影。 Target Texture 可将此摄像机中的内容渲染到一张贴图上。 可用于实现画中画效果。
31. 灯光(Light)
32. 介绍灯光 环境光 照亮整个场景,无方向(或者说来自四面八方)。 点光源 灯泡的效果。 方向光 太阳光的效果。 聚光(Spot) 舞台上聚光灯的效果。
33. 在Unity中灯光 Light Component 给对象赋予Light Component,对象就具有了光照属性 类型 可设置Spot、Directional、Point、Area光。 注意 Unity中点光源不产生normal map的运算,需要用平行 光来表现。 尽量减少同时激活的动态光源的数量以提高性能。
34. 游戏开发与Unity实践
35. 菜单/窗体(Menu/Window)
36. 介绍菜单/窗体 控件(Control) 可复用的界面上的元素,如按钮、滚动条、下 拉列表等。 事件/消息(Event/Message) 处理用户的操作,如点击、拖拽等。
37. 在Unity中菜单/窗体 NGUI NGUI是一款为Unity开发的GUI库,有完备的 Menu/Window支持。 提供了很多常用的UI控件、界面行为、事件响应。 事件模型 NGUI提供了一些消息脚本,将所需脚本拖到对应 的UI对象上,就可设置此对象的事件响应。
38. HUD
39. 介绍HUD HUD – Head Up Display 屏幕上向用户反馈信息的图形、文字元素。 Sprite – HUD的一个重要的元素,其特性有: Transformation – 移动、旋转、缩放。 Behavior – 各种行为表现,如淡入、淡出、翻转、 按指定轨迹运动等。 Animation – 可通过播放帧动画来表现2D角色动作。
40. 在Unity中HUD NGUI NGUI对HUD有很好的支持。 数据生产线 Texture Packer – 一款贴图打包工具,可将贴图素材打包。 Atlas maker – 生成Atlas(相当于各类Sprite的仓库)。 行为(Behavior) NGUI中有个名为Tweening的脚本库,提供了各种用于控 制UI对象如何动态变化的脚本。
41. 字体(Font)
42. 介绍字体 贴图字体 字体样式可自定。 文字内容、颜色可动态改变。 不宜缩放。 画到贴图上的文字 可高度定制文字的样式。 内容不能动态改变。
43. 在Unity中字体 NGUI NGUI支持字体贴图。 生产线 BMFont – 一款字体文件制作工具。 Font Maker – NGUI的字体制作工具,生成 Unity中可用的数据。
44. 游戏开发与Unity实践
45. 碰撞(Collision)
46. 介绍碰撞 物理材质 影响物体间的相互作用,如摩擦力、弹性系数 等。 分组(空间分割) 预知的不可能相互碰撞的物体置入不同的分组 中,碰撞检测时就不用对这两个分组中的物体 进行碰撞运算,以节省大量的运算。
47. 在Unity中碰撞 给Game Object添加一个Collision Component,这个Game Object就具有了 (被)碰撞属性。 Unity可绑定的碰撞体有 Box、 Sphere、 Capsule、 Mesh、 Wheel、 Terrain 注,Unity中无碰撞分组设置,需要在脚本中 实现。
48. 刚体(Rigid Body)
49. 介绍刚体 特性(参考物理学中刚体的说明) 质量、速率、力、加速度、旋转。 形状与性能 球体 – 性能最高。 立方体、圆柱体、胶囊、轮子 – 性能适中,通过组合可用于略复杂的物理 碰撞。 凸多边形 – 可表现任意形状的碰撞体,性能由面数决定,但相对来说性能 最低。 检测类型(连续碰撞…) 如果不是连续碰撞检测,物体速度较快时可能会穿过另一碰撞物体。
50. 在Unity中刚体 如果需要一个Game Object按照物理特性运动,就给这个Game Object绑定一 个Rigidbody Component。 Mass – 质量,影响物体的碰撞效果。 Drag – 阻滞系数,用于表现物体被空气、水等物质阻滞的效果。 Collision Detection Discrete – 性能高、适合低速运动物体,物体高速运动时可能穿过其它碰撞体。 Continuous – 连续的碰撞检测,保证物体不会穿过其它碰撞体。但性能较低。 Continuous Dynamic – 针对静态网格碰撞器(不带刚体),用于快速移动的物体。 Constrains – 给物体某个方向上的约束。 注,场景的尺寸对物理表现会有影响。
51. 游戏开发与Unity实践
52. 样本(Sample)
53. 介绍样本 Format(音频文件) Wav, mp3, ogg等。 Format(在内存中) Native – 相对省CPU、耗内存。 Compress – 相对省内存、耗CPU。 具体如何选择要看内存和CPU使用情况而定。 加载方式 Streaming – 省内存、通道数有限;适合游戏音乐、语音对话等长音频。 In memory – 性能高、费内存;适合短小的音效。 立体声、单声道 立体声 – 自身有空间感,适合于高质量的2D音频播放需求。 单声道 – 自身没有空间感,适合于3D场景中的音效播放。
54. 在Unity中样本 Wav Asset,即AudioClip。 音频格式 Native(WAV) – 省CPU、费内存。 Compressed(MPEG) – 省内存、费CPU。 加载类型 Load into memory – 预先将样本加载到内存中、播放时 从内存播放。 Stream from disc – 不加载样本,播放时边缓存边播放。
55. 声源(Sound Source)
56. 介绍声源 音源 – 用来播放样本 特性 优先级 – 所有设备可以同时播放声音的通道数都是有限的, 当同时播放的声音太多时,低优先级的(通常是相对不重 要的)声音就会被停止播放。 音量 – 样本在播放时的音量。 2D/3D 2D声音跟方位、距离无关。 3D声音更容易模拟现实(3D)世界的声音效果。
57. 在Unity中声源 Unity中,给Game Object添加Audio Source Component,这个Game Object就有了Sound Source的特性。 可在Inspector中设置 静音(Mute)、 优先级、 音量(Volume)、 音调 (Pitch)等。 同一时刻,一个Audio Source只播放一个样本。 但可用一个Audio Sound去播放不同的Audio Clip。
58. 3D Sound
59. 介绍3D Sound 方位 3D声音有方向、有位置,玩家在场景中移动、转向时会更身临其 境。 速度 速度对多普勒效果产生影响。通常用于表现高速运动的发声体。 衰减曲线 对数衰减 – 声音随着距离的增大,迅速减弱,相对接近现实世界 中的声音表现。 线性衰减 – 声音随着距离的增大,均匀的减弱。 自定义衰减曲线
60. 在Unity中3D Sound 要播放3D声音,首先要勾选Audio Clip的 3D Sound属性。 可以选择或者自定义声音衰减曲线。 Max Distance决定衰减曲线中横轴的长度。 注,游戏场景的尺寸设定会直接影响到 3D声音。
61. 游戏开发与Unity实践
62. 状态机(State Machine)
63. 介绍状态机 说明 状态机是对逻辑的模块化封装,在状态内部执行相应的逻辑,由外界条件 触发状态切换。 通常一个状态有:进入、执行、退出三个阶段。 目的 划分逻辑模块,理清逻辑关系。 应用 游戏状态控制 游戏场景切换 角色动画 等…
64. 在Unity中状态机 与Unreal Engine不同,Unity中没有可视 化的状态机编辑功能,需要写Script来实 现。 可以从互联网上找到共享的代码,如 http://wiki.unity3d.com/index.phptitle=Finite_State_Machine http://www.playmedusa.com/blog/2010/12/10/a-finite-state-machine-in-c- for-unity3d/
65. 通信(Communication)
66. 介绍通信 游戏中的各个模块之间需要相互影响,这就需要一种通信机制。 模块间通信有多种形式,不同的通信机制各有利弊: Object reference ○ 引用者依赖于被引用者。 ○ 耦合较强。 Delegate ○ 事件接收者与消息发送者建立明确的关联关系。 ○ 由于这种关系是靠抽象的接口建立的,所以耦合较弱。 Message中心 ○ 通知者向消息中心发消息,接收者从消息中心取消息。 ○ 两个通信模块无耦合关系。
67. 在Unity中通信 Delegate C#语言的一个特性。 效率较高 Object reference 对于public的引用,Unity支持在编辑器中编辑关联关系。 是Unity开发中的一种常用做法。 Message – 1 Unity提供Message Broadcast。 此方法效率较低。 Message – 2 还可用C#来自定义消息系统。 如,http://www.unifycommunity.com/wiki/index.phptitle=CSharpMessenger
68. 参考 http://www.gltop.com/index.phpq=node/3 http://unity3d.com/support/documentation/ http://forum.unity3d.com/
http://game.ceeger.com/
http://game.ceeger.com/
原址:
http://cl314413.blog.163.com/blog/static/19050797620127281167880/