首页 > 学院 > 开发设计 > 正文

# Unity 自学与进阶必会目录

2019-11-09 18:47:26
字体:
来源:转载
供稿:网友

六本书

Unity 5权威讲解Unity 3D NGUI 实战教程Unity 5实战 使用C和Unity开发多平台游戏Unity 3D人工智能编程Unity官方案例精讲Unity Shader入门精要

1. Unity 5权威讲解 #

目录

第1章 Unity 5简介 11.1 Unity 3D游戏引擎的诞生 21.2 Unity 5的优势 21.2.1 支持多平台 21.2.2 集成开发环境 31.2.3 所有功能免费 41.2.4 中间件内建 51.2.5 开放社区 51.2.6 资源商店 61.3 使用Unity制作的游戏 71.4 下载Unity 91.4.1 安装Unity 101.4.2 选择Unity许可 111.4.3 注册并登录Unity 121.5 Unity界面 131.5.1 视图 161.5.2 工具栏 271.5.3 设置快捷键 341.6 小结 34第2章 准备游戏开发 352.1 开发的游戏以及开发顺序 362.2 新建项目 362.3 设置Unity IDE 372.4 系统管理项目视图 392.5 导入角色模型 392.6 创建资源商店账号 422.7 从项目视图访问资源商店 442.8 从资源商店下载资源 452.9 小结 48第3章 制作游戏场景 493.1 3D模型 503.2 纹理 513.3 材质 533.4 应用纹理 543.5 着色器以及基于物理的着色 583.5.1 渲染模式 593.5.2 反照率 593.5.3 金属 593.5.4 法线贴图 593.5.5 高度图 603.5.6 遮挡贴图 603.5.7 放射 613.5.8 细节遮蔽 613.6 表现地面阴影——使用法线贴图 613.7 预设 623.8 用预设制作墙体 643.9 光照 683.9.1 平行光 683.9.2 点光源 693.9.3 聚光灯 693.9.4 区域光 703.10 天空的表现方法 713.10.1 六面天空盒 723.10.2 程序天空盒 743.10.3 立方图天空盒 763.11 小结 76第4章 制作主人公角色 774.1 空游戏对象 784.2 导入3D模型并设置选项 794.3 组件 804.4 生成脚本 814.5 下载键盘输入值 844.6 角色移动 874.6.1 处理组件缓存 884.6.2 游戏对象的移动 894.6.3 Translate函数 904.7 单位向量 914.8 角色旋转:Rotate 944.9 摄像机追踪:Follow Cam 954.10 Legacy动画系统 984.11 动画片段 994.12 动画控件 1044.13 动画合成 1074.14 实时阴影 1084.15 运用投影器制作阴影 1114.16 运用平面网格制作阴影 1154.17 小结 117第5章 制作子弹发射效果 1195.1 准备子弹模型 1205.2 Rigidbody组件 1215.3 设置物理引擎属性:Physics Manager 1245.4 Collider组件 1255.4.1 Box Collider 1255.4.2 Sphere Collider 1255.4.3 Capsule Collider 1265.4.4 Mesh Collider 1265.4.5 Wheel Collider 1275.4.6 Terrain Collider 1285.5 碰撞感知条件 1285.6 碰撞事件 1305.7 Tag应用 1325.8 子弹发射逻辑 1355.9 制作子弹发射轨迹:Trail Renderer 1405.10 应用粒子系统 1455.11 制作爆炸效果并设置爆炸威力 1505.12 随机使用纹理 1555.13 声音:AudioSource与AudioListener 1575.14 枪口火焰效果:Muzzle Flash 1645.15 小结 170第6章 制作敌对角色 1716.1 Mecanim动画系统 1726.2 导入怪兽3D模型 1736.3 转换为Mecanim动画 1736.4 动画控制器 1776.5 导航:怪兽追击例程 1836.5.1 生成导航网格并烘焙 1846.5.2 Nav Mesh Agent 1856.6 实现人工智能 1886.7 怪兽攻击例程 1976.8 怪兽被袭时的反应 1996.9 血迹效果 2036.10 贴图:地面上的血迹效果 2066.11 赋予怪兽攻击技能 2116.12 特定层之间的碰撞感知 2156.13 优化Mecanim动画角色的骨骼结构 2186.14 怪兽停止攻击:Tag 2206.15 怪兽停止攻击:Delegate、Event 2246.16 怪兽的死亡处理 2286.17 小结 235第7章 Unity UI 2377.1 Canvas对象 2387.1.1 EventSystem对象 2397.1.2 Canvas组件 2407.2 Rect Transform组件 2447.3 anchoredPosition属性 2527.4 Image组件 2547.4.1 Simple 2567.4.2 Sliced 2567.4.3 Tiled 2587.4.4 Filed 2587.5 RawImage 组件 2597.6 Button组件 2607.7 Text组件 2717.8 Scroll Rect组件 2727.8.1 Content属性 2757.8.2 Mask组件 2767.9 制作游戏分数UI 2777.10 制作生命条 2857.11 小结 289第8章 游戏管理器 2918.1 怪兽出现逻辑 2928.2 访问游戏管理器 2968.3 单例模式 2988.4 对象池 3008.5 共享函数:声音处理 3088.6 小结 311第9章 灵活运用射线投射 3139.1 射线投射 3149.2 油桶爆炸 3199.3 实现激光束 322第10章 导航仪高级技巧 32910.1 动态障碍物 33010.2 分离网格链接 33310.3 用户自定义生成分离网格链接 335第11章 光照贴图、灯光探测器 33711.1 光照 33811.1.1 Generate Lightmap UVs 选项 33811.1.2 Lightmap Static标记 33811.1.3 光照视图 33911.1.4 准备烘焙光照的过程 34111.1.5 Auto选项 34211.1.6 构建光照贴图 34211.1.7 Area Light 34511.2 灯光探测器 34611.2.1 Light PRobe Group 34711.2.2 Anchor Override 35011.3 小结 351第12章 场景分离与合并 35312.1 场景分离 35412.2 场景合并 357第13章 Unity内置网络游戏 36113.1 网络游戏的定义 36213.2 网络游戏的物理结构 36213.3 网络通信协议 36313.4 Unity内置网络功能 36313.4.1 网络视图 36413.4.2 状态同步 36413.4.3 远程过程调用 36513.5 Unity网络游戏步骤 36613.5.1 游戏服务器初始化 36613.5.2 客户端游戏连接 36713.5.3 各游戏端点之间的通信 36813.6 开发网络游戏 36813.6.1 生成并初始化项目 36913.6.2 场景制作 36913.6.3 制作Player 37113.6.4 Character Controller移动逻辑 37113.6.5 制作网络管理器 37313.6.6 构建可执行文件 37413.6.7 查看连接网络的用户数量 37713.6.8 制作网络玩家 38013.6.9 摄像机追踪逻辑 38313.6.10 平滑的同步处理(OnSerializeNetworkView) 38713.6.11 发射例程(调用RPC) 39213.6.12 动画同步 39913.6.13 探测子弹的碰撞 40513.6.14 死亡和复活处理 40613.6.15 终止连接的相关处理 41413.7 小结 415第14章 使用Photon Cloud制作网络游戏 41714.1 第二代Unity网络游戏引擎UNET 41814.2 第三方网络游戏引擎 41814.3 PhotonNetwork游戏引擎 41814.3.1 Photon Server与Photon Cloud 41914.3.2 加入会员 41914.4 制作坦克大战游戏 42114.4.1 坦克移动逻辑 42214.4.2 履带动画 42414.4.3 设置摄像机追踪逻辑与摄像机位置 42714.4.4 旋转炮塔 42814.4.5 调整炮身角度 43114.4.6 建立炮弹预设和发射逻辑 43214.4.7 炮弹发射音效 43814.5 安装Photon Unity Networking插件 43914.6 将坦克游戏更改为Photon Cloud版本 44114.6.1 连接Photon Cloud 44214.6.2 随机配对 44414.6.3 制作房间 44514.6.4 Photon View 44714.6.5 动态生成坦克 44814.6.6 构建游戏并测试连接 45114.6.7 控制自己的坦克 45314.6.8 平滑移动和旋转处理 45414.6.9 同步炮塔与炮身 45814.6.10 发射炮弹 46314.6.11 坦克被击中时的处理及复活 46514.7 制作游戏大厅 46914.7.1 制作大厅场景 46914.7.2 制作登录UI 47114.7.3 进入游戏房间 47914.7.4 制作坦克HUD 48414.7.5 创建并进入房间 49214.7.6 构建房间目录UI 49714.7.7 接收房间列表 50414.7.8 动态增加按钮事件 51614.8 战地细节功能 52014.8.1 显示房间内的玩家数 52014.8.2 退出房间 52314.8.3 显示连接日志 52514.8.4 事件钩子 53014.9 评分并显示 53414.10 在Unity中连接数据库 547 14.10.1 JSON 547 14.10.2 SimpleJSON 549 14.10.3 将分数信息保存到数据库 551 14.10.4 从数据库获取排名信息 55414.11 小结 557第15章 提升游戏真实感 55915.1 布娃娃系统 56015.1.1 创建项目并下载资源 56015.1.2 制作舞台 56115.1.3 生成3D模型的布娃娃系统 56215.2 触屏 57115.2.1 ScreenPointToRay函数 57115.2.2 Touch类 57415.2.3 Unity Remote4 57715.3 通过触屏移动 57915.4 小结 582附录 数据库 5831.数据库和数据库管理系统 5842.数据库服务器 5843. SQL 5844. DBMS的数据管理 5845.数据表 5856.列与行 5857. SQL 586

