UE C++ 快速开启指南
作为 UE 的开发一种方式,没有C++,倘若只是使用蓝图开发,固然可以,但是正如来到了巴黎没有去看埃菲尔铁塔,吃夹心饼干,但是没有夹心,总是缺少一点儿核心的。
我们都知道在计算机中,不论什么开发方式,最终的目的都是去生成机器码,然后才能运行,而UE的开发内容,整体是以C开启的,你的绘制也会由一种叫做 “Kismet” 转化为 C Native,从而进一步运行的,所以 UE 的开发从本质来看就是一个C项目。因此本文会从 C 执行的角度来对 UE 项目进行一个重新介绍。
首先本文会简要介绍 C++ 的基本编译流程、简要讲解预处理、编译、汇编、链接的过程。
C++基本的编译流程
预处理阶段
如上图所示,C++源码首先会被预处理,在这一步骤中,主要是为了进行一个静态替换,可以理解为编译器帮我们 Replace 了一遍:
1 |
|
1 | gcc -E main.cpp -o main. |
1 | ..... |
先不看 #include 中展开的 #define ,我们直接看 main 函数部分,可以看到这个时候的 A
已经变成了 1
,那这一步我们怎么在 visual studio 进行呢?其实很简单
点击或进入配置数学在此处配置,可以选择是否保留注释。
经过静态替换之后,也就是说其实之前还是代码源文件处理的文本阶段(这一步在使用Rust开发的时候感慨颇深😒),经过替换后才进入编译器阶段。
编译器处理阶段
这一部分主要是编译原理的内容了,不过多深入。
1.扫描(词法分析),2.语法分析,3.语义分析,4.源代码优化(中间语言生成),5.代码生成,目标代码优化。
下列语句可以生成,但是相信我,没啥看的。因为这个时候就是一个二进制了。
1 | gcc -s hello.c -o hello.s |
汇编阶段(as)
主要作用:汇编器是将汇编代码转变成可以执行的指令,生成目标文件。
链接阶段(ld)
通过编译器的5个步骤后,我们获得目标代码,但是里面的各个地址还没有确定,空间还没有分配。
这里面值得我们关注和需要重点理解的是 ld 阶段,浙江有助于我们去理解和使用。链接(Link)其实就是一个"打包"的过程,它将所有二进制形式的目标文件(.o)和系统组件组合成一个可执行文件。C++程序编译的时候其实只识别.cpp文件,每个cpp文件都会分别编译一次,生成一个.o文件。这个时候,链接器除了将目标文件和系统组件组合起来,还需要将编译器生成的多个.o或者.obj文件组合起来,生成最终的可执行文件(Executable file)。
UE 中开启 C++
首先进入项目,然后在 Tools>New C++ Class
接着会弹出对话框,选择希望生成的类型模板。这里为了方便,选中 Actor 类型生成,
这有两个值得关注的点,这个之后再描述,本文只是为了简要讲解如何开始一个C项目,以及看的懂外部C库引用。创建后,会提示询问是否重新编译,一般选是
之后再次点击 Tools>Open xx Project
,本文使用的是 Rider
,
值得注意的是,和C++挂钩的环境配置都很麻烦。
Unreal Engine Version | VS 2019 Version | VS 2022 Version |
---|---|---|
5.3 | 16.11.5 or later | 17.4 or later, 17.6 recommended (Default) |
5.2 | 16.11.5 or later | 17.4 or later (Default) |
5.1 | 16.11.5 or later (Default) | 17.4 or later |
使用C++的Actor
就和正常创建 Actor 一样,选择蓝图类。
—待更新