六本书
- Unity 5权威讲解
- Unity 3D NGUI 实战教程
- Unity 5实战 使用C和Unity开发多平台游戏
- Unity 3D人工智能编程
- Unity官方案例精讲
- Unity Shader入门精要
1. Unity 5权威讲解 #
目录
- 第1章 Unity 5简介 1
- 1.1 Unity 3D游戏引擎的诞生 2
- 1.2 Unity 5的优势 2
- 1.2.1 支持多平台 2
- 1.2.2 集成开发环境 3
- 1.2.3 所有功能免费 4
- 1.2.4 中间件内建 5
- 1.2.5 开放社区 5
- 1.2.6 资源商店 6
- 1.3 使用Unity制作的游戏 7
- 1.4 下载Unity 9
- 1.4.1 安装Unity 10
- 1.4.2 选择Unity许可 11
- 1.4.3 注册并登录Unity 12
- 1.5 Unity界面 13
- 1.5.1 视图 16
- 1.5.2 工具栏 27
- 1.5.3 设置快捷键 34
- 1.6 小结 34
- 第2章 准备游戏开发 35
- 2.1 开发的游戏以及开发顺序 36
- 2.2 新建项目 36
- 2.3 设置Unity IDE 37
- 2.4 系统管理项目视图 39
- 2.5 导入角色模型 39
- 2.6 创建资源商店账号 42
- 2.7 从项目视图访问资源商店 44
- 2.8 从资源商店下载资源 45
- 2.9 小结 48
- 第3章 制作游戏场景 49
- 3.1 3D模型 50
- 3.2 纹理 51
- 3.3 材质 53
- 3.4 应用纹理 54
- 3.5 着色器以及基于物理的着色 58
- 3.5.1 渲染模式 59
- 3.5.2 反照率 59
- 3.5.3 金属 59
- 3.5.4 法线贴图 59
- 3.5.5 高度图 60
- 3.5.6 遮挡贴图 60
- 3.5.7 放射 61
- 3.5.8 细节遮蔽 61
- 3.6 表现地面阴影——使用法线贴图 61
- 3.7 预设 62
- 3.8 用预设制作墙体 64
- 3.9 光照 68
- 3.9.1 平行光 68
- 3.9.2 点光源 69
- 3.9.3 聚光灯 69
- 3.9.4 区域光 70
- 3.10 天空的表现方法 71
- 3.10.1 六面天空盒 72
- 3.10.2 程序天空盒 74
- 3.10.3 立方图天空盒 76
- 3.11 小结 76
- 第4章 制作主人公角色 77
- 4.1 空游戏对象 78
- 4.2 导入3D模型并设置选项 79
- 4.3 组件 80
- 4.4 生成脚本 81
- 4.5 下载键盘输入值 84
- 4.6 角色移动 87
- 4.6.1 处理组件缓存 88
- 4.6.2 游戏对象的移动 89
- 4.6.3 Translate函数 90
- 4.7 单位向量 91
- 4.8 角色旋转:Rotate 94
- 4.9 摄像机追踪:Follow Cam 95
- 4.10 Legacy动画系统 98
- 4.11 动画片段 99
- 4.12 动画控件 104
- 4.13 动画合成 107
- 4.14 实时阴影 108
- 4.15 运用投影器制作阴影 111
- 4.16 运用平面网格制作阴影 115
- 4.17 小结 117
- 第5章 制作子弹发射效果 119
- 5.1 准备子弹模型 120
- 5.2 Rigidbody组件 121
- 5.3 设置物理引擎属性:Physics Manager 124
- 5.4 Collider组件 125
- 5.4.1 Box Collider 125
- 5.4.2 Sphere Collider 125
- 5.4.3 Capsule Collider 126
- 5.4.4 Mesh Collider 126
- 5.4.5 Wheel Collider 127
- 5.4.6 Terrain Collider 128
- 5.5 碰撞感知条件 128
- 5.6 碰撞事件 130
- 5.7 Tag应用 132
- 5.8 子弹发射逻辑 135
- 5.9 制作子弹发射轨迹:Trail Renderer 140
- 5.10 应用粒子系统 145
- 5.11 制作爆炸效果并设置爆炸威力 150
- 5.12 随机使用纹理 155
- 5.13 声音:AudioSource与AudioListener 157
- 5.14 枪口火焰效果:Muzzle Flash 164
- 5.15 小结 170
- 第6章 制作敌对角色 171
- 6.1 Mecanim动画系统 172
- 6.2 导入怪兽3D模型 173
- 6.3 转换为Mecanim动画 173
- 6.4 动画控制器 177
- 6.5 导航:怪兽追击例程 183
- 6.5.1 生成导航网格并烘焙 184
- 6.5.2 Nav Mesh Agent 185
- 6.6 实现人工智能 188
- 6.7 怪兽攻击例程 197
- 6.8 怪兽被袭时的反应 199
- 6.9 血迹效果 203
- 6.10 贴图:地面上的血迹效果 206
- 6.11 赋予怪兽攻击技能 211
- 6.12 特定层之间的碰撞感知 215
- 6.13 优化Mecanim动画角色的骨骼结构 218
- 6.14 怪兽停止攻击:Tag 220
- 6.15 怪兽停止攻击:Delegate、Event 224
- 6.16 怪兽的死亡处理 228
- 6.17 小结 235
- 第7章 Unity UI 237
- 7.1 Canvas对象 238
- 7.1.1 EventSystem对象 239
- 7.1.2 Canvas组件 240
- 7.2 Rect Transform组件 244
- 7.3 anchoredPosition属性 252
- 7.4 Image组件 254
- 7.4.1 Simple 256
- 7.4.2 Sliced 256
- 7.4.3 Tiled 258
- 7.4.4 Filed 258
- 7.5 RawImage 组件 259
- 7.6 Button组件 260
- 7.7 Text组件 271
- 7.8 Scroll Rect组件 272
- 7.8.1 Content属性 275
- 7.8.2 Mask组件 276
- 7.9 制作游戏分数UI 277
- 7.10 制作生命条 285
- 7.11 小结 289
- 第8章 游戏管理器 291
- 8.1 怪兽出现逻辑 292
- 8.2 访问游戏管理器 296
- 8.3 单例模式 298
- 8.4 对象池 300
- 8.5 共享函数:声音处理 308
- 8.6 小结 311
- 第9章 灵活运用射线投射 313
- 9.1 射线投射 314
- 9.2 油桶爆炸 319
- 9.3 实现激光束 322
- 第10章 导航仪高级技巧 329
- 10.1 动态障碍物 330
- 10.2 分离网格链接 333
- 10.3 用户自定义生成分离网格链接 335
- 第11章 光照贴图、灯光探测器 337
- 11.1 光照 338
- 11.1.1 Generate Lightmap UVs 选项 338
- 11.1.2 Lightmap Static标记 338
- 11.1.3 光照视图 339
- 11.1.4 准备烘焙光照的过程 341
- 11.1.5 Auto选项 342
- 11.1.6 构建光照贴图 342
- 11.1.7 Area Light 345
- 11.2 灯光探测器 346
- 11.2.1 Light Probe Group 347
- 11.2.2 Anchor Override 350
- 11.3 小结 351
- 第12章 场景分离与合并 353
- 12.1 场景分离 354
- 12.2 场景合并 357
- 第13章 Unity内置网络游戏 361
- 13.1 网络游戏的定义 362
- 13.2 网络游戏的物理结构 362
- 13.3 网络通信协议 363
- 13.4 Unity内置网络功能 363
- 13.4.1 网络视图 364
- 13.4.2 状态同步 364
- 13.4.3 远程过程调用 365
- 13.5 Unity网络游戏步骤 366
- 13.5.1 游戏服务器初始化 366
- 13.5.2 客户端游戏连接 367
- 13.5.3 各游戏端点之间的通信 368
- 13.6 开发网络游戏 368
- 13.6.1 生成并初始化项目 369
- 13.6.2 场景制作 369
- 13.6.3 制作Player 371
- 13.6.4 Character Controller移动逻辑 371
- 13.6.5 制作网络管理器 373
- 13.6.6 构建可执行文件 374
- 13.6.7 查看连接网络的用户数量 377
- 13.6.8 制作网络玩家 380
- 13.6.9 摄像机追踪逻辑 383
- 13.6.10 平滑的同步处理(OnSerializeNetworkView) 387
- 13.6.11 发射例程(调用RPC) 392
- 13.6.12 动画同步 399
- 13.6.13 探测子弹的碰撞 405
- 13.6.14 死亡和复活处理 406
- 13.6.15 终止连接的相关处理 414
- 13.7 小结 415
- 第14章 使用Photon Cloud制作网络游戏 417
- 14.1 第二代Unity网络游戏引擎UNET 418
- 14.2 第三方网络游戏引擎 418
- 14.3 PhotonNetwork游戏引擎 418
- 14.3.1 Photon Server与Photon Cloud 419
- 14.3.2 加入会员 419
- 14.4 制作坦克大战游戏 421
- 14.4.1 坦克移动逻辑 422
- 14.4.2 履带动画 424
- 14.4.3 设置摄像机追踪逻辑与摄像机位置 427
- 14.4.4 旋转炮塔 428
- 14.4.5 调整炮身角度 431
- 14.4.6 建立炮弹预设和发射逻辑 432
- 14.4.7 炮弹发射音效 438
- 14.5 安装Photon Unity Networking插件 439
- 14.6 将坦克游戏更改为Photon Cloud版本 441
- 14.6.1 连接Photon Cloud 442
- 14.6.2 随机配对 444
- 14.6.3 制作房间 445
- 14.6.4 Photon View 447
- 14.6.5 动态生成坦克 448
- 14.6.6 构建游戏并测试连接 451
- 14.6.7 控制自己的坦克 453
- 14.6.8 平滑移动和旋转处理 454
- 14.6.9 同步炮塔与炮身 458
- 14.6.10 发射炮弹 463
- 14.6.11 坦克被击中时的处理及复活 465
- 14.7 制作游戏大厅 469
- 14.7.1 制作大厅场景 469
- 14.7.2 制作登录UI 471
- 14.7.3 进入游戏房间 479
- 14.7.4 制作坦克HUD 484
- 14.7.5 创建并进入房间 492
- 14.7.6 构建房间目录UI 497
- 14.7.7 接收房间列表 504
- 14.7.8 动态增加按钮事件 516
- 14.8 战地细节功能 520
- 14.8.1 显示房间内的玩家数 520
- 14.8.2 退出房间 523
- 14.8.3 显示连接日志 525
- 14.8.4 事件钩子 530
- 14.9 评分并显示 534
- 14.10 在Unity中连接数据库 547
- 14.10.1 JSON 547
- 14.10.2 SimpleJSON 549
- 14.10.3 将分数信息保存到数据库 551
- 14.10.4 从数据库获取排名信息 554
- 14.11 小结 557
- 第15章 提升游戏真实感 559
- 15.1 布娃娃系统 560
- 15.1.1 创建项目并下载资源 560
- 15.1.2 制作舞台 561
- 15.1.3 生成3D模型的布娃娃系统 562
- 15.2 触屏 571
- 15.2.1 ScreenPointToRay函数 571
- 15.2.2 Touch类 574
- 15.2.3 Unity Remote4 577
- 15.3 通过触屏移动 579
- 15.4 小结 582
- 附录 数据库 583
- 1.数据库和数据库管理系统 584
- 2.数据库服务器 584
- 3. SQL 584
- 4. DBMS的数据管理 584
- 5.数据表 585
- 6.列与行 585
- 7. SQL 586
2. Unity 3D NGUI 实战教程 #
- 第1章 初识NGUI
- 1.1 游戏UI开发介绍
- 1.1.1 什么是游戏UI
- 1.1.2 UI为何如此重要
- 1.1.3 UI开发的流程
- 1.1.4 UI开发的难点
- 1.2 什么是NGUI
- 1.2.1 NGUI插件介绍
- 1.2.2 NGUI的强大优势
- 第2章 NGUI基础
- 2.1 导入NGUI插件
- 2.1.1 NGUI版本介绍
- 2.1.2 NGUI的下载和购买
- 2.1.3 导入NGUI插件应用
- 2.1.4 导入常见问题
- 2.2 认识基本的UI资源
- 2.2.1 什么是UI精灵(Sprite)
- 2.2.2 什么是UI图集(Atlas)
- 2.2.3 什么是UI贴图(Texture)
- 2.2.4 什么是UI标签(Label)
- 2.2.5 什么是UI字体(Font)
- 2.3 制作第一个UI图集
- 2.3.1 学会解剖UI的资源结构
- 2.3.2 如何导入切好的美术资源
- 2.3.3 用Atlas Maker制作图集
- 2.4 制作第一个UI字体
- 2.4.1 为什么要制作UI字体
- 2.4.2 静态字体和动态字体
- 2.4.3 制作静态字体介绍
- 2.4.4 制作动态字体介绍
- 2.5 创建第一个UI
- 2.5.1 创建一个2D UI
- 2.5.2 创建一个3D UI
- 2.5.3 了解UIRoot、UIPanel和UICamera组件
- 2.6 2DUI和3DUI的工作原理
- 2.6.1 2DUI的工作原理
- 2.6.2 3DUI的工作原理
- 2.6.3 如何判断该选择哪一种UI
- 2.7 深度(Depth)概念
- 2.7.1 强化对深度的理解
- 2.7.2 小心相机的深度
- 第3章 核心组件
- 3.1 什么是UI控件
- 3.2 制作精灵(UISprite)
- 3.2.1 怎样判断是否应该使用精灵
- 3.2.2 创建精灵
- 3.2.3 Sprite组件的设置
- 3.3 制作标签(Label)
- 3.3.1 怎样判断是否应当使用标签
- 3.3.2 创建标签
- 3.3.3 Label的文字设置
- 3.4 制作UI纹理(UITexture)
- 3.4.1 什么情况下使用UITexture
- 3.4.2 创建纹理
- 3.4.3 纹理的设置
- 3.5 制作按钮(Button)
- 3.5.1 怎样判断应该使用按钮
- 3.5.2 创建按钮
- 3.5.3 核心组件BoxCollider
- 3.5.4 核心组件UIButton
- 3.5.5 制作按钮的放缩动画
- 3.5.6 制作按钮的偏移动画
- 3.5.7 制作按钮的旋转动画
- 3.5.8 添加按钮单击音效
- 3.5.9 任何事物都可以变成按钮,不仅仅是UI
- 3.6 制作进度条(UISlider)
- 3.6.1 怎样判断是否应当使用进度条
- 3.6.2 创建进度条
- 3.6.3 核心组件UISlider设置
- 3.6.4 进度条的BoxCollider说明
- 3.7 制作输入框(Input)
- 3.7.1 怎样判断是否应当使用输入框
- 3.7.2 创建输入框
- 3.7.3 核心组件Input设置
- 3.7.4 输入框使用的一些注意事项
- 3.8 制作滚动视图(ScrollView)
- 3.8.1 怎样判断是否应当使用滚动视图
- 3.8.2 创建滚动视图
- 3.8.3 滚动视图核心组件UIPanel
- 3.8.4 滚动视图核心组件UIScrollView
- 3.8.5 创建一个拖动条
- 3.8.6 拖动条说明
- 3.8.7 让视图内的内容可以被拖动
- 3.8.8 制作滚动视图时的注意事项
- 3.9 制作复选框(Toggle)
- 3.9.1 怎样判断是否应当使用复选框
- 3.9.2 创建复选框
- 3.9.3 复选框的核心组件UIToggle
- 3.10 制作下拉菜单(PopupList)
- 3.10.1 怎样判断是否应当使用下拉菜单
- 3.10.2 创建下拉菜单
- 3.10.3 显示当前选中的选项
- 3.10.4 下拉菜单核心组件PopupList
- 3.10.5 制作下拉菜单的注意事项
- 第4章 UI动画
- 4.1 常见的两种UI动画介绍
- 4.1.1 要区分UI动画和UI特效两个概念
- 4.1.2 关于Tween动画
- 4.1.3 关于Animation动画
- 4.2 渐隐渐现动画(透明度动画)
- 4.2.1 透明度动画的介绍和应用
- 4.2.2 使用透明度动画TweenAlpha
- 4.2.3 使用透明度动画的注意点
- 4.3 颜色变化动画(变色动画)
- 4.3.1 变色动画的介绍和应用
- 4.3.2 使用颜色动画TweenColor
- 4.3.3 使用颜色动画的注意点
- 4.4 位置变换动画(位移动画)
- 4.4.1 位移动画的介绍和应用
- 4.4.2 使用位移动画TweenPosition
- 4.4.3 使用位移动画的注意点
- 4.5 旋转变化动画(旋转动画)
- 4.5.1 旋转动画的介绍和应用
- 4.5.2 使用旋转动画TweenRotation
- 4.5.3 使用旋转动画的注意点
- 4.6 大小变化动画(放缩动画)
- 4.6.1 放缩动画的介绍和应用
- 4.6.2 使用放缩动画TweenScale
- 4.6.3 使用放缩动画的注意点
- 4.7 Tween动画总结
- 4.8 动画控制组件UIPlayTween
- 4.8.1 为什么要用UIPlayTween
- 4.8.2 动画核心组件UIPlayTween讲解
- 4.8.3 使用UIPlayTween的注意事项
- 4.9 动画控制组件UIPlayAnimation
- 4.9.1 为什么要用UIPlayAnimation
- 4.9.2 为UI添加Animation组件
- 4.9.3 动画核心组件UIPlayAnimation讲解
- 4.9.4 使用UIPlayAnimation注意事项
- 第5章 其他组件
- 5.1 使用Toggle制作页签
- 5.1.1 页签的工作原理
- 5.1.2 一个完整的页签界面
- 5.1.3 制作两个页签按钮
- 5.1.4 使用ToggleObjects来记录页签内容
- 5.1.5 制作页签注意事项
- 5.2 拖动摄像机来浏览超大界面
- 5.2.1 拖动相机功能的介绍和应用
- 5.2.2 核心原理和组件介绍
- 5.2.3 拖动相机浏览超大界面的注意事项
- 5.3 使用Grid自动排列UI
- 5.3.1 自动排列UI的应用
- 5.3.2 自动排列UI核心组件Grid介绍
- 5.4 使用DragObject直接拖动物体
- 5.5 让玩家通过拖动自由改变控件大小
- 5.6 制作序列帧精灵动画(SpriteAnimation)
- 5.6.1 什么是序列帧精灵动画
- 5.6.2 SpriteAnimation组件
- 第6章 NGUI实战进阶
- 6.1 UI开发核心问题–UI随屏幕自适应
- 6.1.1 屏幕分辨率对UI适配的影响
- 6.1.2 主流设备的屏幕分辨率
- 6.1.3 自适应核心组件Anchor的使用
- 6.1.4 使用Anchor的注意事项
- 6.1.5 正式开发UI之前必须明确的几个问题
- 6.2 UI元素的相对自适应
- 6.2.1 什么是UI元素的相对自适应
- 6.2.2 Anchors的介绍及使用
- 6.2.3 使用Anchors的范例:背景图的全屏适配
- 6.2.4 使用Anchors的注意事项
- 6.3 多摄像机同时协作运行
- 6.3.1 摄像的渲染层的概念
- 6.3.2 多摄像机协作的应用范围
- 6.3.3 如何创建多个UI摄像机
- 6.3.4 多摄像机协作的注意事项
- 6.4 巧用九宫格以减少UI资源量
- 6.4.1 项目安装包大小对项目的影响
3. Unity 5实战 使用C#和Unity开发多平台游戏 #
- 第Ⅰ部分起步
- 第1章初识Unity3
- 1.1为什么Unity如此优秀4
- 1.1.1Unity的优势4
- 1.1.2要意识到的缺点5
- 1.1.3使用Unity构建的游戏案例6
- 1.2如何使用Unity9
- 1.2.1Scene视图、Game视图和工具栏10
- 1.2.2使用鼠标和键盘11
- 1.2.3Hierarchy标签和Inspector12
- 1.2.4Project和Console标签12
- 1.3开始使用Unity编程13
- 1.3.1代码在Unity中是如何运行的:脚本组件14
- 1.3.2使用MonoDevelop,跨平台的IDE15
- 1.3.3打印到控制台:HelloWorld!16
- 1.4小结18
- 第2章构建一个让你置身3D空间的演示19
- 2.1在开始之前20
- 2.1.1对项目做计划20
- 2.1.2了解3D坐标空间21
- 2.2开始项目:在场景中放置对象22
- 2.2.1第二步:地板、外墙和内墙22
- 2.2.2灯光和摄像机25
- 2.2.3玩家的碰撞器和视口26
- 2.3让东西移动:应用变换的脚本27
- 2.3.1图示说明如何通过编程实现旋转27
- 2.3.2编写代码实现图中演示的运动27
- 2.3.3本地和全局坐标空间29
- 2.4用于观察周围的组件脚本:MouseLook30
- 2.4.1跟踪鼠标运动的水平旋转31
- 2.4.2在一定范围内的垂直旋转32
- 2.4.3同时水平和垂直旋转33
- 2.5键盘输入组件:第一人称控件36
- 2.5.1响应按下的键36
- 2.5.2设置独立于计算机运行速度的运动速率37
- 2.5.3为了碰撞检测,移动CharacterController38
- 2.5.4调整组件为走路而不是飞翔39
- 2.6小结41
- 第3章为3D游戏添加敌人和子弹43
- 3.1通过射线射击44
- 3.1.1什么是射线发射44
- 3.1.2使用命令ScreenPointToRay来发射45
- 3.1.3为准心和击中点添加可视化提示46
- 3.2脚本化反应的目标49
- 3.2.1确定被击中的对象49
- 3.2.2警告目标它被击中50
- 3.3基本漫游AI52
- 3.3.1图解基础AI的工作原理52
- 3.3.2使用射线发射发现障碍物52
- 3.3.3跟踪角色状态54
- 3.4产生敌人预设55
- 3.4.1什么是预设55
- 3.4.2创建敌人预设56
- 3.4.3在不可见的SceneController中实例化57
- 3.5通过实例化对象进行射击59
- 3.5.1创建子弹预设59
- 3.5.2发射子弹并和目标碰撞60
- 3.5.3伤害玩家63
- 3.6小结63
- 第4章为游戏开发图形65
- 4.1了解美术资源65
- 4.2构建基础3D场景:白盒67
- 4.2.1白盒的解释68
- 4.2.2为关卡绘制地板平面图68
- 4.2.3根据平面图布局几何体69
- 4.3使用2D图像给场景贴图70
- 4.3.1选择文件格式71
- 4.3.2导入图像文件72
- 4.3.3应用图像73
- 4.4使用贴图图像产生天空视觉效果75
- 4.4.1什么是天空盒75
- 4.4.2创建一个新天空盒材质76
- 4.5使用自定义3D模型77
- 4.5.1选择文件格式78
- 4.5.2导出和导入模型79
- 4.6使用粒子系统创建效果81
- 4.6.1调整默认效果的参数82
- 4.6.2为火焰应用新贴图83
- 4.6.3将粒子效果附加到3D对象上84
- 4.7小结85
- 第Ⅱ部分轻松工作
- 第5章使用Unity新的2D功能构建一款记忆力游戏89
- 5.1设置2D图形90
- 5.1.1为项目做准备90
- 5.1.2显示2D图像(亦称精灵)92
- 5.1.3将摄像机切换为2D模式94
- 5.2构建卡片对象并让它响应单击95
- 5.2.1从精灵构建对象95
- 5.2.2鼠标输入代码96
- 5.2.3当单击时显示卡片96
- 5.3显示不同的卡片图像97
- 5.3.1通过程序加载图像97
- 5.3.2通过不可见的SceneController来设置图像98
- 5.3.3实例化一个网格的卡片100
- 5.3.4打乱卡片101
- 5.4实现匹配和匹配得分103
- 5.4.1保存并比较翻开的卡片104
- 5.4.2隐藏错误卡片104
- 5.4.3显示积分的文本105
- 5.5重启按钮106
- 5.5.1使用SendMessage编写UIButton组件107
- 5.5.2从SceneController中调用LoadLevel109
- 5.6小结110
- 第6章在3D游戏中放置2D图形用户界面111
- 6.1在开始写代码之前……112
- 6.1.1直接模式GUI还是高级2D界面112
- 6.1.2规划布局113
- 6.1.3导入UI图像114
- 6.2设置GUI显示114
- 6.2.1为界面创建画布115
- 6.2.2按钮、图像和文本标签116
- 6.2.3控制UI元素的位置118
- 6.3编写UI中的交互119
- 6.3.1编写不可见的UIController120
- 6.3.2创建弹出窗口121
- 6.3.3使用滑动条和输入域设置值124
- 6.4通过响应事件更新游戏126
- 6.4.1集成事件系统127
- 6.4.2从场景中广播和侦听事件127
- 6.4.3从HUD广播和侦听事件128
- 6.5小结130
- 第7章创建第三人称3D游戏:玩家移动和动画131
- 7.1调整摄像机视图为第三人称视角133
- 7.1.1导入一个用于观察的角色133
- 7.1.2将阴影添加到场景134
- 7.1.3摄像机环绕玩家角色135
- 7.2编写程序控制camera-relative的移动137
- 7.2.1旋转角色,以朝向移动方向138
- 7.2.2朝着方向向前移动140
- 7.3实现跳跃动作141
- 7.3.1应用垂直速度和加速度142
- 7.3.2修改地面检测来处理边缘和斜坡143
- 7.4设置玩家角色上的动画146
- 7.4.1在导入的模型上定义动画剪辑148
- 7.4.2为动画创建动画控制器149
- 7.4.3编写操作Animator组件的代码153
- 7.5小结154
- 第8章在游戏中添加交互设施和物件155
- 8.1创建门和其他设施156
- 8.1.1由按键控制开/关的门156
- 8.1.2在开门之前检查距离和朝向157
- 8.1.3创建一个变色监控器159
- 8.2通过碰撞与对象交互160
- 8.2.1和具有物理功能的障碍物碰撞160
- 8.2.2用一个压力板来触发门161
- 8.2.3收集当前关卡游戏中分散的物件163
- 8.3管理仓库数据和游戏状态165
- 8.3.1设置玩家和仓库管理器165
- 8.3.2编程实现游戏管理器166
- 8.3.3把物品存储在集合对象中:List与Dictionary170
- 8.4使用和装备物品的仓库UI173
- 8.4.1在UI中显示仓库物品173
- 8.4.2装备一个用来开门的钥匙175
- 8.4.3通过使用血量包来恢复玩家的血量177
- 8.5小结178
- 第Ⅲ部分冲刺阶段
- 第9章将游戏连接到互联网181
- 9.1创建户外场景182
- 9.1.1使用天空盒生成天空视觉效果182
- 9.1.2通过代码设置大气环境183
- 9.2从互联网服务下载天气数据185
- 9.2.1使用协程请求WWW数据188
- 9.2.2解析XML192
- 9.2.3解析JSON193
- 9.2.4基于天气数据影响场景195
- 9.3添加一个网络布告栏196
- 9.3.1从互联网加载图像196
- 9.3.2在布告栏上显示图像199
- 9.3.3缓存下载的图像以供重用200
- 9.4将数据发送到Web服务器201
- 9.4.1跟踪当前的天气:发送post请求202
- 9.4.2PHP中的服务器端代码204
- 9.5小结204
- 第10章播放音频:音效和音乐205
- 10.1导入音效206
- 10.1.1所支持的文件格式206
- 10.1.2导入音频文件207
- 10.2播放音效208
- 10.2.1音频剪辑、音源和声音侦听器208
- 10.2.2设定一个循环声音209
- 10.2.3从代码触发音效210
- 10.3音频控制接口211
- 10.3.1建立中心AudioManager212
- 10.3.2音量控制UI214
- 10.3.3播放UI声音217
- 10.4背景音乐218
- 10.4.1播放循环音乐218
- 10.4.2独立控制音乐的音量221
- 10.4.3歌曲间的淡入淡出223
- 10.5小结226
- 第11章将各部分整合为一个完整的游戏227
- 11.1再次利用项目来构建角色扮演RPG228
- 11.1.1将多个项目的资源和代码装配在一起228
- 11.1.2编写指向-单击的控件:移动和设备231
- 11.1.3使用新界面替换旧GUI235
- 11.2开发总体的游戏结构241
- 11.2.1控制任务流和多关卡242
- 11.2.2通过到达退出条件完成一个关卡245
- 11.2.3当被敌人捕捉时关卡失败247
- 11.3处理玩家游戏过程中的进度249
- 11.3.1保存并加载玩家进度249
- 11.3.2通过完成三个关卡打败游戏253
- 11.4小结255
- 第12章将游戏部署到玩家的设备255
- 12.1构建桌面环境:Windows、Mac和Linux259
- 12.1.1构建应用259
- 12.1.2调整PlayerSettings:设置游戏的名称和图标260
- 12.1.3平台依赖的编译261
- 12.2为Web构建游戏262
- 12.2.1UnityPlayer和HTML/WebGL262
- 12.2.2构建Unity文件和一个测试Web页面262
- 12.2.3与浏览器中的JavaScript通信263
- 12.3构建移动应用的平台:iOS和Android264
- 12.3.1设置构建工具265
- 12.3.2贴图压缩268
- 12.3.3开发插件269
- 12.4小结277
- 附录A场景导航和键盘快捷键279
- A.1使用鼠标进行场景导航279
- A.2一般使用键盘快捷键280
- 附录B与Unity一同使用的外部工具281
- B.1编程工具281
- B.1.1VisualStudio281
- B.1.2Xcode281
- B.1.3AndroidSDK282
- B.1.4SVN、Git或Mercurial282
- B.23D美术应用282
- B.2.1Maya282
- B.2.23dsMax282
- B.2.3Blender283
- B.32D图像编辑器283
- B.3.1Photoshop283
- B.3.2GIMP283
- B.3.3TexturePacker283
- B.4音频软件283
- B.4.1ProTools284
- B.4.2Audacity284
- 附录C在Blender中建模一个板凳285
- C.1构建网格几何体285
- C.2模型贴图映射288
- 附录D在线学习资源293
- D.1附加的指南293
- D.2代码库294
- 后序297
4. Unity 3D人工智能编程 #
- 前 言
- 第1章 人工智能导论 1
- 1.1 人工智能 1
- 1.2 游戏中的人工智能 2
- 1.3 人工智能技术 3
- 1.3.1 有限状态机 3
- 1.3.2 人工智能中的随机性和概率 5
- 1.3.3 感应器系统 6
- 1.3.4 群组、蜂拥和羊群效应 7
- 1.3.5 路径跟随和引导 8
- 1.3.6 A*寻路算法 9
- 1.3.7 导航网格 16
- 1.3.8 行为树 18
- 1.3.9 运动 20
- 1.3.10 Dijkstra算法 23
- 1.4 本章小结 23
- 第2章 有限状态机 24
- 2.1 玩家的坦克 24
- 2.1.1 PlayerTankController类 25
- 2.1.2 初始化 26
- 2.2 子弹类 29
- 2.3 设置航点 31
- 2.4 抽象有限状态机类 32
- 2.5 敌方坦克的人工智能 34
- 2.5.1 巡逻状态 36
- 2.5.2 追逐状态 38
- 2.5.3 攻击状态 38
- 2.5.4 死亡状态 40
- 2.6 使用有限状态机框架 42
- 2.6.1 AdvanceFSM类 42
- 2.6.2 FSMState类 43
- 2.6.3 状态类 44
- 2.6.4 NPCTankController 类 46
- 2.7 本章小结 48
- 第3章 随机性和概率 49
- 3.1 随机性 50
- 3.2 概率的定义 52
- 3.2.1 独立与关联事件 53
- 3.2.2 条件概率 53
- 3.3 人物个性 56
- 3.4 有限状态机和概率 57
- 3.5 动态人工智能 59
- 3.6 示例老虎机 60
- 3.6.1 随机老虎机 60
- 3.6.2 加权概率 63
- 3.7 本章小结 68
- 第4章 感应器的实现 70
- 4.1 基本的感觉系统 71
- 4.2 场景设置 72
- 4.3 玩家的坦克与切面 73
- 4.3.1 玩家的坦克 74
- 4.3.2 切面 75
- 4.4 人工智能角色 76
- 4.4.1 感观 77
- 4.4.2 视觉 78
- 4.4.3 触觉 80
- 4.5 测试 82
- 4.6 本章小结 83
- 第5章 群组行为 84
- 5.1 岛屿示例中的群组行为 84
- 5.1.1 个体的行为 85
- 5.1.2 控制器 90
- 5.2 替代实现 92
- 5.3 本章小结 99
- 第6章 路径跟随和引导行为 100
- 6.1 跟随一条路径 100
- 6.1.1 路径脚本 102
- 6.1.2 路径跟随 103
- 6.2 避开障碍物 106
- 6.2.1 添加定制图层 107
- 6.2.2 避开障碍 108
- 6.3 本章小结 113
- 第7章 A*寻路算法 114
- 7.1 回顾A*寻路算法 114
- 7.2 实现 116
- 7.2.1 Node 116
- 7.2.2 PriorityQueue 117
- 7.2.3 GridManager 118
- 7.2.4 AStar 123
- 7.2.5 TestCode类 126
- 7.3 场景设置 128
- 7.4 测试 131
- 7.5 本章小结 132
- 第8章 导航网格 133
- 8.1 简介 134
- 8.2 设置地图 134
- 8.2.1 Navigation Static 135
- 8.2.2 烘焙导航网格 135
- 8.2.3 导航网格代理 136
- 8.3 有斜坡的场景 139
- 8.4 NavMeshLayers 141
- 8.5 分离网格链接 144
- 8.5.1 生成分离网格链接 145
- 8.5.2 手动生成分离网格链接 146
- 8.6 本章小结 148
- 第9章 行为树 149
- 9.1 Behave插件 149
- 9.2 工作流 151
- 9.3 行为节点 153
- 9.4 与脚本的接口 155
- 9.5 装饰节点 158
- 9.6 Behave调试器 160
- 9.7 顺序节点 160
- 9.8 探索Behave的结果 162
- 9.9 选择节点 163
- 9.10 优先级选择节点 166
- 9.11 并行节点 168
- 9.12 引用 169
- 9.13 机器人与外星人项目 170
- 9.14 本章小结 173
- 第10章 融会贯通 174
- 10.1 场景设置 175
- 10.2 车辆 177
- 10.2.1 玩家控制的车辆 178
- 10.2.2 人工智能车辆控制器 180
- 10.2.3 有限状态机 182
- 10.3 武器 187
- 10.3.1 枪 187
- 10.3.2 子弹 189
- 10.3.3 发射器 191
- 10.3.4 导弹 193
- 10.4 本章小结 195
5. Unity官方案例精讲 #
- 第 1 章 C# 脚本编程基础 ………………. 1
- 1.1 配置脚本开发环境 ………………………………..2
- 1.1.1 配置 Visual Studio …………………….2
- 1.1.2 配置MonoDevelop ……………………6
- 1.1.3 脚本的创建 ……………………………..8
- 1.2 变量、数组与函数 ………………………………..9
- 1.2.1 变量的声明与使用 ……………………9
- 1.2.2 数组的声明与使用 ………………….11
- 1.2.3 函数的声明与使用 ………………….12
- 1.3 语句、表达式与运算符 ……………………. 14
- 1.3.1 语句 ……………………………………….14
- 1.3.2 表达式 ……………………………………16
- 1.3.3 运算符 ……………………………………16
- 1.4 协程(Coroutine) ………………………………. 18
- 1.5 类与类的使用 ……………………………………… 21
- 1.6 输出调试信息 ……………………………………… 22
- 1.7 C# 脚本示例 ………………………………………… 22
- 1.8 Unity 脚本事件执行顺序 ………………….. 26
- 1.9 脚本模板与脚本编码 ………………………… 28
- 1.10 Unity 5 脚本升级 ……………………………… 29
- 第 2 章 JavaScript 脚本编程基础 ….. 31
- 2.1 JavaScript 脚本编程基础 ………………….. 32
- 2.2 变量、数组与函数 …………………………….. 32
- 2.2.1 变量 ……………………………………….32
- 2.2.2 数组 ……………………………………….33
- 2.2.3 函数 ……………………………………….35
- 2.3 表达式、语句与运算符 ……………………. 37
- 2.4 JavaScript 脚本示例 …………………………… 39
- 2.5 JavaScript 脚本与 C# 脚本的交互 …… 41
- 第 3 章星际航行游戏——JSpace Shooter ……………… 45
- 3.1 导入模型、贴图和材质 ……………………. 46
- 3.1.1 导入资源包文件 ……………………..46
- 3.1.2 创建飞船对象 …………………………49
- 3.1.3 设置摄像机参数 ……………………..50
- 3.1.4 添加图片背景 …………………………50
- 3.1.5 添加粒子背景效果 ………………….52
- 3.2 编写脚本代码 ……………………………………… 53
- 3.2.1 键盘控制飞船移动 ………………….53
- 3.2.2 实现射击行为(Shot) …………….57
- 3.2.3 添加小行星(Asteroid) …………..61
- 3.3 添加音频 ……………………………………………… 69
- 3.3.1 添加碰撞爆炸音频 ………………….69
- 3.3.2 添加飞船射击音频 ………………….69
- 3.3.3 添加背景音效 …………………………70
- 3.4 添加计分文本 ……………………………………… 71
- 3.4.1 添加计分 Text 组件 …………………71
- 3.4.2 添加计分功能 …………………………72
- 3.5 游戏结束与重新开始 ………………………… 74
- 3.5.1 添加游戏结束的 Text 组件 ………74
- 3.5.2 添加结束游戏的功能 ………………75
- 3.5.3 添加重新开始的 Text 组件 ………76
- 3.5.4 添加重新开始游戏的功能 ……….77
- 第 4 章潜行游戏——Stealth ……….. 79
- 4.1 加载场景 …………………………………………… 80
- 4.1.1 创建场景 ………………………………..80
- 4.1.2 添加场景元素 …………………………80
- 4.1.3 添加灯光 ………………………………..82
- 4.1.4 烘焙场景Lightmaps ………………..84
- 4.1.5 添加 Tag 管理类 ……………………..87
- 4.1.6 添加转场效果 …………………………87
- 4.1.7 添加游戏控制器GameController ……………………….89
- 4.1.8 添加 CCTV Camera …………………92
- 4.1.9 添加 Laser Grid ……………………….94
- 4.2 导入和配置人物角色 ………………………… 97
- 4.2.1 导入角色模型 …………………………97
- 4.2.2 设置角色动画 …………………………98
- 4.2.3 创建动画参数管理类 ………………99
- 4.2.4 添加控制角色运动功能 …………101
- 4.2.5 添加控制摄像机跟随的功能 ….104
- 4.3 主角与环境交互 ………………………………..107
- 4.3.1 添加控制开关台的功能 …………107
- 4.3.2 添加管理房间钥匙卡的功能 ….110
- 4.3.3 添加控制单开门的功能 …………112
- 4.3.4 添加控制双开门的功能 …………115
- 4.4 主角与敌人交互 ………………………………..116
- 4.4.1 添加管理角色生命值的功能 ….116
- 4.4.2 添加敌人角色模型 ………………..118
- 4.4.3 添加敌人自动搜索角色的功能 …………………………120
- 4.4.4 添加控制敌人运动功能 …………123
- 4.4.5 添加控制敌人射击的功能 ……..126
- 第 5 章粒子碰撞回调功能——Particle Callbacks ………….. 129
- 5.1 Shuriken 粒子系统介绍 ……………………130
- 5.2 加载场景 …………………………………………….131
- 5.3 创建粒子效果 …………………………………….134
- 5.3.1 创建燃烧时冒烟的粒子效果 …..134
- 5.3.2 创建燃烧时火星四溅的粒子效果 ………………………….139
- 5.3.3 火焰大小控制 ……………………….140
- 5.3.4 创建洒水的粒子效果 …………….143
- 5.3.5 控制洒水位置 ……………………….146
- 5.4 碰撞回调函数解析 ……………………………148
- 5.5 粒子碰撞回调函数应用案例 …………..153
- 5.5.1 水滴与桶盖碰撞的处理 …………153
- 5.5.2 实现水滴与燃烧桶碰撞熄灭火焰的效果 …………………….155
- 第 6 章Mecanim动画系统介绍——Mecanim Example Scenes ….. 159
- 6.1 Mecanim动画系统简介 …………………..160
- 6.1.1 Mecanim动画系统的工作流 ….160
- 6.1.2 Mecanim动画系统中的术语 ….160
6. Unity Shader入门精要 #
- 第1篇 基础篇
-
- 第1章 欢迎来到Shader的世界 2
- 1.1 程序员的三大浪漫 2
- 1.2 本书结构 3
-
- 第2章 渲染流水线 5
- 2.1 综述 5
- 2.1.1 什么是流水线 5
- 2.1.2 什么是渲染流水线 6
- 2.2 CPU和GPU之间的通信 7
- 2.2.1 把数据加载到显存中 7
- 2.2.2 设置渲染状态 8
- 2.2.3 调用Draw Call 8
- 2.3 GPU流水线 9
- 2.3.1 概述 9
- 2.3.2 顶点着色器 10
- 2.3.3 裁剪 11
- 2.3.4 屏幕映射 11
- 2.3.5 三角形设置 12
- 2.3.6 三角形遍历 13
- 2.3.7 片元着色器 13
- 2.3.8 逐片元操作 14
- 2.3.9 总结 17
- 2.4 一些容易困惑的地方 18
- 2.4.1 什么是OpenGL/DirectX 18
- 2.4.2 什么是HLSL、GLSL、CG 19
- 2.4.3 什么是Draw Call 20
- 2.4.4 什么是固定管线渲染 22
- 2.5 那么,你明白什么是Shader了吗 23
- 2.6 扩展阅读 23
-
- 第3章 Unity Shader基础 24
- 3.1 Unity Shader概述 25
- 3.1.1 一对好兄弟:材质和Unity Shader 25
- 3.1.2 Unity中的材质 26
- 3.1.3 Unity中的Shader 26
- 3.2 Unity Shader的基础:ShaderLab 28
- 3.3 Unity Shader的结构 29
- 3.3.1 给我们的Shader起个名字 29
- 3.3.2 材质和Unity Shader的桥梁:Properties 29
- 3.3.3 重量级成员:SubShader 31
- 3.3.4 留一条后路:Fallback 33
- 3.3.5 ShaderLab还有其他的
- 语义吗 33
- 3.4 Unity Shader的形式 33
- 3.4.1 Unity的宠儿:表面着色器 34
- 3.4.2 最聪明的孩子:顶点/片元着
- 色器 35
- 3.4.3 被抛弃的角落:固定函数着
- 色器 35
- 3.4.4 选择哪种Unity Shader形式 36
- 3.5 本书使用的Unity Shader形式 36
- 3.6 答疑解惑 36
- 3.6.1 Unity Shader != 真正的Shader 36
- 3.6.2 Unity Shader和CG/HLSL之间的关系 37
- 3.6.3 我可以使用GLSL来写吗 38
- 3.7 扩展阅读 38
-
- 第4章 学习Shader所需的数学基础 39
- 4.1 背景:农场游戏 39
- 4.2 笛卡儿坐标系 40
- 4.2.1 二维笛卡儿坐标系 40
- 4.2.2 三维笛卡儿坐标系 41
- 4.2.3 左手坐标系和右手坐标系 42
- 4.2.4 Unity使用的坐标系 44
- 4.2.5 练习题 45
- 4.3 点和矢量 45
- 4.3.1 点和矢量的区别 46
- 4.3.2 矢量运算 47
- 4.3.3 练习题 53
- 4.4 矩阵 54
- 4.4.1 矩阵的定义 54
- 4.4.2 和矢量联系起来 55
- 4.4.3 矩阵运算 55
- 4.4.4 特殊的矩阵 57
- 4.4.5 行矩阵还是列矩阵 60
- 4.4.6 练习题 61
- 4.5 矩阵的几何意义:变换 62
- 4.5.1 什么是变换 62
- 4.5.2 齐次坐标 63
- 4.5.3 分解基础变换矩阵 63
- 4.5.4 平移矩阵 64
- 4.5.5 缩放矩阵 64
- 4.5.6 旋转矩阵 65
- 4.5.7 复合变换 66
- 4.6 坐标空间 67
- 4.6.1 为什么要使用这么多不同的坐标空间 68
- 4.6.2 坐标空间的变换 68
- 4.6.3 顶点的坐标空间变换过程 72
- 4.6.4 模型空间 73
- 4.6.5 世界空间 73
- 4.6.6 观察空间 75
- 4.6.7 裁剪空间 77
- 4.6.8 屏幕空间 83
- 4.6.9 总结 85
- 4.7 法线变换 86
- 4.8 Unity Shader的内置变量(数学篇) 87
- 4.8.1 变换矩阵 87
- 4.8.2 摄像机和屏幕参数 88
- 4.9 答疑解惑 89
- 4.9.1 使用3×3还是4×4的
- 变换矩阵 89
- 4.9.2 CG中的矢量和矩阵类型 89
- 4.9.3 Unity中的屏幕坐标:ComputeScreenPos/VPOS/
- WPOS 90
- 4.10 扩展阅读 93
- 4.11 练习题答案 93
- 第2篇 初级篇
-
- 第5章 开始Unity Shader学习之旅 100
- 5.1 本书使用的软件和环境 100
- 5.2 一个最简单的顶点/片元着色器 100
- 5.2.1 顶点/片元着色器的基本
- 结构 101
- 5.2.2 模型数据从哪里来 103
- 5.2.3 顶点着色器和片元着色器之间如何通信 104
- 5.2.4 如何使用属性 105
- 5.3 强大的援手:Unity提供的内置文件和变量 107
- 5.3.1 内置的包含文件 107
- 5.3.2 内置的变量 109
- 5.4 Unity提供的CG/HLSL语义 109
- 5.4.1 什么是语义 109
- 5.4.2 Unity支持的语义 110
- 5.4.3 如何定义复杂的变量类型 110
- 5.5 程序员的烦恼:Debug 111
- 5.5.1 使用假彩色图像 111
- 5.5.2 利用神器:Visual Studio 113
- 5.5.3 最新利器:帧调试器 113
- 5.6 小心:渲染平台的差异 115
- 5.6.1 渲染纹理的坐标差异 115
- 5.6.2 Shader的语法差异 116
- 5.6.3 Shader的语义差异 117
- 5.6.4 其他平台差异 117
- 5.7 Shader整洁之道 117
- 5.7.1 float、half还是fixed 117
- 5.7.2 规范语法 118
- 5.7.3 避免不必要的计算 118
- 5.7.4 慎用分支和循环语句 119
- 5.7.5 不要除以0 119
- 5.8 扩展阅读 120
-
- 第6章 Unity中的基础光照 121
- 6.1 我们是如何看到这个世界的 121
- 6.1.1 光源 121
- 6.1.2 吸收和散射 122
- 6.1.3 着色 122
- 6.1.4 BRDF光照模型 123
- 6.2 标准光照模型 123
- 6.2.1 环境光 123
- 6.2.2 自发光 124
- 6.2.3 漫反射 124
- 6.2.4 高光反射 124
- 6.2.5 逐像素还是逐顶点 125
- 6.2.6 总结 125
- 6.3 Unity中的环境光和自发光 126
- 6.4 在Unity Shader中实现漫反射光照
- 模型 126
- 6.4.1 实践:逐顶点光照 126
- 6.4.2 实践:逐像素光照 129
- 6.4.3 半兰伯特模型 130
- 6.5 在Unity Shader中实现高光反射
- 光照模型 131
- 6.5.1 实践:逐顶点光照 132
- 6.5.2 实践:逐像素光照 134
- 6.5.3 Blinn-Phong光照模型 135
- 6.6 召唤神龙:使用Unity内置的
- 函数 136
-
- 第7章 基础纹理 139
- 7.1 单张纹理 140
- 7.1.1 实践 140
- 7.1.2 纹理的属性 142
- 7.2 凹凸映射 146
- 7.2.1 高度纹理 146
- 7.2.2 法线纹理 146
- 7.2.3 实践 148
- 7.2.4 Unity中的法线纹理类型 154
- 7.3 渐变纹理 155
- 7.4 遮罩纹理 158
- 7.4.1 实践 159
- 7.4.2 其他遮罩纹理 161
-
- 第8章 透明效果 162
- 8.1 为什么渲染顺序很重要 163
- 8.2 Unity Shader的渲染顺序 164
- 8.3 透明度测试 165
- 8.4 透明度混合 169
- 8.5 开启深度写入的半透明效果 171
- 8.6 ShaderLab的混合命令 173
- 8.6.1 混合等式和参数 173
- 8.6.2 混合操作 174
- 8.6.3 常见的混合类型 175
- 8.7 双面渲染的透明效果 176
- 8.7.1 透明度测试的双面渲染 176
- 8.7.2 透明度混合的双面渲染 176
- 第3篇 中级篇
-
- 第9章 更复杂的光照 180
- 9.1 Unity的渲染路径 180
- 9.1.1 前向渲染路径 182
- 9.1.2 顶点照明渲染路径 185
- 9.1.3 延迟渲染路径 186
- 9.1.4 选择哪种渲染路径 188
- 9.2 Unity的光源类型 188
- 9.2.1 光源类型有什么影响 189
- 9.2.2 在前向渲染中处理不同的
- 光源类型 190
- 9.3 Unity的光照衰减 195
- 9.3.1 用于光照衰减的纹理 196
- 9.3.2 使用数学公式计算衰减 196
- 9.4 Unity的阴影 196
- 9.4.1 阴影是如何实现的 197
- 9.4.2 不透明物体的阴影 198
- 9.4.3 使用帧调试器查看阴影绘制过程 202
- 9.4.4 统一管理光照衰减和阴影 204
- 9.4.5 透明度物体的阴影 206
- 9.5 本书使用的标准Unity Shader 209
-
- 第10章 高级纹理 210
- 10.1 立方体纹理 210
- 10.1.1 天空盒子 210
- 10.1.2 创建用于环境映射的立方体
- 纹理 212
- 10.1.3 反射 213
- 10.1.4 折射 215
- 10.1.5 菲涅耳反射 217
- 10.2 渲染纹理 219
- 10.2.1 镜子效果 219
- 10.2.2 玻璃效果 220
- 10.2.3 渲染纹理 vs. GrabPass 224
- 10.3 程序纹理 225
- 10.3.1 在Unity中实现简单的程序
- 纹理 225
- 10.3.2 Unity的程序材质 228
-
- 第11章 让画面动起来 230
- 11.1 Unity Shader中的内置变量
- (时间篇) 230
- 11.2 纹理动画 230
- 11.2.1 序列帧动画 230
- 11.2.2 滚动的背景 233
- 11.3 顶点动画 234
- 11.3.1 流动的河流 234
- 11.3.2 广告牌 236
- 11.3.3 注意事项 239
- 第4篇 高级篇
-
- 第12章 屏幕后处理效果 244
- 12.1 建立一个基本的屏幕后处理脚本
- 系统 244
- 12.2 调整屏幕的亮度、饱和度和
- 对比度 246
- 12.3 边缘检测 249
- 12.3.1 什么是卷积 249
- 12.3.2 常见的边缘检测算子 249
- 12.3.3 实现 250
- 12.4 高斯模糊 253
- 12.4.1 高斯滤波 253
- 12.4.2 实现 254
- 12.5 Bloom效果 259
- 12.6 运动模糊 263
- 12.7 扩展阅读 266
-
- 第13章 使用深度和法线纹理 267
- 13.1 获取深度和法线纹理 267
- 13.1.1 背后的原理 267
- 13.1.2 如何获取 269
- 13.1.3 查看深度和法线纹理 271
- 13.2 再谈运动模糊 272
- 13.3 全局雾效 276
- 13.3.1 重建世界坐标 276
- 13.3.2 雾的计算 278
- 13.3.3 实现 278
- 13.4 再谈边缘检测 283
- 13.5 扩展阅读 287
-
- 第14章 非真实感渲染 288
- 14.1 卡通风格的渲染 288
- 14.1.1 渲染轮廓线 288
- 14.1.2 添加高光 289
- 14.1.3 实现 290
- 14.2 素描风格的渲染 293
- 14.3 扩展阅读 296
- 14.4 参考文献 297
-
- 第15章 使用噪声 298
- 15.1 消融效果 298
- 15.2 水波效果 302
- 15.3 再谈全局雾效 305
- 15.4 扩展阅读 309
- 15.5 参考文献 309
-
- 第16章 Unity中的渲染优化技术 310
- 16.1 移动平台的特点 310
- 16.2 影响性能的因素 311
- 16.3 Unity中的渲染分析工具 312
- 16.3.1 认识Unity 5的渲染统计
- 窗口 312
- 16.3.2 性能分析器的渲染区域 313
- 16.3.3 再谈帧调试器 313
- 16.3.4 其他性能分析工具 314
- 16.4 减少draw call数目 314
- 16.4.1 动态批处理 315
- 16.4.2 静态批处理 316
- 16.4.3 共享材质 318
- 16.4.4 批处理的注意事项 318
- 16.5 减少需要处理的顶点数目 319
- 16.5.1 优化几何体 319
- 16.5.2 模型的LOD技术 319
- 16.5.3 遮挡剔除技术 320
- 16.6 减少需要处理的片元数目 320
- 16.6.1 控制绘制顺序 320
- 16.6.2 时刻警惕透明物体 321
- 16.6.3 减少实时光照和阴影 321
- 16.7 节省带宽 322
- 16.7.1 减少纹理大小 322
- 16.7.2 利用分辨率缩放 323
- 16.8 减少计算复杂度 323
- 16.8.1 Shader的LOD技术 323
- 16.8.2 代码方面的优化 323
- 16.8.3 根据硬件条件进行缩放 324
- 16.9 扩展阅读 324
- 第5篇 扩展篇
-
- 第17章 Unity的表面着色器探秘 328
- 17.1 表面着色器的一个例子 328
- 17.2 编译指令 330
- 17.2.1 表面函数 330
- 17.2.2 光照函数 330
- 17.2.3 其他可选参数 331
- 17.3 两个结构体 332
- 17.3.1 数据来源:Input结构体 332
- 17.3.2 表面属性:SurfaceOutput
- 结构体 333
- 17.4 Unity背后做了什么 334
- 17.5 表面着色器实例分析 336
- 17.6 Surface Shader的缺点 341
-
- 第18章 基于物理的渲染 342
- 18.1 PBS的理论和数学基础 342
- 18.1.1 光是什么 343
- 18.1.2 双向反射分布函数
- (BRDF) 344
- 18.1.3 漫反射项 345
- 18.1.4 高光反射项 346
- 18.1.5 Unity中的PBS实现 347
- 18.2 Unity 5的Standard Shader 348
- 18.2.1 它们是如何实现的 348
- 18.2.2 如何使用Standard Shader 349
- 18.3 一个更加复杂的例子 352
- 18.3.1 设置光照环境 352
- 18.3.2 放置反射探针 355
- 18.3.3 调整材质 356
- 18.3.4 线性空间 356
- 18.4 答疑解惑 357
- 18.4.1 什么是全局光照 357
- 18.4.2 什么是伽马校正 358
- 18.4.3 什么是HDR 361
- 18.4.4 那么,PBS适合什么样的
- 游戏 362
- 18.5 扩展阅读 363
- 18.6 参考文献 363
-
- 第19章 Unity 5更新了什么 365
- 19.1 场景“更亮了” 365
- 19.2 表面着色器更容易“报错了” 365
- 19.3 当家做主:自己控制非统一缩放的
- 网格 366
- 19.4 固定管线着色器逐渐退出舞台 366
-
- 第20章 还有更多内容吗 368
- 20.1 如果你想深入了解渲染的话 368
- 20.2 世界那么大 369
- 20.3 参考文献 369
End.
Note by HF.