2. Unity 3D NGUI 实战教程 #

第1章 初识NGUI1.1 游戏UI开发介绍1.1.1 什么是游戏UI1.1.2 UI为何如此重要1.1.3 UI开发的流程1.1.4 UI开发的难点1.2 什么是NGUI1.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 创建第一个UI2.5.1 创建一个2D UI2.5.2 创建一个3D UI2.5.3 了解UIRoot、Uipanel和UICamera组件2.6 2DUI和3DUI的工作原理2.6.1 2DUI的工作原理2.6.2 3DUI的工作原理2.6.3 如何判断该选择哪一种UI2.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 什么情况下使用UITexture3.4.2 创建纹理3.4.3 纹理的设置3.5 制作按钮(Button)3.5.1 怎样判断应该使用按钮3.5.2 创建按钮3.5.3 核心组件BoxCollider3.5.4 核心组件UIButton3.5.5 制作按钮的放缩动画3.5.6 制作按钮的偏移动画3.5.7 制作按钮的旋转动画3.5.8 添加按钮单击音效3.5.9 任何事物都可以变成按钮,不仅仅是UI3.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 滚动视图核心组件UIPanel3.8.4 滚动视图核心组件UIScrollView3.8.5 创建一个拖动条3.8.6 拖动条说明3.8.7 让视图内的内容可以被拖动3.8.8 制作滚动视图时的注意事项3.9 制作复选框(Toggle)3.9.1 怎样判断是否应当使用复选框3.9.2 创建复选框3.9.3 复选框的核心组件UIToggle3.10 制作下拉菜单(PopupList)3.10.1 怎样判断是否应当使用下拉菜单3.10.2 创建下拉菜单3.10.3 显示当前选中的选项3.10.4 下拉菜单核心组件PopupList3.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 使用透明度动画TweenAlpha4.2.3 使用透明度动画的注意点4.3 颜色变化动画(变色动画)4.3.1 变色动画的介绍和应用4.3.2 使用颜色动画TweenColor4.3.3 使用颜色动画的注意点4.4 位置变换动画(位移动画)4.4.1 位移动画的介绍和应用4.4.2 使用位移动画TweenPosition4.4.3 使用位移动画的注意点4.5 旋转变化动画(旋转动画)4.5.1 旋转动画的介绍和应用4.5.2 使用旋转动画TweenRotation4.5.3 使用旋转动画的注意点4.6 大小变化动画(放缩动画)4.6.1 放缩动画的介绍和应用4.6.2 使用放缩动画TweenScale4.6.3 使用放缩动画的注意点4.7 Tween动画总结4.8 动画控制组件UIPlayTween4.8.1 为什么要用UIPlayTween4.8.2 动画核心组件UIPlayTween讲解4.8.3 使用UIPlayTween的注意事项4.9 动画控制组件UIPlayAnimation4.9.1 为什么要用UIPlayAnimation4.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自动排列UI5.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章初识Unity31.1为什么Unity如此优秀41.1.1Unity的优势41.1.2要意识到的缺点51.1.3使用Unity构建的游戏案例61.2如何使用Unity91.2.1Scene视图、Game视图和工具栏101.2.2使用鼠标和键盘111.2.3Hierarchy标签和Inspector121.2.4Project和Console标签121.3开始使用Unity编程131.3.1代码在Unity中是如何运行的:脚本组件141.3.2使用MonoDevelop,跨平台的IDE151.3.3打印到控制台:HelloWorld!161.4小结18第2章构建一个让你置身3D空间的演示192.1在开始之前202.1.1对项目做计划202.1.2了解3D坐标空间212.2开始项目:在场景中放置对象222.2.1第二步:地板、外墙和内墙222.2.2灯光和摄像机252.2.3玩家的碰撞器和视口262.3让东西移动:应用变换的脚本272.3.1图示说明如何通过编程实现旋转272.3.2编写代码实现图中演示的运动272.3.3本地和全局坐标空间292.4用于观察周围的组件脚本:MouseLook302.4.1跟踪鼠标运动的水平旋转312.4.2在一定范围内的垂直旋转322.4.3同时水平和垂直旋转332.5键盘输入组件:第一人称控件362.5.1响应按下的键362.5.2设置独立于计算机运行速度的运动速率372.5.3为了碰撞检测,移动CharacterController382.5.4调整组件为走路而不是飞翔392.6小结41第3章为3D游戏添加敌人和子弹433.1通过射线射击443.1.1什么是射线发射443.1.2使用命令ScreenPointToRay来发射453.1.3为准心和击中点添加可视化提示463.2脚本化反应的目标493.2.1确定被击中的对象493.2.2警告目标它被击中503.3基本漫游AI523.3.1图解基础AI的工作原理523.3.2使用射线发射发现障碍物523.3.3跟踪角色状态543.4产生敌人预设553.4.1什么是预设553.4.2创建敌人预设563.4.3在不可见的SceneController中实例化573.5通过实例化对象进行射击593.5.1创建子弹预设593.5.2发射子弹并和目标碰撞603.5.3伤害玩家633.6小结63第4章为游戏开发图形654.1了解美术资源654.2构建基础3D场景:白盒674.2.1白盒的解释684.2.2为关卡绘制地板平面图684.2.3根据平面图布局几何体694.3使用2D图像给场景贴图704.3.1选择文件格式714.3.2导入图像文件724.3.3应用图像734.4使用贴图图像产生天空视觉效果754.4.1什么是天空盒754.4.2创建一个新天空盒材质764.5使用自定义3D模型774.5.1选择文件格式784.5.2导出和导入模型794.6使用粒子系统创建效果814.6.1调整默认效果的参数824.6.2为火焰应用新贴图834.6.3将粒子效果附加到3D对象上844.7小结85第Ⅱ部分轻松工作第5章使用Unity新的2D功能构建一款记忆力游戏895.1设置2D图形905.1.1为项目做准备905.1.2显示2D图像(亦称精灵)925.1.3将摄像机切换为2D模式945.2构建卡片对象并让它响应单击955.2.1从精灵构建对象955.2.2鼠标输入代码965.2.3当单击时显示卡片965.3显示不同的卡片图像975.3.1通过程序加载图像975.3.2通过不可见的SceneController来设置图像985.3.3实例化一个网格的卡片1005.3.4打乱卡片1015.4实现匹配和匹配得分1035.4.1保存并比较翻开的卡片1045.4.2隐藏错误卡片1045.4.3显示积分的文本1055.5重启按钮1065.5.1使用SendMessage编写UIButton组件1075.5.2从SceneController中调用LoadLevel1095.6小结110第6章在3D游戏中放置2D图形用户界面1116.1在开始写代码之前……1126.1.1直接模式GUI还是高级2D界面1126.1.2规划布局1136.1.3导入UI图像1146.2设置GUI显示1146.2.1为界面创建画布1156.2.2按钮、图像和文本标签1166.2.3控制UI元素的位置1186.3编写UI中的交互1196.3.1编写不可见的UIController1206.3.2创建弹出窗口1216.3.3使用滑动条和输入域设置值1246.4通过响应事件更新游戏1266.4.1集成事件系统1276.4.2从场景中广播和侦听事件1276.4.3从HUD广播和侦听事件1286.5小结130第7章创建第三人称3D游戏:玩家移动和动画1317.1调整摄像机视图为第三人称视角1337.1.1导入一个用于观察的角色1337.1.2将阴影添加到场景1347.1.3摄像机环绕玩家角色1357.2编写程序控制camera-relative的移动1377.2.1旋转角色,以朝向移动方向1387.2.2朝着方向向前移动1407.3实现跳跃动作1417.3.1应用垂直速度和加速度1427.3.2修改地面检测来处理边缘和斜坡1437.4设置玩家角色上的动画1467.4.1在导入的模型上定义动画剪辑1487.4.2为动画创建动画控制器1497.4.3编写操作Animator组件的代码1537.5小结154第8章在游戏中添加交互设施和物件1558.1创建门和其他设施1568.1.1由按键控制开/关的门1568.1.2在开门之前检查距离和朝向1578.1.3创建一个变色监控器1598.2通过碰撞与对象交互1608.2.1和具有物理功能的障碍物碰撞1608.2.2用一个压力板来触发门1618.2.3收集当前关卡游戏中分散的物件1638.3管理仓库数据和游戏状态1658.3.1设置玩家和仓库管理器1658.3.2编程实现游戏管理器1668.3.3把物品存储在集合对象中:List与Dictionary1708.4使用和装备物品的仓库UI1738.4.1在UI中显示仓库物品1738.4.2装备一个用来开门的钥匙1758.4.3通过使用血量包来恢复玩家的血量1778.5小结178第Ⅲ部分冲刺阶段第9章将游戏连接到互联网1819.1创建户外场景1829.1.1使用天空盒生成天空视觉效果1829.1.2通过代码设置大气环境1839.2从互联网服务下载天气数据1859.2.1使用协程请求WWW数据1889.2.2解析xml1929.2.3解析JSON1939.2.4基于天气数据影响场景1959.3添加一个网络布告栏1969.3.1从互联网加载图像1969.3.2在布告栏上显示图像1999.3.3缓存下载的图像以供重用2009.4将数据发送到Web服务器2019.4.1跟踪当前的天气:发送post请求2029.4.2php中的服务器端代码2049.5小结204第10章播放音频:音效和音乐20510.1导入音效20610.1.1所支持的文件格式20610.1.2导入音频文件20710.2播放音效20810.2.1音频剪辑、音源和声音侦听器20810.2.2设定一个循环声音20910.2.3从代码触发音效21010.3音频控制接口21110.3.1建立中心AudioManager21210.3.2音量控制UI21410.3.3播放UI声音21710.4背景音乐21810.4.1播放循环音乐21810.4.2独立控制音乐的音量22110.4.3歌曲间的淡入淡出22310.5小结226第11章将各部分整合为一个完整的游戏22711.1再次利用项目来构建角色扮演RPG22811.1.1将多个项目的资源和代码装配在一起22811.1.2编写指向-单击的控件:移动和设备23111.1.3使用新界面替换旧GUI23511.2开发总体的游戏结构24111.2.1控制任务流和多关卡24211.2.2通过到达退出条件完成一个关卡24511.2.3当被敌人捕捉时关卡失败24711.3处理玩家游戏过程中的进度24911.3.1保存并加载玩家进度24911.3.2通过完成三个关卡打败游戏25311.4小结255第12章将游戏部署到玩家的设备25512.1构建桌面环境:Windows、Mac和linux25912.1.1构建应用25912.1.2调整PlayerSettings:设置游戏的名称和图标26012.1.3平台依赖的编译26112.2为Web构建游戏26212.2.1UnityPlayer和HTML/WebGL26212.2.2构建Unity文件和一个测试Web页面26212.2.3与浏览器中的javaScript通信26312.3构建移动应用的平台:iOS和Android26412.3.1设置构建工具26512.3.2贴图压缩26812.3.3开发插件26912.4小结277附录A场景导航和键盘快捷键279A.1使用鼠标进行场景导航279A.2一般使用键盘快捷键280附录B与Unity一同使用的外部工具281B.1编程工具281B.1.1VisualStudio281B.1.2Xcode281B.1.3AndroidSDK282B.1.4SVN、Git或Mercurial282B.23D美术应用282B.2.1Maya282B.2.23dsMax282B.2.3Blender283B.32D图像编辑器283B.3.1photoshop283B.3.2GIMP283B.3.3TexturePacker283B.4音频软件283B.4.1ProTools284B.4.2Audacity284附录C在Blender中建模一个板凳285C.1构建网格几何体285C.2模型贴图映射288附录D在线学习资源293D.1附加的指南293D.2代码库294后序297

