Choose your operating system:
Windows
macOS
Linux
一个游戏项目包括了代码、内容,以及面向该游戏的特定的设置。游戏代码需要包含一个或多个游戏模块,每个游戏项目至少应该具有一个模块。内容的部分,比如美术资源、声音等,是导入到编辑器的资源,并且保存于数据包或者地图中。游戏设置有一些 配置文件 定义,并且在游戏启动时就会读取。这些合在一起,便是每个使用虚幻引擎开发的游戏都应该涵盖的最基础的形式。
新建一个游戏项目 页面已经一步步的解释了如何新建一个游戏项目。项目创建后,就应该对项目的 目录结构 比较熟悉。这个信息会帮助了解目录中的一些文件是什么作用,以及如何为项目添加新文件。还可以通过在启动编辑器的时候传入 命令行参数 来达到直接进入游戏预览画面或者直接打开某个指定地图的作用。
模块
正如引擎本身由一组模块构成一样,每个游戏也是由一个或多个游戏性模块构成的。这些模块类似于引擎以前的版本中的包的概念,它们都是一组相关类的容器。在虚幻引擎 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)。
一个摄像机所具有的功能,比如视野,都是在 CameraComponent 中实现。同时也就是说其他 Actor 同样可以包含 CameraComponent ,比如 Character,也能具有同样的摄像机的功能。
不同类型的组件能够用来控制如何使用一个 Actor,如何渲染绘制该 Actor,以及其他诸多功能。所有的对象,包括组件,都是继承于 UObject 类,该类也是所有游戏逻辑代码类的基类(AActor 也继承于 UObject)。但 UObject 类无法直接被放置于场景中并实例化出来,需要放置于场景中并实例化的必须属于一个 Actor。
每个 Actor 或 Object 都是类的一个具体实例化对象。类为 Actor 或者 Object 设置了模板,定义了该 Actor 或者 Object 可以用到的变量有哪些,以及能够有哪些函数可以被调用。在 C++ 的代码中可以创建新的 Actor 或者 Object 的类型。而蓝图更多的是用来创建并设置 Acotr 的,当然仍然可以通过蓝图来继承本扩展某些 Object 的功能或属性。如果想要了解更多关于如何新建类,来实现新的 Actor 或者 Object 的话,请查阅 新建类的基础 页面。
关于 Object,Actor 和 Component 的更多信息,请参考 游戏逻辑编程 文档。