- 已选 件
- 已售件
-
服务
- √7天无理由退货(拆封后不支持)
- √假一赔三
- √消费者保障服务
商品详情
-
ISBN编号
9787515373461
-
书名
Unreal Engine 5 C++游戏开发完全学习教程
-
作者
[英] 贡萨洛·马克斯,[英] 德文·谢里,[英] 大卫·佩雷拉,[英] 哈马德·福齐 著
-
出版社名称
中国青年出版社
-
定价
168.00
-
开本
16开
-
出版时间
2024-08-01
-
纸张
胶版纸
-
包装
平装
- 查看全部
内容简介
本书可以让我们沉浸在虚幻的游戏项目中,由行业内四位经验丰富的专业人士撰写,他们有着多年的虚幻引擎开发经验。本书将帮助我们亲身体验游戏项目创作,并了解最新版本的虚幻引擎。首先介绍了虚幻编辑器和关键概念,如Actor、蓝图、动画、继承和玩家输入。然后,进入第一个项目:构建躲避球游戏。在此过程中,我们将学习射线检测、碰撞、投射物、用户界面和音效的概念。第二个项目是横版动作游戏,在游戏的制作过程中我们将理解动画混合、敌人人工智能(AI)、生成对象和收集物品等概念。第三个项目是一款第一人称射击游戏,游戏涵盖创建多人游戏的关键概念。学完本书,我们将对如何使用虚幻引擎提供的工具来构建自己的游戏有一个全面的了解。
卖点1 全面实用,168个知识重、难点讲解,覆盖Unreal Engine 5C 必掌握知识点,助您全面了解UE5 C 游戏开发的逻辑和实操方法。
卖点2 构建三个完整的可玩游戏,让读者在实践中逐步掌握游戏开发方法,通过完成躲避球游戏、横版动作游戏、第一人称游戏,三款功能完备的游戏来巩固读者所学知识并提升学习信心。
卖点3 全彩印刷,详尽步骤讲解,配以丰富操作演示图例,参数设置、操作效果一目了然,适合新手读者模仿操作。
卖点4 提供本书配套代码资源、全书图片、部分章节教学视频以及额外赠送资源的下载服务(读者也可以自行从GitHub下载)
作者简介
[英]贡萨洛·马克斯(Gonçalo Marques)从6岁起就是一名活跃的游戏玩家。自2016年以来,他一直在使用虚幻引擎,并使用虚幻引擎从事自由职业和咨询工作。贡萨洛还发布了一个名为UI Navigation的免费开源的插件,该插件获得了极高的评价,下载量超过10万次,并且仍在不断地更新和修复。正是这个插件的开发,使他成为Epic MegaGrant的获得者。他目前在里斯本(葡萄牙的首都)的游戏工作室Funcom ZPX工作,该工作室参于了《流放者柯南》(ConanExiles)、《突变元年:伊甸园之路》(Mutant Year Zero)和《疯狂之月》(Moons of Madness)等游戏的开发。目前,贡萨洛正在开发一款基于《沙丘》(Dune)宇宙的新游戏。
德文·谢里(Devin Sherry)是波兰People Can Fly公司的首席技术设计师,曾使用虚幻引擎4开发《先驱者》(Outriders)和《先驱者:世界杀手》(Outriders: Worldslayer)。在此之前,他在塞尔维亚的Digital Arrow工作室担任技术设计师,专注于《未来水世界:深度侵袭》( Aquanox: Deep Descent)的开发。德文拥有从虚幻开发者工具包到最新发布的虚幻引擎5十年的使用经验,他致力于为玩家创造难忘的游戏体验,并将游戏机制变得栩栩如生。
[英]大卫·佩雷拉(Da v i d P e r e i r a )从1998年开始制作游戏,当时他学会了如何使用Clickteam(游戏制作工具的公司名称)的游戏工厂(The Games Factory)(Clickteam的一款产品,用于制作游戏的工具)。他毕业于FCT-UNL的计算机科学专业,在那里他学习了C 、OpenGL和DirectX,这让他能够制作出更复杂的游戏。在IT咨询行业工作了几年后,他加入了葡萄牙的Miniclip游戏公司,参与开发了多款流行的移动游戏,如《8球台球》(8 Ball Pool)、《重力小子1》(Gravity Guy 1)、《重力小子2》(Gravity Guy 2)、《极限滑板》(Extreme Skater)、《 特技滑雪2》(iStunt 2)和《英雄哈勃》(Hambo)以及许多其他游戏。从那时起,他担任MPC的首席开发人员,参与开发了约翰·路易斯圣诞虚拟现实(John Lewis Christmas VR)体验。他还参与了《致命躯壳》(Mortal Shell)早期版本的开发。大卫积极从事志愿者工作,教授患有阿斯伯格综合征的人使用虚幻引擎4制作游戏。现在,他正在开发自己的游戏,这是一款即将公布的第一人称动作角色扮演游戏。
[英]哈马德·福齐(Hammad Fozi)具有深厚的游戏开发背景,自2017年以来一直使用虚幻引擎进行工作。他参与了一些非常成功的AAA项目,如Virtua FanCave(元宇宙)、未命名的AAA级科幻DJ体验、《英雄与将军》(Heroes and Generals)和《VR拳击游戏》(Creed: Riseto Glory VR)。哈马德与曾在育碧娱乐软件公司(Ubisof)、华纳兄弟游戏公司(Warner Bros.Games)、2K Games(一家游戏制作公司)等公司工作过的团队合作!在短暂而令人印象深刻的职业生涯中,他成功地帮助由10—30人组成的团队扩大到150余人的规模。目前,哈马德是一名高级C 游戏开发工程师,在虚拟现实(VR)和增强现实、PC/PS5/Xbox/Android/iOS/macOS游戏开发和Web3/Metaverse/NFT系统(在虚幻引擎内)方面拥有丰富的工作经验。
目录
第1章 虚幻引擎简介
1.1 技术要求
练习1.01 创建虚幻引擎5项目
1.2 了解虚幻引擎编辑器
1.3 浏览编辑器窗口
1.4 “视口”选项卡
1.5 操作actor
练习1.02 在关卡中添加和删除actor
1.6 理解蓝图actor
练习1.03 创建蓝图actor
1.7 蓝图编辑器
1.8 “事件图表”选项卡
练习1.04 创建蓝图变量
练习1.05 创建蓝图函数
1.9 理解Multiply节点
1.10 探索BeginPlay和Tick事件
练习1.06 在Z 轴上偏移TestActor类
1.11 BP_ThirdPersonCharacter蓝图类
1.12 探索网格体和材质的使用
1.12.1 网格体
1.12.2 材质
1.13 在虚幻引擎5中设置材质
活动1.01 在Z 轴上无限推动TestActor
1.14 本章总结
第2章 使用虚幻引擎
2.1 技术要求
2.2 创建并设置一个空白C 项目
练习2.01 创建一个空的C 项目
2.3 在虚幻引擎中内容文件夹的结构
2.4 使用Visual Studio解决方案
在Visual Studio中调试代码
练习2.02 调试第三人称游戏模板代码
2.5 导入所需资产
练习2.03 导入角色FBX文件
2.6 虚幻引擎游戏模式类
2.6.1 游戏模式的默认类
2.6.2 游戏事件
2.6.3 网络
2.6.4 游戏模式基础与游戏模式
2.6.5 关卡和关卡蓝图
2.6.6 虚幻引擎Pawn类
2.6.7 玩家控制器类
练习2.04 设置游戏模式、玩家控制器和Pawn类
2.7 使用动画
2.7.1 动画蓝图
2.7.2 “事件图表”选项卡
2.7.3 AnimGraph
2.7.4 状态机
2.7.5 过渡规则
2.7.6 混合空间
练习2.05 创建人体模型动画
活动2.01 将动画链接到角色
2.8 本章总结
第3章 角色类组件和蓝图设置
3.1 技术要求
3.2 虚幻引擎角色类
扩展角色类
练习3.01 创建和设置第三人称角色C 类
3.3 用蓝图扩展C 类
练习3.02 使用蓝图扩展C
活动3.01 在动画项目中使用蓝图扩展C 角色类
3.4 本章总结
第4章 玩家输入入门
4.1 技术要求
4.2 理解输入操作和输入映射情境
练习4.01 创建移动和跳跃输入操作
4.3 处理玩家输入 77
练习4.02 监听移动和跳跃输入操作
围绕角色转动摄像机
活动4.01 为角色添加行走逻辑
4.4 本章总结
第5章 射线检测
5.1 技术要求
5.2 碰撞简介
5.3 设置项目
练习5.01 将DodgeballCharacter转换为俯视的视角
5.4 理解射线检测
5.5 创建EnemyCharacter C 类
练习5.02 创建执行射线检测的CanSeeActor函数
5.6 可视化射线检测
练习5.03 创建LookAtActor函数
5.7 创建EnemyCharacter蓝图类
5.8 扫掠检测
练习5.04 执行扫掠检测
5.8.1 更改可见性检测响应
5.8.2 多射线检测
5.8.3 摄像机检测通道
练习5.05 创建一个自定义的EnemySight检测通道
活动5.01 创建SightSource属性
5.9 本章总结 109
第6章 设置碰撞对象
6.1 技术要求 111
6.2 理解虚幻引擎5中的物体碰撞 111
6.2.1 理解碰撞组件
6.2.2 理解碰撞事件
6.2.3 理解碰撞通道
练习6.01 创建Dodgeball类
6.3 创建物理材质
练习6.02 将ProjectleMovementComponent添加到
DodgeballProjectile中
6.3.1 定时器简介
6.3.2 理解如何生成actor
练习6.03 向EnemyCharacter类添加投掷逻辑
6.4 创建Wall类
练习6.04 创建Wall类
6.5 创建VictoryBox actor
练习6.05 创建VictoryBox类
练习6.06 给DodgeballProjectile类中添加ProjectileMovementComponent的
getter函数
活动6.01 将SpawnActor函数替换为EnemyCharacter中引用的
SpawnActorReference函数
6.6 本章总结
第7章 使用虚幻引擎5中的实用工具
7.1 技术要求
7.2 好的实践——松耦合
7.3 蓝图函数库
练习7.01 将CanSeeActor函数移动到蓝图函数库中
7.4 Actor组件
练习7.02 创建HealthComponent的Actor组件
练习7.03 集成HealthComponent Actor组件
7.5 探索接口
7.6 蓝图本地事件
练习7.04 创建HealthInterface类
活动7.01 将LookAtActor逻辑移到Actor组件
7.7 本章总结
第8章 使用UMG创建用户界面
8.1 技术要求
8.2 游戏用户界面
8.3 UMG基础知识
练习8.01 创建控件蓝图
8.3.1 锚点的简介
练习8.02 编辑UMG锚点
练习8.03 创建RestartWidget C 类
练习8.04 创建将RestartWidget类添加到屏幕的逻辑
练习8.05 创建DodgeballPlayerController蓝图类
8.3.2 理解进度条
练习8.06 创建生命值进度条的C 逻辑
活动8.01 改进RestartWidget类
8.4 本章总结
第9章 添加音视频元素
9.1 技术要求
9.2 虚幻引擎5中的音频
练习9.01 导入音频文件
练习9.02 当躲避球从地面反弹时播放声音
音效衰减
练习9.03 将反弹声音转换成3D声音
练习9.04 为游戏添加背景音乐
9.3 理解粒子系统
练习9.05 当躲避球击中玩家时生成粒子系统.
活动9.01 躲避球击中玩家时播放声音
9.4 探索关卡设计
练习9.06 创建关卡框架
9.5 额外的功能
9.6 本章总结
第10章 创建超级横版动作游戏
10.1 技术要求
10.2 项目分解
玩家角色
10.3 将第三人称游戏模板转换为横版动作
练习10.01 创建横版动作项目并使用角色移动组件
活动10.01 让角色跳得更高
10.4 探索横版动作游戏的功能
10.4.1 敌人角色
10.4.2 升级
10.4.3 收集品
练习10.02 探索人物角色编辑器并操作默认的人体模型骨骼权重
活动10.02 骨骼的操作和动画
10.5 理解虚幻引擎5中的动画
10.5.1 骨骼
10.5.2 骨骼网格体
10.5.3 动画序列
练习10.03 导入和设置角色和动画
活动10.03 导入更多自定义动画以预览角色运行
10.6 本章总结
第11章 使用混合空间1D、键绑定和状态机
11.1 技术要求
11.2 创建混合空间
混合空间1D与普通混合空间
练习11.01 创建角色移动混合空间1D
活动11.01 添加Walking和Running动画到混合空间
11.3 主角动画蓝图
动画蓝图
练习11.02 将混合空间添加到角色动画蓝图
11.4 速度向量是什么
练习11.03 将角色的Speed变量传递到混合空间
活动11.02 预览在游戏中运行的动画
11.5 增强型输入系统
练习11.04 为冲刺添加输入
练习11.05 修改角色蓝图
练习11.06 编码角色的冲刺功能
活动11.03 实现投掷输入
11.6 使用动画状态机
练习11.07 玩家角色移动和跳跃状态机
过渡规则
练习11.08 将状态和过渡规则添加到状态机
练习11.09 Time Remaining Ratio函数
活动11.04 完成Movement和Jumping状态机
11.7 本章总结
第12章 动画混合和蒙太奇
12.1 技术要求
12.2 动画混合、动画插槽和动画蒙太奇
练习12.01 设置动画蒙太奇
12.3 动画蒙太奇
练习12.02 在蒙太奇中添加Throw动画
12.4 动画插槽管理器
练习12.03 添加新的动画插槽
12.5 Save Cached Pose节点
练习12.04 移动状态机中应用Save Cached Pose节点
12.6 Layered blend per bone
练习12.05 将动画与上半身动画插槽混合
练习12.06 预览Throw动画
12.7 超级横版动作游戏中的敌人
练习12.07 创建敌人基础C 类
练习12.08 创建和应用敌人动画蓝图
12.8 材质和材质实例
练习12.09 创建并应用敌人材质实例
活动12.01 更新混合权重
12.9 本章总结
第13章 创建和添加敌人人工智能
13.1 技术要求
13.2 敌人人工智能
13.3 AI控制器
自动拥有人工智能
练习13.01 实现AI控制器
13.4 导航网格体
练习13.02 为人工智能敌人实现导航网格体
13.5 重新生成导航网格体
练习13.03 重新生成导航网格体体积参数
活动13.01 创建新关卡
13.6 行为树和黑板
13.6.1 任务
13.6.2 装饰器
13.6.3 服务
练习13.04 创建人工智能行为树和黑板
练习13.05 创建新的行为树任务
练习13.06 创建行为树逻辑
活动13.02 人工智能移动到玩家的位置
练习13.07 创建敌人巡逻点
13.7 向量变换
练习13.08 在数组中选择一个随机点
练习13.09 引用巡逻点actor
练习13.10 更新BTTask_FindLocation任务
13.8 玩家投射物
练习13.11 创建玩家投射物
练习13.12 初始化PlayerProjectile类的设置
活动13.03 创建玩家投射物蓝图
13.9 本章总结
第14章 生成玩家投射物
14.1 技术要求
14.2 动画通知和动画通知状态
练习14.01 创建UAnimNotify类
练习14.02 将新通知添加到Throw动画蒙太奇
14.3 播放动画蒙太奇 322
14.3.1 在蓝图中播放动画蒙太奇
14.3.2 在C 中播放动画蒙太奇
练习14.03 在C 中播放Throw动画
练习14.04 创建投射物生成插槽
练习14.05 准备SpawnProjectile()函数
练习14.06 更新Anim_ProjectleNotify类
14.4 摧毁actor
练习14.07 创建DestroyEnemy()函数
练习14.08 摧毁投射物
活动14.01 允许投射物摧毁敌人
14.5 理解和实现视觉和音频特效
14.5.1 视觉特效(VFX)
14.5.2 音频特效(SFX)
练习14.09 添加敌人被摧毁时的效果
练习14.10 为玩家的投射物添加效果
练习14.11 为投射物添加视觉特效和音频特效
活动14.02 增加投射物被摧毁时的效果..
14.6 本章总结
第15章 探索收集品、能量升级和拾取物
15.1 技术要求 3
15.2 理解URotatingMovementComponent
练习15.01 创建PickableActor_Base类并添加URotatingMovement-Component
活动15.01 在PickableActor_Base中检测玩家重叠和生成效果
练习15.02 创建PickableActor_Collectable类
活动15.02 完成PickableActor_Collectable actor
15.3 使用UE_LOG记录变量
练习15.03 记录玩家金币的数量
15.4 介绍虚幻动态图形UI
理解“文本”控件
练习15.04 创建金币计数器UI HUD元素
15.5 添加和创建UMG用户控件
练习15.05 添加金币计数器UI到玩家屏幕
15.6 使用计时器
练习15.06 为玩家添加药剂的能量升级行为
活动15.03 创建药剂升级actor
练习15.07 创建Brick类
练习15.08 添加Brick类的C 逻辑
15.7 本章总结
15.8 额外的挑战
第16章 多人游戏基础
16.1 技术要求
16.2 多人游戏基础知识
16.3 理解服务器
16.3.1 专用的服务器
16.3.2 监听服务器
16.4 理解客户端394
练习16.01 在多人游戏中测试第三人称游戏模板
16.5 打包项目
16.6 探索连接和所有权
16.7 理解角色
16.7.1 服务器上生成actor
16.7.2 客户端上生成actor
16.7.3 服务器上生成玩家拥有的pawn
16.7.4 客户端上生成玩家拥有的pawn
练习16.02 实现所有权和角色
16.7.5 服务器窗口的输出
16.7.6 服务器角色(Server Character)
16.7.7 客户端1角色(Client 1 Character)
16.7.8 OwnershipTest actor
16.7.9 客户端(Client 1)窗口的输出
16.8 理解变量复制
16.8.1 复制变量
练习16.03 使用Replicated、ReplicatedUsing、DOREPLIFETIME和DOREPLIFETIME_CONDITION复制变量
16.8.2 服务器窗口的输出
16.8.3 客户端1窗口的输出
16.9 探索2D混合空间
练习16.04 创建一个运动的2D混合空间
16.10 Transform (Modify) Bone节点
练习16.05 创建能上下查看的角色
活动16.01 为多人第一人称射击游戏项目创建角色
16.11 本章总结
第17章 使用远程过程调用
17.1 技术要求
17.2 理解远程过程调用
17.2.1 服务器RPC.
17.2.2 多播RPC
17.2.3 客户端RPC
17.2.4 使用RPC时的重要注意事项
练习17.01 使用远程过程调用
17.3 向编辑器公开枚举
17.3.1 TEnumAsByte
17.3.2 UMETA
17.3.3 BlueprintType
练习17.02 在编辑器中使用C 枚举
17.4 使用数组索引包装
练习17.03 使用数组索引包装在枚举之间循环
活动17.01 为多人第一人称射击游戏添加武器和弹药.
17.5 本章总结
第18章 在多人游戏中使用游戏玩法框架类
18.1 技术要求
18.2 在多人游戏中访问游戏玩法框架实例
练习18.01 显示游戏玩法框架实例值
18.2.1 服务器窗口的输出
18.2.2 客户端1窗口的输出
18.3 使用游戏模式、玩家状态和游戏状态
18.3.1 游戏模式
18.3.2 玩家状态
18.3.3 游戏状态.
18.3.4 有用的内置函数
练习18.02 制作一个简单的多人拾取游戏
活动18.01 在多人第一人称射击游戏中添加死亡、重生、计分板、杀戮限制和拾取
18.4 本章总结
精彩书摘
第13章 创建和添加敌人人工智能
在上一章中,我们为玩家角色添加了分层动画,其中使用动画混合结合动画插槽、动画蓝图,以及Layered blend per bone等混合函数。有了这些知识,我们就能够顺利地将投掷动画蒙太奇与基本运动状态机平滑混合,为角色创建分层动画。在本章中,我们将讨论以下内容。
如何使用导航网格体(Navigation Mesh)在游戏世界中创建敌人可以移动的导航空间。如何使用虚幻引擎5中提供的包括黑板和行为树等的人工智能工具组合,创建一个可以在游戏世界中巡逻点位置之间导航的敌人。如何使用变换向量将局部变换转换为世界变换。如何在C 中创建一个玩家投射类,以及如何实现OnHit()碰撞事件函数来识别和记录投射在游戏世界中击中对象的情况。
13.1 技术要求
本章主要采用在“第12章 动画混合和蒙太奇”中创建的C 敌人类,并与人工智能相结合,
使这个敌人“活”起来。虚幻引擎5使用许多不同的工具来实现人工智能,例如AI控制器(AI
Controllers)、黑板(Blackboards)和行为树(Behavior Trees)等,我们将在本章中学习和使用这些功能。
在本章结束时,我们能够创建一个敌人可以移动的空间。我们还能够创建一个敌人人工智能
pawn,并使用黑板和行为树在不同的位置之间导航。最后,我们能够创建和实现一个玩家抛射
类,并添加视觉元素。在研究这些系统之前,让我们先花点时间了解近年来人工智能在游戏中
的发展。自从《超级马里奥兄弟》(Super Mario Bros)问世以来,人工智能无疑已经发生了巨大变化。
学习本章,技术要求如下:
安装虚幻引擎5。
安装Visual Studio 2022。
13.2 敌人人工智能
什么是人工智能(AI)?根据使用它的领域和背景,这个术语可以有很多含义,我们以一种
与视频游戏主题相关的方式来定义它。
人工智能是一种能够感知到其周围的环境并选择最优实现预定目标的实体。人工智能使用所
谓的有限状态机(finite state machines),根据从用户或环境接收到的输入在多个状态之间切换。例如,视频游戏人工智能可以根据其当前的生命值在进攻状态和防御状态之间切换。
在使用虚幻引擎4开发的《你好邻居》(Hello Neighbor)和《异形:隔离》(Alien: Isolation)
等游戏中,人工智能的目标是尽可能高效地找到玩家,但也要遵循开发者定义的一些预先确定的模式,以确保玩家能够比人工智能聪明。其中,《你好邻居》为人工智能添加了一个非常有创意的元素,即让人工智能从玩家过去的行为中学习,并尝试基于所学到的知识去战胜玩家。
我们可以在游戏发行商TinyBuild Games提供的视频中找到人工智能如何工作的详细信介绍,
链接:https://www.youtube.com/watch?v=Hu7Z52RaBGk。
有趣且富有挑战性的人工智能对于任何游戏都至关重要,而人工智能的复杂程度则取决于所
创造的游戏类型。我们将为超级横版动作游戏创造的人工智能不会像之前提到的那样复杂,但它将满足我们想要创造的游戏的需求。
让我们来分析一下敌人的行为。
敌人是一个非常简单的角色。他们有一个基本的来回移动模式,不具有任何攻击的动作,
只有通过与玩家角色发生碰撞才能造成伤害。
为敌人人工智能设置移动的位置。
接下来,我们必须决定人工智能是否应该改变位置、是否应该在位置之间不断移动,或者是否应该在选择移动到新位置之间暂停。
幸运的是,虚幻引擎5提供了大量的工具,我们可以使用这些工具开发如此复杂的人工智能。
在项目中,我们将使用这些工具来创建一个简单的敌人类型。下面让我们从讨论虚幻引擎5中的AI控制器开始。