4. Unity 3D人工智能编程 #

前 言第1章 人工智能导论 11.1 人工智能 11.2 游戏中的人工智能 21.3 人工智能技术 31.3.1 有限状态机 31.3.2 人工智能中的随机性和概率 51.3.3 感应器系统 61.3.4 群组、蜂拥和羊群效应 71.3.5 路径跟随和引导 81.3.6 A*寻路算法 91.3.7 导航网格 161.3.8 行为树 181.3.9 运动 201.3.10 Dijkstra算法 231.4 本章小结 23第2章 有限状态机 242.1 玩家的坦克 242.1.1  PlayerTankController类 252.1.2 初始化 262.2 子弹类 292.3 设置航点 312.4 抽象有限状态机类 322.5 敌方坦克的人工智能 342.5.1 巡逻状态 362.5.2 追逐状态 382.5.3 攻击状态 382.5.4 死亡状态 402.6 使用有限状态机框架 422.6.1 AdvanceFSM类 422.6.2 FSMState类 432.6.3 状态类 442.6.4 NPCTankController 类 462.7 本章小结 48第3章 随机性和概率 493.1 随机性 503.2 概率的定义 523.2.1 独立与关联事件 533.2.2 条件概率 533.3 人物个性 563.4 有限状态机和概率 573.5 动态人工智能 593.6 示例老虎机 603.6.1  随机老虎机 603.6.2 加权概率 633.7 本章小结 68第4章 感应器的实现 704.1 基本的感觉系统 714.2 场景设置 724.3 玩家的坦克与切面 734.3.1 玩家的坦克 744.3.2 切面 754.4 人工智能角色 764.4.1 感观 774.4.2 视觉 784.4.3 触觉 804.5 测试 824.6 本章小结 83第5章 群组行为 845.1 岛屿示例中的群组行为 845.1.1 个体的行为 855.1.2 控制器 905.2 替代实现 925.3 本章小结 99第6章 路径跟随和引导行为 1006.1 跟随一条路径 1006.1.1 路径脚本 1026.1.2 路径跟随 1036.2 避开障碍物 1066.2.1 添加定制图层 1076.2.2 避开障碍 1086.3 本章小结 113第7章 A*寻路算法 1147.1 回顾A*寻路算法 1147.2 实现 1167.2.1 Node 1167.2.2 PriorityQueue 1177.2.3 GridManager 1187.2.4 AStar 1237.2.5 TestCode类 1267.3 场景设置 1287.4 测试 1317.5 本章小结 132第8章 导航网格 1338.1 简介 1348.2 设置地图 1348.2.1 Navigation Static 1358.2.2 烘焙导航网格 1358.2.3 导航网格代理 1368.3 有斜坡的场景 1398.4 NavMeshLayers 1418.5 分离网格链接 1448.5.1 生成分离网格链接 1458.5.2 手动生成分离网格链接 1468.6 本章小结 148第9章 行为树 1499.1 Behave插件 1499.2 工作流 1519.3 行为节点 1539.4 与脚本的接口 1559.5 装饰节点 1589.6 Behave调试器 1609.7 顺序节点 1609.8 探索Behave的结果 1629.9 选择节点 1639.10 优先级选择节点 1669.11 并行节点 1689.12 引用 1699.13 机器人与外星人项目 1709.14 本章小结 173第10章 融会贯通 17410.1 场景设置 17510.2 车辆 17710.2.1 玩家控制的车辆 17810.2.2 人工智能车辆控制器 18010.2.3 有限状态机 18210.3 武器 18710.3.1 枪 18710.3.2 子弹 18910.3.3 发射器 19110.3.4 导弹 19310.4 本章小结 195

