动作游戏作为一大热门的游戏品类,一直不缺少玩家受众欢迎。但其较高的工艺门槛、技术细节、复杂度等都阻碍了其开发进程。本书结合作者自身的研发经验进行撰写,从角色、战斗、关卡、物理等多个剖面去解析动作游戏在研发中遇到的总总困难,尽可能的绕过或避免研发中的已知问题,最终帮助读者在对于该品类游戏的理解与开发上提供助力。
长期以来,以动作游戏为核心的书籍一直较为匮乏。因此也成为了本书撰写的契机。通过对本书的阅读,不管是爱好动作游戏的独立开发者,还是期望进一步提升自身能力的游戏从业者,相信您都能在其中有所收获。
封面图
目录
- 前言
- 第1篇 概述及前期准备
- 第1章 概述2
- 1.1 本书的侧重点及目标2
- 1.2 Unity3D引擎在大环境中的发展现状4
- 1.3 Steam、独立游戏及动作游戏的现状5
- 1.3.1 Steam平台简介5
- 1.3.2 国内独立游戏的开端6
- 1.3.3 细看动作类独立游戏6
- 1.4 设计目标:大而全还是小而精7
- 1.4.1 资源复用7
- 1.4.2 舍弃不必要的维度8
- 1.4.3 选择合适的题材8
- 第2章 前期准备9
- 2.1 通用预备知识9
- 2.1.1 使用协程分解复杂逻辑9
- 2.1.2 自定义的插值公式10
- 2.1.3 消息模块的设计12
- 2.1.4 模块间的管理与协调13
- 2.2 基于编辑器环境的基础知识14
- 2.2.1 编辑器工具的编写15
- 2.2.2 关联游戏配置数据19
- 2.2.3 常量生成器22
- 2.3 3D游戏所需要的数学知识24
- 2.3.1 向量加减24
- 2.3.2 点乘25
- 2.3.3 叉乘26
- 2.3.4 投影27
- 2.3.5 四元数28
- 2.4 其他准备29
- 2.4.1 关注项目中的GC问题29
- 2.4.2 控制台工具的编写31
- 2.4.3 项目目录结构建议32
- 2.4.4 项目的程序流程结构建议33
- 第2篇 动作游戏核心模块
- 第3章 物理系统详解36
- 3.1 物理系统基本内容梳理36
- 3.1.1 系统参数设置36
- 3.1.2 Fixed Update更新频率37
- 3.1.3 Rigidbody参数简介38
- 3.1.4 物理材质设置38
- 3.2 常见问题39
- 3.2.1 物理步的理解误区39
- 3.2.2 重叠与挤出问题40
- 3.2.3 地面检测优化处理40
- 3.2.4 Dash与瞬移的优化41
- 3.2.5 踩头问题及解决方法42
- 3.2.6 动画根运动的物理问题45
- 3.3 为动作游戏定制碰撞系统46
- 3.3.1 设计目标46
- 3.3.2 OBB碰撞检测简介47
- 3.3.3 Box与Box相交测试47
- 3.3.4 Box与Sphere相交测试50
- 3.3.5 Sphere与Sphere相交测试52
- 3.3.6 不同形状的边界点获取52
- 3.3.7 碰撞对象管理器56
- 第4章 主角系统设计58
- 4.1 基础要素58
- 4.1.1 同类游戏对比58
- 4.1.2 逻辑编写前的准备工作59
- 4.1.3 移动逻辑59
- 4.1.4 跳跃逻辑65
- 4.1.5 攻击逻辑67
- 4.1.6 受击逻辑69
- 4.1.7 应对脚本类爆炸的问题71
- 4.2 常规功能72
- 4.2.1 角色有限状态机72
- 4.2.2 设计挂接点接口73
- 4.2.3 技能系统74
- 4.2.4 连续技功能75
- 4.3 场景互动部分78
- 4.3.1 角色冻结78
- 4.3.2 场景互动组件79
- 第5章 关卡部分详解82
- 5.1 前期考量82
- 5.1.1 从Graybox说起82
- 5.1.2 规划层级结构83
- 5.1.3 模型的导出与调试84
- 5.2 开发阶段深入解析85
- 5.2.1 SpawnPoint的使用85
- 5.2.2 扩展SpawnPoint87
- 5.2.3 对象池的编写92
- 5.2.4 关卡模块的序列化94
- 5.2.5 战斗壁障的实现99
- 5.3 光照与烘焙102
- 5.3.1 不同GI类型的选择102
- 5.3.2 预计算光照的使用103
- 5.3.3 光照探针的使用104
- 5.3.4 反射探针简要介绍104
- 5.3.5 借助LPPV优化烘焙105
- 第6章 战斗部分深入解析107
- 6.1 角色模块107
- 6.1.1 Motor组件的设计107
- 6.1.2 动画事件的处理110
- 6.1.3 Animator常见问题整理112
- 6.2 设计一个可扩展的战斗系统114
- 6.2.1 基础战斗框架编写115
- 6.2.2 添加伤害传递逻辑117
- 6.2.3 配置伤害碰撞120
- 6.2.4 僵直度组件的添加121
- 6.2.5 浮空组件的添加123
- 6.3 敌人AI的设计125
- 6.3.1 AI设计综述125
- 6.3.2 Behavior Designer插件简介127
- 6.3.3 使用协程来开发AI程序128
- 6.3.4 可控制的随机行为131
- 6.3.5 设计共享数据段132
- 6.3.6 场景信息的获取133
- 第7章 其他模块135
- 7.1 相机135
- 7.1.1 常见的相机模式分类135
- 7.1.2 常规第三人称相机实现136
- 7.1.3 滑轨相机的实现140
- 7.2 Cutscene过场动画145
- 7.2.1 不同类型的Cutscene简介146
- 7.2.2 使用Timeline146
- 7.2.3 使用脚本过场动画148
- 7.3 输入、IK与音频管理149
- 7.3.1 InControl插件的使用149
- 7.3.2 Final-IK插件的使用151
- 7.3.3 音频管理153
- 第8章 画面特效与后处理160
- 8.1 着色器Shader160
- 8.1.1 3D游戏中的常见Shader160
- 8.1.2 死亡径向溶解效果161
- 8.1.3 受击边缘泛光效果164
- 8.1.4 基于屏幕门的抖动透明166
- 8.2 CommandBuffer的使用169
- 8.2.1 CommandBuffer简介169
- 8.2.2 制作主角特显效果171
- 8.3 后处理175
- 8.3.1 PPS后处理工具175
- 8.3.2 编写自己的后处理脚本177
- 8.4 计算着色器Compute Shader179
- 8.4.1 什么是Compute Shader179
- 8.4.2 语法及使用简介179
- 8.4.3 使用案例181
- 第3篇 项目案例实战
- 第9章 案例剖析190
- 9.1 《忍者龙剑传∑2》案例剖析190
- 9.1.1 断肢效果的再实现190
- 9.1.2 流血喷溅程序的再实现193
- 9.1.3 角色残影效果的再实现202
- 9.2 《君临都市》案例剖析206
- 9.2.1 通用动作方案设计206
- 9.2.2 组合攻击的再实现207
- 9.3 《战神3》案例剖析211
- 9.3.1 吸魂效果的再实现211
- 9.3.2 链刃伸缩效果的再实现216
- 9.3.3 赫利俄斯照射的再实现220
- 第10章 横版动作游戏Demo设计227
- 10.1 规划与调配227
- 10.1.1 简要规划227
- 10.1.2 资源准备228
- 10.1.3 项目配置228
- 10.2 基础框架的整合231
- 10.2.1 战斗模块的整合231
- 10.2.2 动画事件的整合232
- 10.3 玩家逻辑的整合233
- 10.3.1 输入逻辑封装233
- 10.3.2 玩家逻辑的编写234
- 10.4 敌人逻辑的编写241
- 10.4.1 基础逻辑的编写241
- 10.4.2 游走逻辑的编写244
- 10.4.3 受击逻辑的编写246
- 10.5 构建游戏247
- 10.5.1 预制体的组装247
- 10.5.2 出生点逻辑的编写248
- 10.5.3 回顾与总结249