本书以两位作者本人在使用虚幻引擎过程中的实际经历为参考,包括三大部分:使用C++语言进行游戏性编程、了解虚幻引擎本身底层结构与渲染结构、编写插件扩展虚幻引擎。提供了不同于官方文档内容的虚幻引擎相关细节和有效实践。有助于读者一窥虚幻引擎本身设计的精妙之处,并能学习到定制虚幻引擎所需的基础知识,实现对其的按需定制。
一本以Unreal Engine源码和引擎定制为核心的书籍,给予有兴趣深入虚幻引擎开发的读者以指引,并提供了实用的代码范例!
前言
建德若偷,质真若渝。大方无隅,大器晚成。
大音希声,大象无形。夫唯道善贷且成。
——老子,《道德经》
虚幻引擎作为业界一流的次时代引擎,开发了无数成功的作品。在短暂的计算机图形学发展历史上,虚幻引擎历经四代,成为游戏引擎界举足轻重的成员之一。
但是虚幻引擎庞大而复杂的设计,阻碍了许多人学习的步伐。尽管有蓝图系统作为图形化编程,降低了虚幻引擎的上手难度,但是当开发者们走入虚幻引擎的 C++ 范畴,依然会感觉到无从下手。
因此,我决定和我的同事一起来撰写本书。希望能够借助我们微薄之力,帮你理解庞大的虚幻引擎是如何工作的。笔者对本书内容的期望是,这是一本笔者在学习虚幻引擎时希望能够获得的书。
同时也请明白,虚幻引擎的代码量为五百万行。本书篇幅不足以分析整个虚幻引擎的所有模块,也无法精确地向读者展示每段代码的意义。相反地,本书立足于:展示引擎基本结构,即尽可能告诉读者“它是这么跑起来的”,对于希望精确研究每一段代码过程的读者,本书会告知你如何寻找到对应的代码。本书主标题为“大象无形”,《道德经》中有言:大器晚成,大音希声,大象无形。本书取“伟大的设计对于使用者来说似乎感觉不到存在”和“优秀的系统设计让开发者不需要过多了解原理即能使用”这样的含义。对于虚幻引擎而言,本书中介绍的很多知识,对于普通开发者来说似乎是“没有感觉到存在”的东西,例如引擎的渲染系统,普通开发者几乎只需要简单地完成导入和摆放就能使用,并不需要实际了解渲染系统的工作原理。能够达到这样的效果,恰恰说明了虚幻引擎设计的优秀:能够让开发者不需要了解系统的机制,就能够快速使用其来完成自己的需求,此即“无形”。然而这样优秀的设计是如何完成的?如何扩展这样的设计来让开发者完成自己独特的需求?这是本书希望探讨的内容。
本书由两位作者共同编撰而成,其中罗丁力先生完成了第一部分(除《引擎系统相关类》章节)和第二部分,以及第三部分中《引擎独立应用程序》《自定义资源和编辑器》章节,张三先生完成了第二部分中《引擎系统相关类》章节与第三部分中《插件开发》章节。
笔者才疏学浅,撰写本书仅仅为个人一家之言。欢迎每一位读者对本书提出建议和指正,也欢迎更多的人去撰写虚幻引擎相关的书籍,共同为虚幻引擎的推广、运用做出努力。你可以发送邮件到 three@sanwu.org。
感谢 Unreal Engine,陪伴我度过了最美好的青春。
阅读之前
你好,欢迎你阅读本书。在这里我希望能向你讲述一些关于阅读本书的约定。首先,这不是一本“虚幻引擎入门宝典”或是“虚幻引擎从入门到精把视角集中到那些市面上的教程没有涉及的领域,所以我们不会教你:
(1) 如何下载引擎
(2) 如何安装引擎和 Visual Studio
(3) 如何更新引擎
(4) 如何申请虚幻引擎账户
我们假定你已经掌握这些知识。并且我们也不会教你:
(1) C++ 语法
(2) C 语言语法
我们认为你在使用虚幻引擎的 C++ 语言进行编程之前,已经掌握了 C++ 的基础语
法,包括函数、变量、类、指针与模板。当然,我们会向你解释虚幻引擎中的独有的C++成分,包括 C++11 标准的一些内容。
如果你已经做好了准备,欢迎开始你的阅读之旅。本书分为以下三个部分:
虚幻引擎 C++ 编程 这个部分简单介绍虚幻引擎的 C++ 编程方式,你可以通过这个部分回顾、整理你从官方文档学习到的有关使用虚幻引擎进行编程的知识,并给出了一部分官方文档尚未介绍但可以被使用的库、API 与技巧。虚幻引擎浅析 这个部分将会引导读者去研究虚幻引擎源码,并给出笔者认为在深入使用虚幻引擎进行游戏开发的过程中,可能会需要具备的引擎架构、模块如何工作的知识。换句话说,这个部分介绍虚幻引擎是如何工作的。
扩展虚幻引擎 这个部分则是通过介绍虚幻引擎的插件编写,将第二部分的知识运用起来,让读者不至于觉得这是 “屠龙之技”,虽有思辨的乐趣,却没有用武之地。进而赋予读者定制虚幻引擎以符合自己游戏实际情况的能力。笔者认为这是专业游戏开发者所需要具备的技能。
在每一小节开头,笔者会提供一个常常被问及的问题,然后根据这个问题来阐述接下来的内容,就像这样:
问题
我该如何学习虚幻引擎?
读者可以在阅读完每一个小节后,回顾小节开头的问题,以检验自己是否已经理解了本节的内容。
笔者在这里衷心地祝愿你找到你希望学习的知识,祝你一切顺利!
鸣谢
本书在撰写过程中受到了大量同行、朋友及亲人的帮助,有许多同行无私地贡献了自己的想法、意见及自己宝贵的经验,在此对他们表示真挚的感谢:
非常感谢 NetFly 和秦春林先生对本书的支持,他们不仅帮助笔者联系了本书的出版社,也非常认真地审阅本书的稿件,并给出了中肯有效的意见,没有他们的帮助,本书不可能出版。
非常感谢傅建钊先生对本书的帮助,提出了大量有效的意见,并组织了相当多的业内人士共同讨论本书的主题,他的知乎专栏《Inside UE4》对虚幻引擎的剖析同样非常精彩,建议读者可以参考。
同时,也有不少同行针对书中许多主题给出了自己独到的见解,并被整理到书中。LSFW 先生给笔者多次反复讲解渲染框架设计,贡献出了自己对渲染系统的研究成果;黄河水先生、Dest1ny 先生撰写了大量博客来分析虚幻引擎的底层架构,给笔者启发颇多;王德立先生帮助本书绘制了插图。还有许许多多同行,在此恕无法一一举名。
感谢三巫社区和 Epic Games 对本书的出版过程的支持与帮助。
最后,作者之一罗丁力希望感谢 Black Rock Shooter,感谢她在撰写本书的过程中,对其鼓励与陪伴。
这本书是我见过非常非常差的书,内容非常浅,基本都是从官方文档总结的,官方文档比这个要全多了,而且是一步一步学习的,比着本书强多了,这本书我觉得在骗钱,我很后悔买这本书,希望大家参考官方文档学习,学的全面,而且由浅入深,容易上手
说实话,对这本书还是挺失望的,可能是我对它的期望过高,更可能是我的知识水平太有限.还接触不了如此底层.
UObject Actor Pawn Controller与Character
为什么不是Component而是Character?很抱歉通篇没看见有关Component的介绍.个人认为Component能与Pawn相同并论.
为什么Character会作为五个最常见的 基 类存在,那不仅仅是Pawn的加强实现吗?仅仅使用Pawn可以实现相同的目的.
说实话这本书不是我想要的,我在阅读之前满怀期待的认为会着重于源码的架构分析.这儿为什么要这样设计?为什么这样设计最优?其他实现方式有什么优劣?以及深入某些比较重要的函数/组件(camera组件是如何能够被我们看见的的?mesh组件是如何在世界中显示的?在Actor中那四个CreatSubobject有什么区别?为什么即使我没有进行任何操作,这个轴输入事件依旧会产生,只不过值为0?Actor的Tick是如何传递的?Component的TickComponent又是如何传递的?MovementComponent中的SetUpdatedComponent是什么?…)
而这本书着重的是更加深层的东西.我完全看不懂的东西.
如果你对我有什么意见或建议,请联系我的邮箱:2250482959@qq.com
我应该不会在这里回复你的任何信息.
怎么购买??
好像不错的样子
今天刚刚入手 占个坑