5. Unity官方案例精讲 #

第 1 章 C# 脚本编程基础 ………………. 11.1 配置脚本开发环境 ………………………………..21.1.1 配置 Visual Studio …………………….21.1.2 配置MonoDevelop ……………………61.1.3 脚本的创建 ……………………………..81.2 变量、数组与函数 ………………………………..91.2.1 变量的声明与使用 ……………………91.2.2 数组的声明与使用 ………………….111.2.3 函数的声明与使用 ………………….121.3 语句、表达式与运算符 ……………………. 141.3.1 语句 ……………………………………….141.3.2 表达式 ……………………………………161.3.3 运算符 ……………………………………161.4 协程(Coroutine) ………………………………. 181.5 类与类的使用 ……………………………………… 211.6 输出调试信息 ……………………………………… 221.7 C# 脚本示例 ………………………………………… 221.8 Unity 脚本事件执行顺序 ………………….. 261.9 脚本模板与脚本编码 ………………………… 281.10 Unity 5 脚本升级 ……………………………… 29第 2 章 Javascript 脚本编程基础 ….. 312.1 JavaScript 脚本编程基础 ………………….. 322.2 变量、数组与函数 …………………………….. 322.2.1 变量 ……………………………………….322.2.2 数组 ……………………………………….332.2.3 函数 ……………………………………….352.3 表达式、语句与运算符 ……………………. 372.4 JavaScript 脚本示例 …………………………… 392.5 JavaScript 脚本与 C# 脚本的交互 …… 41第 3 章星际航行游戏——jspace Shooter ……………… 453.1 导入模型、贴图和材质 ……………………. 463.1.1 导入资源包文件 ……………………..463.1.2 创建飞船对象 …………………………493.1.3 设置摄像机参数 ……………………..503.1.4 添加图片背景 …………………………503.1.5 添加粒子背景效果 ………………….523.2 编写脚本代码 ……………………………………… 533.2.1 键盘控制飞船移动 ………………….533.2.2 实现射击行为(Shot) …………….573.2.3 添加小行星(Asteroid) …………..613.3 添加音频 ……………………………………………… 693.3.1 添加碰撞爆炸音频 ………………….693.3.2 添加飞船射击音频 ………………….693.3.3 添加背景音效 …………………………703.4 添加计分文本 ……………………………………… 713.4.1 添加计分 Text 组件 …………………713.4.2 添加计分功能 …………………………723.5 游戏结束与重新开始 ………………………… 743.5.1 添加游戏结束的 Text 组件 ………743.5.2 添加结束游戏的功能 ………………753.5.3 添加重新开始的 Text 组件 ………763.5.4 添加重新开始游戏的功能 ……….77第 4 章潜行游戏——Stealth ……….. 794.1 加载场景 …………………………………………… 804.1.1 创建场景 ………………………………..804.1.2 添加场景元素 …………………………804.1.3 添加灯光 ………………………………..824.1.4 烘焙场景Lightmaps ………………..844.1.5 添加 Tag 管理类 ……………………..874.1.6 添加转场效果 …………………………874.1.7 添加游戏控制器GameController ……………………….894.1.8 添加 CCTV Camera …………………924.1.9 添加 Laser Grid ……………………….944.2 导入和配置人物角色 ………………………… 974.2.1 导入角色模型 …………………………974.2.2 设置角色动画 …………………………984.2.3 创建动画参数管理类 ………………994.2.4 添加控制角色运动功能 …………1014.2.5 添加控制摄像机跟随的功能 ….1044.3 主角与环境交互 ………………………………..1074.3.1 添加控制开关台的功能 …………1074.3.2 添加管理房间钥匙卡的功能 ….1104.3.3 添加控制单开门的功能 …………1124.3.4 添加控制双开门的功能 …………1154.4 主角与敌人交互 ………………………………..1164.4.1 添加管理角色生命值的功能 ….1164.4.2 添加敌人角色模型 ………………..1184.4.3 添加敌人自动搜索角色的功能 …………………………1204.4.4 添加控制敌人运动功能 …………1234.4.5 添加控制敌人射击的功能 ……..126第 5 章粒子碰撞回调功能——Particle Callbacks ………….. 1295.1 Shuriken 粒子系统介绍 ……………………1305.2 加载场景 …………………………………………….1315.3 创建粒子效果 …………………………………….1345.3.1 创建燃烧时冒烟的粒子效果 …..1345.3.2 创建燃烧时火星四溅的粒子效果 ………………………….1395.3.3 火焰大小控制 ……………………….1405.3.4 创建洒水的粒子效果 …………….1435.3.5 控制洒水位置 ……………………….1465.4 碰撞回调函数解析 ……………………………1485.5 粒子碰撞回调函数应用案例 …………..1535.5.1 水滴与桶盖碰撞的处理 …………1535.5.2 实现水滴与燃烧桶碰撞熄灭火焰的效果 …………………….155第 6 章Mecanim动画系统介绍——Mecanim Example Scenes ….. 1596.1 Mecanim动画系统简介 …………………..1606.1.1 Mecanim动画系统的工作流 ….1606.1.2 Mecanim动画系统中的术语 ….160

