第一章:Unreal C++ 开发环境搭建

说实话,很多新手学 Unreal C++,第一关就卡在环境搭建上。

我记得自己第一次配置时,光是 Visual Studio 就装了卸、卸了装,折腾了大半天。后来才发现,其实只要抓住几个关键点,十分钟就能搞定。

这一章,我就带你一步步走通这条路。

1.1 安装 Visual Studio

Unreal Engine 官方推荐用 Visual Studio 2019 或 2022。我个人习惯用 2022 社区版,免费,功能也够用。

安装时要注意这几个组件:

  • 使用 C++ 的桌面开发 —— 这是必选的工作负载
  • Windows 10 SDK (10.0.18362 或更高) —— 编译 Unreal 项目需要
  • .NET Framework 4.8 SDK —— 有些构建工具依赖它
⚠️ 我曾经踩过的坑: 安装时没勾选「Windows 10 SDK」,结果编译 UE 源码时报了一堆莫名其妙的头文件缺失错误。折腾了两小时才发现是 SDK 没装全。

安装完成后,建议重启一次电脑。嗯,这一步很多人会忘。

1.2 配置 Unreal Engine 项目

打开 Epic Games Launcher,在「虚幻引擎」标签页下点击「启动」。如果你是第一次用,需要先安装一个引擎版本。我建议装 5.3 或 5.4,稳定且文档齐全。

创建 C++ 项目的步骤:

  1. 点击「新建项目」
  2. 选择「游戏」→「空白」模板
  3. 项目类型选「C++」—— 注意,不是蓝图!
  4. 设置项目名称和保存路径
  5. 点击「创建项目」
💡 一个小技巧: 项目路径不要有中文和空格。我见过有人把项目放在「我的文档」里,结果编译时路径带空格,报了一堆 link 错误。你想想看,这种问题排查起来多头疼。

创建完成后,UE 会自动生成解决方案文件(.sln)。双击它,就能在 Visual Studio 中打开整个项目。

1.3 创建第一个 C++ 类

好,现在我们来写第一行代码。

在 UE 编辑器中,点击菜单栏的「工具」→「新建 C++ 类」。你会看到一堆基类选项:

基类 用途
Actor 可放置到世界中的对象
Pawn 可被控制的游戏实体
Character 带移动组件的 Pawn
GameModeBase 游戏规则控制器

我们选 Actor,命名为 MyFirstActor。点击「创建类」后,UE 会自动生成两个文件:MyFirstActor.hMyFirstActor.cpp

打开 MyFirstActor.h,你会看到类似这样的代码:

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "MyFirstActor.generated.h"

UCLASS()
class YOURPROJECT_API AMyFirstActor : public AActor
{
    GENERATED_BODY()

public:
    AMyFirstActor();

protected:
    virtual void BeginPlay() override;

public:
    virtual void Tick(float DeltaTime) override;
};

这里有几个关键点:

  • UCLASS() 宏告诉 UE 这是一个反射类
  • GENERATED_BODY() 必须放在类体最前面
  • BeginPlay 在游戏开始时调用,Tick 每帧调用
🔑 核心概念: UE 的反射系统通过宏标记类、属性和函数,让 C++ 代码能被蓝图和编辑器识别。说白了,就是给普通 C++ 类贴上了「UE 专属标签」。

现在,我们在 BeginPlay 里加一行打印:

void AMyFirstActor::BeginPlay()
{
    Super::BeginPlay();
    UE_LOG(LogTemp, Warning, TEXT("Hello from MyFirstActor!"));
}

编译运行后,打开输出日志(窗口 → 开发者工具 → 输出日志),你应该能看到这行文字。

💡 我个人的习惯: 调试时多用 UE_LOG 而不是断点。因为游戏循环是实时的,断点会卡住渲染线程,有时候反而看不出问题。日志虽然原始,但胜在稳定。

1.4 常见问题与避坑

配置过程中,你可能会遇到这些问题:

  • 编译报错:找不到 Windows SDK —— 回去检查 VS 安装组件
  • IntelliSense 卡死 —— 关闭「基于文件的轻量级解决方案」,改用文件夹视图
  • 代码修改后没生效 —— 在编辑器中点击「编译」按钮,或者手动重新生成解决方案
⚠️ 我曾经犯过的错: 有一次我改了头文件,但忘了重新生成 UHT(Unreal Header Tool)的反射数据,结果蓝图里死活找不到新加的变量。后来才意识到,修改 UCLASS 或 UPROPERTY 后必须重新编译,让 UHT 重新解析头文件。

好了,环境搭好了,第一个类也跑通了。下一章我们会深入 C++ 与蓝图的交互,到时候你会看到反射系统真正的威力。

先消化一下今天的内容,有问题随时翻回来看。我们下章见。