Language:
Page Info
Engine Version:
Share
此中文页面内容对应的英文页面有后续更新,如需浏览最新文档可切换至英文页面浏览。

编程基础

一个游戏项目包括了代码、内容,以及面向该游戏的特定的设置。游戏代码需要包含一个或多个游戏模块,每个游戏项目至少应该具有一个模块。内容的部分,比如美术资源、声音等,是导入到编辑器的资源,并且保存于数据包或者地图中。游戏设置有一些 配置文件 定义,并且在游戏启动时就会读取。这些合在一起,便是每个使用虚幻引擎开发的游戏都应该涵盖的最基础的形式。

ProjectModuleClassOrg.png

新建一个游戏项目 页面已经一步步的解释了如何新建一个游戏项目。项目创建后,就应该对项目的 目录结构 比较熟悉。这个信息会帮助了解目录中的一些文件是什么作用,以及如何为项目添加新文件。还可以通过在启动编辑器的时候传入 命令行参数 来达到直接进入游戏预览画面或者直接打开某个指定地图的作用。

模块

正如引擎本身由一组模块构成一样,每个游戏也是由一个或多个游戏性模块构成的。这些模块类似于引擎以前的版本中的包的概念,它们都是一组相关类的容器。在虚幻引擎 4 中,由于游戏逻辑都可以通过 C++ 实现,所以模块实际上是 DLL 文件,而不再是包文件。(译者:这里的“包文件”是指 UE3 中的 Package,Gameplay 相关的内容通常会被定义在 MyGame 的目录中,其中具有代码和脚本的实现,最终打包形成 MyGame.u 的形式。而 UE4 不再使用 .u 这类 Package 文件,而是使用更常规的模块化 DLL 文件。

查阅 游戏模块 页面来了解创建和使用游戏模块的详细信息。

模块接口(API)

对于一些需要被模块外部访问的函数和类,需要通过 *_API 的宏标记出来。每个被暴露在外的单项都会带来编译时间的额外消耗,因此请务必仅暴露出必须暴露的接口。如果外部只需要访问一个类中的某个函数,那么比起暴露整个类而言,仅暴露出这个函数能够节省出相当可观的编译时间。

查阅 模块 API 的定义 页面来了解如何将类和函数暴露给其他模块使用。

游戏逻辑的类使用标准的 C++ 头文件来定义,并结合引擎中定义的宏和语法,定义出虚幻引擎能够使用的的一个类。

查阅 虚幻架构 来了解类结构的完整说明,以及如何创建。

类的实现

在最最基本的层面上,任意可以被放置到关卡中的游戏物体都是一个 Actor。所有的 Actor 都是继承于 AActor 类,该类是所有可生成的游戏对象的基类。

在某种逻辑层面,Actor 可以被认为维系了一些特殊 Object 的容器,这些特殊 Object 被称为组件(Component)。比如,一个 CameraActor 会包含一个摄像机组件(CameraComponent)。

camera_actor.png

一个摄像机所具有的功能,比如视野,都是在 CameraComponent 中实现。同时也就是说其他 Actor 同样可以包含 CameraComponent,比如 Character,也能具有同样的摄像机的功能。

pawn_actor.png

不同类型的组件能够用来控制如何使用一个 Actor,如何渲染绘制该 Actor,以及其他诸多功能。所有的对象,包括组件,都是继承于 UObject 类,该类也是所有游戏逻辑代码类的基类(AActor 也继承于 UObject)。但 UObject 类无法直接被放置于场景中并实例化出来,需要放置于场景中并实例化的必须属于一个 Actor。

每个 Actor 或 Object 都是类的一个具体实例化对象。类为 Actor 或者 Object 设置了模板,定义了该 Actor 或者 Object 可以用到的变量有哪些,以及能够有哪些函数可以被调用。在 C++ 的代码中可以创建新的 Actor 或者 Object 的类型。而蓝图更多的是用来创建并设置 Acotr 的,当然仍然可以通过蓝图来继承本扩展某些 Object 的功能或属性。如果想要了解更多关于如何新建类,来实现新的 Actor 或者 Object 的话,请查阅 新建类的基础 页面。

关于 Object,Actor 和 Component 的更多信息,请参考 游戏逻辑编程 文档。