6. Unity Shader入门精要 #

第1篇 基础篇 第1章 欢迎来到Shader的世界 21.1 程序员的三大浪漫 21.2 本书结构 3 第2章 渲染流水线 52.1 综述 52.1.1 什么是流水线 52.1.2 什么是渲染流水线 62.2 CPU和GPU之间的通信 72.2.1 把数据加载到显存中 72.2.2 设置渲染状态 82.2.3 调用Draw Call 82.3 GPU流水线 92.3.1 概述 92.3.2 顶点着色器 102.3.3 裁剪 112.3.4 屏幕映射 112.3.5 三角形设置 122.3.6 三角形遍历 132.3.7 片元着色器 132.3.8 逐片元操作 142.3.9 总结 172.4 一些容易困惑的地方 182.4.1 什么是OpenGL/DirectX 182.4.2 什么是HLSL、GLSL、CG 192.4.3 什么是Draw Call 202.4.4 什么是固定管线渲染 222.5 那么,你明白什么是Shader了吗 232.6 扩展阅读 23 第3章 Unity Shader基础 243.1 Unity Shader概述 253.1.1 一对好兄弟:材质和Unity Shader 253.1.2 Unity中的材质 263.1.3 Unity中的Shader 263.2 Unity Shader的基础:ShaderLab 283.3 Unity Shader的结构 293.3.1 给我们的Shader起个名字 293.3.2 材质和Unity Shader的桥梁:Properties 293.3.3 重量级成员:SubShader 313.3.4 留一条后路:Fallback 333.3.5 ShaderLab还有其他的语义吗 333.4 Unity Shader的形式 333.4.1 Unity的宠儿:表面着色器 343.4.2 最聪明的孩子:顶点/片元着色器 353.4.3 被抛弃的角落:固定函数着色器 353.4.4 选择哪种Unity Shader形式 363.5 本书使用的Unity Shader形式 363.6 答疑解惑 363.6.1 Unity Shader != 真正的Shader 363.6.2 Unity Shader和CG/HLSL之间的关系 373.6.3 我可以使用GLSL来写吗 383.7 扩展阅读 38 第4章 学习Shader所需的数学基础 394.1 背景:农场游戏 394.2 笛卡儿坐标系 404.2.1 二维笛卡儿坐标系 404.2.2 三维笛卡儿坐标系 414.2.3 左手坐标系和右手坐标系 424.2.4 Unity使用的坐标系 444.2.5 练习题 454.3 点和矢量 454.3.1 点和矢量的区别 464.3.2 矢量运算 474.3.3 练习题 534.4 矩阵 544.4.1 矩阵的定义 544.4.2 和矢量联系起来 554.4.3 矩阵运算 554.4.4 特殊的矩阵 574.4.5 行矩阵还是列矩阵 604.4.6 练习题 614.5 矩阵的几何意义:变换 624.5.1 什么是变换 624.5.2 齐次坐标 634.5.3 分解基础变换矩阵 634.5.4 平移矩阵 644.5.5 缩放矩阵 644.5.6 旋转矩阵 654.5.7 复合变换 664.6 坐标空间 674.6.1 为什么要使用这么多不同的坐标空间 684.6.2 坐标空间的变换 684.6.3 顶点的坐标空间变换过程 724.6.4 模型空间 734.6.5 世界空间 734.6.6 观察空间 754.6.7 裁剪空间 774.6.8 屏幕空间 834.6.9 总结 854.7 法线变换 864.8 Unity Shader的内置变量(数学篇) 874.8.1 变换矩阵 874.8.2 摄像机和屏幕参数 884.9 答疑解惑 894.9.1 使用3×3还是4×4的变换矩阵 894.9.2 CG中的矢量和矩阵类型 894.9.3 Unity中的屏幕坐标:ComputeScreenPos/VPOS/WPOS 904.10 扩展阅读 934.11 练习题答案 93第2篇 初级篇 第5章 开始Unity Shader学习之旅 1005.1 本书使用的软件和环境 1005.2 一个最简单的顶点/片元着色器 1005.2.1 顶点/片元着色器的基本结构 1015.2.2 模型数据从哪里来 1035.2.3 顶点着色器和片元着色器之间如何通信 1045.2.4 如何使用属性 1055.3 强大的援手:Unity提供的内置文件和变量 1075.3.1 内置的包含文件 1075.3.2 内置的变量 1095.4 Unity提供的CG/HLSL语义 1095.4.1 什么是语义 1095.4.2 Unity支持的语义 1105.4.3 如何定义复杂的变量类型 1105.5 程序员的烦恼:Debug 1115.5.1 使用假彩色图像 1115.5.2 利用神器:Visual Studio 1135.5.3 最新利器:帧调试器 1135.6 小心:渲染平台的差异 1155.6.1 渲染纹理的坐标差异 1155.6.2 Shader的语法差异 1165.6.3 Shader的语义差异 1175.6.4 其他平台差异 1175.7 Shader整洁之道 1175.7.1 float、half还是fixed 1175.7.2 规范语法 1185.7.3 避免不必要的计算 1185.7.4 慎用分支和循环语句 1195.7.5 不要除以0 1195.8 扩展阅读 120 第6章 Unity中的基础光照 1216.1 我们是如何看到这个世界的 1216.1.1 光源 1216.1.2 吸收和散射 1226.1.3 着色 1226.1.4 BRDF光照模型 1236.2 标准光照模型 1236.2.1 环境光 1236.2.2 自发光 1246.2.3 漫反射 1246.2.4 高光反射 1246.2.5 逐像素还是逐顶点 1256.2.6 总结 1256.3 Unity中的环境光和自发光 1266.4 在Unity Shader中实现漫反射光照模型 1266.4.1 实践:逐顶点光照 1266.4.2 实践:逐像素光照 1296.4.3 半兰伯特模型 1306.5 在Unity Shader中实现高光反射光照模型 1316.5.1 实践:逐顶点光照 1326.5.2 实践:逐像素光照 1346.5.3 Blinn-Phong光照模型 1356.6 召唤神龙:使用Unity内置的函数 136 第7章 基础纹理 1397.1 单张纹理 1407.1.1 实践 1407.1.2 纹理的属性 1427.2 凹凸映射 1467.2.1 高度纹理 1467.2.2 法线纹理 1467.2.3 实践 1487.2.4 Unity中的法线纹理类型 1547.3 渐变纹理 1557.4 遮罩纹理 1587.4.1 实践 1597.4.2 其他遮罩纹理 161 第8章 透明效果 1628.1 为什么渲染顺序很重要 1638.2 Unity Shader的渲染顺序 1648.3 透明度测试 1658.4 透明度混合 1698.5 开启深度写入的半透明效果 1718.6 ShaderLab的混合命令 1738.6.1 混合等式和参数 1738.6.2 混合操作 1748.6.3 常见的混合类型 1758.7 双面渲染的透明效果 1768.7.1 透明度测试的双面渲染 1768.7.2 透明度混合的双面渲染 176第3篇 中级篇 第9章 更复杂的光照 1809.1 Unity的渲染路径 1809.1.1 前向渲染路径 1829.1.2 顶点照明渲染路径 1859.1.3 延迟渲染路径 1869.1.4 选择哪种渲染路径 1889.2 Unity的光源类型 1889.2.1 光源类型有什么影响 1899.2.2 在前向渲染中处理不同的光源类型 1909.3 Unity的光照衰减 1959.3.1 用于光照衰减的纹理 1969.3.2 使用数学公式计算衰减 1969.4 Unity的阴影 1969.4.1 阴影是如何实现的 1979.4.2 不透明物体的阴影 1989.4.3 使用帧调试器查看阴影绘制过程 2029.4.4 统一管理光照衰减和阴影 2049.4.5 透明度物体的阴影 2069.5 本书使用的标准Unity Shader 209 第10章 高级纹理 21010.1 立方体纹理 21010.1.1 天空盒子 21010.1.2 创建用于环境映射的立方体纹理 21210.1.3 反射 21310.1.4 折射 21510.1.5 菲涅耳反射 21710.2 渲染纹理 21910.2.1 镜子效果 21910.2.2 玻璃效果 22010.2.3 渲染纹理 vs. GrabPass 22410.3 程序纹理 22510.3.1 在Unity中实现简单的程序纹理 22510.3.2 Unity的程序材质 228 第11章 让画面动起来 23011.1 Unity Shader中的内置变量(时间篇) 23011.2 纹理动画 23011.2.1 序列帧动画 23011.2.2 滚动的背景 23311.3 顶点动画 23411.3.1 流动的河流 23411.3.2 广告牌 23611.3.3 注意事项 239第4篇 高级篇 第12章 屏幕后处理效果 24412.1 建立一个基本的屏幕后处理脚本系统 24412.2 调整屏幕的亮度、饱和度和对比度 24612.3 边缘检测 24912.3.1 什么是卷积 24912.3.2 常见的边缘检测算子 24912.3.3 实现 25012.4 高斯模糊 25312.4.1 高斯滤波 25312.4.2 实现 25412.5 Bloom效果 25912.6 运动模糊 26312.7 扩展阅读 266 第13章 使用深度和法线纹理 26713.1 获取深度和法线纹理 26713.1.1 背后的原理 26713.1.2 如何获取 26913.1.3 查看深度和法线纹理 27113.2 再谈运动模糊 27213.3 全局雾效 27613.3.1 重建世界坐标 27613.3.2 雾的计算 27813.3.3 实现 27813.4 再谈边缘检测 28313.5 扩展阅读 287 第14章 非真实感渲染 28814.1 卡通风格的渲染 28814.1.1 渲染轮廓线 28814.1.2 添加高光 28914.1.3 实现 29014.2 素描风格的渲染 29314.3 扩展阅读 29614.4 参考文献 297 第15章 使用噪声 29815.1 消融效果 29815.2 水波效果 30215.3 再谈全局雾效 30515.4 扩展阅读 30915.5 参考文献 309 第16章 Unity中的渲染优化技术 31016.1 移动平台的特点 31016.2 影响性能的因素 31116.3 Unity中的渲染分析工具 31216.3.1 认识Unity 5的渲染统计窗口 31216.3.2 性能分析器的渲染区域 31316.3.3 再谈帧调试器 31316.3.4 其他性能分析工具 31416.4 减少draw call数目 31416.4.1 动态批处理 31516.4.2 静态批处理 31616.4.3 共享材质 31816.4.4 批处理的注意事项 31816.5 减少需要处理的顶点数目 31916.5.1 优化几何体 31916.5.2 模型的LOD技术 31916.5.3 遮挡剔除技术 32016.6 减少需要处理的片元数目 32016.6.1 控制绘制顺序 32016.6.2 时刻警惕透明物体 32116.6.3 减少实时光照和阴影 32116.7 节省带宽 32216.7.1 减少纹理大小 32216.7.2 利用分辨率缩放 32316.8 减少计算复杂度 32316.8.1 Shader的LOD技术 32316.8.2 代码方面的优化 32316.8.3 根据硬件条件进行缩放 32416.9 扩展阅读 324第5篇 扩展篇 第17章 Unity的表面着色器探秘 32817.1 表面着色器的一个例子 32817.2 编译指令 33017.2.1 表面函数 33017.2.2 光照函数 33017.2.3 其他可选参数 33117.3 两个结构体 33217.3.1 数据来源:Input结构体 33217.3.2 表面属性:SurfaceOutput结构体 33317.4 Unity背后做了什么 33417.5 表面着色器实例分析 33617.6 Surface Shader的缺点 341 第18章 基于物理的渲染 34218.1 PBS的理论和数学基础 34218.1.1 光是什么 34318.1.2 双向反射分布函数(BRDF) 34418.1.3 漫反射项 34518.1.4 高光反射项 34618.1.5 Unity中的PBS实现 34718.2 Unity 5的Standard Shader 34818.2.1 它们是如何实现的 34818.2.2 如何使用Standard Shader 34918.3 一个更加复杂的例子 35218.3.1 设置光照环境 35218.3.2 放置反射探针 35518.3.3 调整材质 35618.3.4 线性空间 35618.4 答疑解惑 35718.4.1 什么是全局光照 35718.4.2 什么是伽马校正 35818.4.3 什么是HDR 36118.4.4 那么,PBS适合什么样的游戏 36218.5 扩展阅读 36318.6 参考文献 363 第19章 Unity 5更新了什么 36519.1 场景“更亮了” 36519.2 表面着色器更容易“报错了” 36519.3 当家做主:自己控制非统一缩放的网格 36619.4 固定管线着色器逐渐退出舞台 366 第20章 还有更多内容吗 36820.1 如果你想深入了解渲染的话 36820.2 世界那么大 36920.3 参考文献 369

End.

Note by HF.



发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表