UE C++ 开发全生命周期 + 全场景的知识点清单

实战案例:

5W字超级细致教学!虚幻引擎 C++ 制作"坦克大战"

虚幻引擎 C++ 制作"射击FPS游戏"_c++游戏

这是一份极致全面、覆盖 UE C++ 开发全生命周期 + 全场景的知识点清单,不仅包含核心开发内容,还涵盖编辑器扩展、渲染交互、跨平台、发布运维、高级优化等易遗漏的关键维度。以下是重新梳理的完整清单,从前置基础到进阶专题,覆盖 UE 4/5 C++ 开发的所有核心与边缘知识点:

一、前置核心基础(UE C++ 开发的底层支撑)

1. C++ 语言(UE 适配版)

  • 基础语法:变量、函数、类 / 对象、继承 / 多态、模板(UE 常用 T 模板)
  • 进阶特性:C++17/20 在 UE 中的支持(auto、lambda、constexpr、concepts)
  • 内存模型:栈 / 堆、内存对齐(UE_ALIGN_OF、__declspec (align))、内存池(UE 内置)
  • 智能指针:UE 专属 TSharedPtr/TWeakPtr/TUniquePtr(区别于 std::shared_ptr)
  • 异常处理:UE 禁用 C++ 异常,改用返回值 / 断言(check ()/ensure ())
  • 类型转换:UE 推荐 Cast<>()/CastChecked<>()(替代 dynamic_cast),StaticCast/ConstCast

2. UE 专属数据类型

  1. 字符串类型:FString(可修改、格式化)、FName(不可修改、哈希优化)、FText(本地化)及相互转换
  2. 数值类型:FVector(三维向量)、FRotator(旋转)、FQuat(四元数)、FTransform(变换)、FColor/FLinearColor(颜色)
  3. 容器类型:TArray(动态数组,替代 std::vector)、TMap(键值对,替代 std::map)、TSet(集合)、TQueue(队列),及容器的线程安全使用

详解虚幻引擎的字符串类型-CSDN博客

3. 数学基础(游戏开发核心)

  • 线性代数:向量(FVector/FVector2D/FVector4)、矩阵(FMatrix/FTransform)、四元数(FQuat)、欧拉角(FRotator)运算
  • 几何计算:射线 / 平面 / 球体 / 盒体相交检测、插值(FMath::Lerp/Slerp)、坐标系转换(世界 / 局部 / 视口)
  • 随机数:FMath::RandRange ()、FRandomStream(可复现随机)、随机种子管理
  • 物理数学:重力、摩擦力、加速度、碰撞响应计算

4. 工程化基础

  • 版本控制:Git/SVN 与 UE 工程适配(.gitignore 配置、Content/Config 忽略规则)
  • 编码规范:UE 官方 C++ 规范(命名法、注释、类结构)、团队定制规范
  • 文档工具:Doxygen 生成 UE C++ 文档、UE API 文档查阅技巧

二、UE 开发环境与工程体系(深度配置)

1. 开发工具链

  • IDE 深度配置:VS2022(IntelliSense 优化、UE 调试插件)、Rider for Unreal(快捷键、重构、UE 专属提示)
  • 编译器:MSVC/Clang/GCC 适配、编译选项(/O2 优化、警告等级)
  • 引擎版本管理:源码版 UE 编译(Debug/Development/Shipping 配置)、引擎热更、分支定制
  • 辅助工具:Unreal Header Tool(UHT)调试、Unreal Build Tool(UBT)自定义脚本

2. 工程与模块系统(Module)

  • 模块类型:Runtime/Editor/Program/Plugin 模块、模块依赖优先级
  • .Build.cs 深度配置:
    • 依赖管理:PublicDependencyModuleNames/PrivateDependencyModuleNames、动态依赖加载
    • 编译配置:bUseRTTI、bEnableCppException、bUseUnityBuild、预编译头(PCH)
    • 第三方库集成:PublicIncludePaths、AdditionalLibraries、延迟加载库(DelayLoad)
  • 模块生命周期:StartupModule ()/ShutdownModule ()、模块间通信(IModuleInterface)
  • 工程配置:Target.cs(目标平台、编译定义)、DefaultEngine.ini/DefaultGame.ini 配置覆盖

3. 插件开发(完整体系)

  • 插件类型:工程插件 / 引擎插件、空白插件 / 模板插件(ActorComponent/EditorTool 等)
  • 插件开发流程:插件创建、模块关联、资源打包、插件依赖
  • 插件发布:插件签名、UE Marketplace 提交规范、版本兼容
  • 第三方插件集成:插件冲突解决、版本适配、源码修改

三、UE C++ 核心体系

虚幻引擎_核心框架-CSDN博客https://blog.csdn.net/Howrun777/article/details/157425301?sharetype=blogdetail&sharerId=157425301&sharerefer=PC&sharesource=Howrun777&spm=1011.2480.3001.8118UObject:UE 所有反射对象的基类,反射、垃圾回收(GC)、序列化的核心

1. UObject 体系:反射与元数据

UObject 是整个引擎的基石,提供了超越原生 C++ 的工业级对象模型。

1. 反射系统 (Reflection System / Property System)
  • 核心理念:通过 UnrealHeaderTool (UHT) 扫描宏标记,生成 .gen.cpp 代码,实现运行时感知类结构。

  • 元数据访问

    • UClass:类的描述符,存储函数表、属性表。

    • FProperty:属性系统(UE 4.25+ 替代了旧的 UProperty),用于动态访问变量。

    • UFunction:函数元数据,支持蓝图调用与网络 RPC。

  • 核心机制

    • CDO (Class Default Object):每个类都有一个默认对象,用于存储默认属性值,是实例化的模板。

    • 对象迭代器:TObjectIterator<T> 和 TActorIterator<T> 遍历运行时对象。

2. 垃圾回收 (Garbage Collection)
  • 回收机制 :基于可达性分析 (Reachability Analysis) 的标记-清除 (Mark and Sweep) 算法。

  • 引用追踪

    • 强引用:UPROPERTY() 宏标记的成员变量。

    • 根集 (RootSet):AddToRoot() 将对象标记为永不销毁。

    • 容器支持:TArray<UObject*> 等容器若加了 UPROPERTY(),其内部元素也会被追踪。

  • 弱引用与控制

    • TWeakObjectPtr<T>:不影响 GC,防止悬空指针导致崩溃。

    • FGCObject:让非 UObject 类也能参与 GC 追踪。

    • 增量 GC (Incremental GC):通过时间片分配减少掉帧。

3. 序列化 (Serialization)
  • 核心流:通过 FArchive 实现。重写 Serialize(FArchive& Ar) 可自定义存盘或加载逻辑。

  • 版本控制:使用 FCustomVersion 解决数据结构变化后的兼容性问题。

  • 网络序列化:NetSerialize 用于自定义结构体的压缩与网络传输。

2. UObject 生命周期管理

理解对象从创建到销毁的准确时机。

创建阶段

  • NewObject<T>():标准动态创建。

  • CreateDefaultSubobject<T>():仅在构造函数使用,用于创建组件或子对象。

  • StaticDuplicateObject():克隆对象。

销毁阶段

  • MarkAsGarbage() (旧版 ConditionalBeginDestroy):标记为待回收。

  • BeginDestroy():异步销毁开始,释放非托管资源。

  • FinishDestroy():内存释放前的最后一步。

注意 :SetLifeSpan() 是 AActor 的方法,通过定时器调用 Destroy()。普通 UObject 仅靠 GC 自动释放。


3. 核心宏与修饰符全解析

1. UCLASS():类行为定义

存储逻辑:Config (存入 .ini), PerObjectConfig (每个对象独立配置), Transient (内存临时,不序列化)。

编辑器显示:HideCategories, ShowCategories, CollapseCategories (简化 UI)。

抽象性:Abstract (标记为抽象类,不可直接实例化)。

2. UPROPERTY():变量行为定义

内存性质:DuplicateTransient (复制时重置), NonTransactional (撤销操作时不记录)。

权限控制

  • EditAnywhere / VisibleAnywhere (任何地方)。

  • EditDefaultsOnly / EditInstanceOnly (仅原型 / 仅实例)。

蓝图交互:BlueprintReadOnly / BlueprintReadWrite, BlueprintGetter / BlueprintSetter (封装)。

元数据 (meta):ClampMin, ClampMax, UIMin, UIMax, DisplayName, AllowPrivateAccess (私有变量也可在蓝图访问)。

3. UFUNCTION():函数逻辑定义

网络 RPC

  • Server: 客户端调,服务器执。

  • Client: 服务器调,特定客户端执。

  • NetMulticast: 服务器调,所有端执。

  • Reliable / Unreliable: 是否保证必达。

蓝图扩展

  • BlueprintCallable: 蓝图可调用。

  • BlueprintPure: 无执行线,仅返回值。

  • BlueprintNativeEvent: C++ 写默认实现,蓝图可重写 (需实现 _Implementation)。

  • BlueprintImplementableEvent: C++ 不写实现,完全交给蓝图。

工具化:CallInEditor (在编辑器 Details 面板生成按钮)。


4. 代理与回调 (Delegates)

UE 的事件驱动核心,解决了模块间的解耦。

单播代理:DECLARE_DELEGATE (一对一,不支持蓝图)。

多播代理:DECLARE_MULTICAST_DELEGATE (一对多,C++ 高效触发)。

动态代理:DECLARE_DYNAMIC_DELEGATE (支持序列化,支持蓝图)。

动态多播代理 :DECLARE_DYNAMIC_MULTICAST_DELEGATE (即蓝图中的 Event Dispatcher,最常用)。

草履虫也能看懂的虚幻引擎的委托机制https://blog.csdn.net/Howrun777/article/details/155206084?spm=1011.2415.3001.5331

5. 调试与日志体系

分类日志:DECLARE_LOG_CATEGORY_EXTERN 定义分类,方便在 Output Log 中过滤。

分级控制:Fatal, Error, Warning, Display, Log, Verbose, VeryVerbose。

运行时检测

  • check(condition):断言,条件不满足则崩溃。

  • ensure(condition):条件不满足则报错并堆栈跟踪,但不会崩溃。

  • verify(condition):生产环境下依然生效的 check。

四、游戏对象系统(全场景覆盖)

虚幻引擎_核心框架-CSDN博客https://blog.csdn.net/Howrun777/article/details/157425301?spm=1011.2415.3001.5331

bash 复制代码
UObject (万物之源:垃圾回收 / 反射 / 序列化)
│
│  # 1. [实体与逻辑] World Actors
├─────── AActor (场景实体基类)
│           ├── APawn
│           │     └── ACharacter (胶囊体 + CharacterMovement)
│           ├── AController (控制者)
│           │     ├── APlayerController (玩家输入 / HUD / 摄像机管理)
│           │     └── AAIController (AI 寻路 / 行为树驱动)
│           ├── AInfo (纯逻辑)
│           │     ├── AGameModeBase (服务器端规则)
│           │     ├── AGameStateBase (全网同步的游戏状态)
│           │     └── APlayerState (全网同步的玩家个人数据:计分、名字)
│           ├── AHUD (传统的 UI 绘制类,用于调试或管理 Widget)
│           └── ACameraActor (摄像机演员)
│
│  # 2. [组件系统] Components (能力的积木)
├─────── UActorComponent (逻辑组件)
│           ├── USceneComponent (带 Transform 坐标)
│           │     ├── UPrimitiveComponent (渲染与物理)
│           │     │     ├── UStaticMeshComponent
│           │     │     ├── USkeletalMeshComponent (带动画)
│           │     │     ├── UShapeComponent (碰撞盒: Box/Sphere/Capsule)
│           │     │     └── UParticleSystemComponent (粒子特效)
│           │     ├── UAudioComponent (音效)
│           │     ├── UCameraComponent (摄像机视角)
│           │     └── UChildActorComponent (在 Actor 里嵌套另一个 Actor)
│           ├── UMovementComponent (移动逻辑)
│           │     ├── UProjectileMovementComponent (投射物/子弹)
│           │     └── URotatingMovementComponent (自转)
│           └── UInputComponent (接收按键输入)
│
│  # 3. [核心框架] Framework & System
├─────┬── UWorld (地图容器,管理 Level / Physics / Rendering)
│     ├── ULevel (关卡数据)
│     ├── UGameInstance (全局单例,跨关卡持久化)
│     ├── ULocalPlayer (本地玩家代表,管理分屏和 Slate 视口)
│     ├── USaveGame (存档对象,序列化成 .sav 文件)
│     └── USubsystem (生命周期自动管理的子系统)
│           ├── UGameInstanceSubsystem (如:成就系统)
│           ├── UWorldSubsystem (如:怪物生成器)
│           └── UEditorSubsystem (仅编辑器工具)
│
│  # 4. [动画系统] Animation (角色表现的核心)
├─────┬── UAnimInstance (动画蓝图的基类,处理动画状态机)
│     ├── UAnimSequence (动画序列资源)
│     └── UAnimMontage (动画蒙太奇,用于播放攻击动作等)
│
│    # 5. [UI 系统] User Interface
├──── UVisual
│        └── UWidget (Slate 包装器)
│                 ├── UUserWidget (UMG 蓝图基类)
│                 └── UPanelWidget (布局容器:CanvasPanel, VerticalBox)
│
│  # 6. [静态资产] Assets (Content Browser 中的文件)
├─────┬── UDataAsset (通用数据表)
│     ├── UStreamableRenderAsset
│     │     ├── UTexture (纹理)
│     │     └── UStaticMesh / USkeletalMesh (模型)
│     ├── USoundBase
│     │     ├── USoundCue (音频逻辑图)
│     │     └── USoundWave (音频源文件)
│     ├── UMaterialInterface (材质)
│     ├── UInputMappingContext / UInputAction (UE5 增强输入资源)
│     └── UBehaviorTree / UBlackboardData (AI 行为树资源)
│
│ # 7. [反射与元数据] Reflection
├────── UField
│           ├── UStruct
│           │     ├── UClass (类的类型信息)
│           │     ├── UFunction (函数)
│           │     └── UScriptStruct (结构体)
│           └── UEnum (枚举)
│
│ # 8. [接口] Interface
└────── UInterface (C++ 接口基类)

1. 基础游戏对象

AActor (游戏世界可放置对象)

  • 生命周期:PreInitializeComponents ()、PostInitializeComponents ()、BeginPlay ()/Tick ()/EndPlay ()
  • 变换:GetActorTransform ()/SetActorTransform ()、Relative/World 变换转换
  • 标记:ActorTags、Tags、GetAllActorsWithTag ()
  • 关卡关联:GetLevel ()、LevelActor、PersistentLevel

虚幻引擎的标签系统Tagshttps://blog.csdn.net/Howrun777/article/details/155206938?spm=1011.2415.3001.5331

UActorComponent 体系:

  • 组件生命周期:InitializeComponent ()/DeinitializeComponent ()、TickComponent ()
  • 组件类型:
    • 常用组件:USceneComponent(根组件)、UStaticMeshComponent(静态网格)、USkeletalMeshComponent(骨骼网格)、UCameraComponent(相机)、UInputComponent(输入)、USpringArmComponent(弹簧臂)
    • 渲染组件:UInstancedStaticMeshComponent(实例化静态网格)、UTextRenderComponent
    • 逻辑组件:UActorComponent、UWidgetComponent(UI 组件)、UTimelineComponent(时间线)
  • 组件复用:CreateDefaultSubobject<>()(构造函数)、AddComponent ()(运行时)、AttachToComponent ()

2. 角色与控制

**APawn:**可被控制的 Actor,拥有 Controller 引用

**ACharacter:**带移动组件的 Pawn,包含 UCharacterMovementComponent(移动逻辑)

**角色移动定制:**重写 CharacterMovement 的移动参数(如最大速度、重力)

APawn/APlayerController:

  • 控制权:Possess ()/Unpossess ()、IsPlayerControlled ()
  • 输入:PlayerInput、InputComponent、GetInputAxisValue ()
  • 视角:SetViewTarget ()、GetPlayerViewPoint ()、CameraManager

ACharacter 进阶:

  • 移动组件:UCharacterMovementComponent 参数(MaxWalkSpeed、GravityScale、bCanJump)
  • 移动模式:MOVE_Walking/MOVE_Falling/MOVE_Swimming、自定义移动模式
  • 落地检测:OnLand ()、IsMovingOnGround ()、Jump ()/StopJumping ()

**AI 控制器:**AAIController、FAIMoveRequest、MoveToLocation ()/MoveToActor ()

虚幻引擎_AController_APlayerController_AAIController-CSDN博客https://blog.csdn.net/Howrun777/article/details/156986641?spm=1011.2415.3001.5331

虚幻引擎_玩家控制器APlayerController(初阶)https://blog.csdn.net/Howrun777/article/details/156986319?spm=1011.2415.3001.5331

虚幻引擎_玩家控制器APlayerController(进阶)https://blog.csdn.net/Howrun777/article/details/156986537?spm=1011.2415.3001.5331

虚幻引擎_控制角色移动的三种方法https://blog.csdn.net/Howrun777/article/details/156988335?spm=1011.2415.3001.5331

3. 关卡与世界对象

UWorld:

  • 世界操作:SpawnActor<>()、GetAllActorsOfClass ()、LineTraceSingle ()
  • 关卡管理:LoadLevel ()、OpenLevel ()、StreamLevel(流关卡)、LevelStreamingDynamic
  • 游戏模式:GetAuthGameMode ()、GetGameState ()、GetPlayerState ()

AGameMode/AGameState/APlayerState:

  • GameMode:服务器权威,控制游戏规则(StartPlay ()、RestartGame ())
  • GameState:全局状态,复制到所有客户端(Replicated)
  • PlayerState:玩家持久状态(分数、等级),自动复制

触发器与体积:

  • ATriggerVolume/ATriggerBox:OnActorBeginOverlap/OnActorEndOverlap
  • AVolume:雾体积、光照体积、音频体积的 C++ 控制

五、蓝图与 C++ 深度交互

1. C++ 暴露给蓝图

  • UPROPERTY ():BlueprintReadWrite/BlueprintReadOnly 暴露属性
  • UFUNCTION ():BlueprintCallable(蓝图调用)、BlueprintImplementableEvent(蓝图实现)、BlueprintNativeEvent(C++ 默认 + 蓝图重写)
  • 蓝图可继承的 C++ 类:UCLASS (Blueprintable) 修饰
  • 蓝图接口:UINTERFACE ()、IInterface 实现,蓝图强制实现接口方法
  • 蓝图类加载:TSubclassOf<>()、LoadClass<>()、StaticLoadClass ()
  • 蓝图变量访问:FindFieldChecked<UProperty>()、GetPropertyValue()/SetPropertyValue()
  • 蓝图委托绑定:DynamicDelegate->BindUFunction ()
  • 蓝图原生节点:自定义 K2Node(编辑器扩展)、BlueprintNodeSpawner

2. C++ 调用蓝图

  • 调用蓝图实现的 NativeEvent:Super::XXX_Implementation ()
  • 通过类名加载蓝图类:LoadClass<AActor>(nullptr, TEXT("/Game/Blueprints/BP_MyActor.BP_MyActor_C"))
  • 访问蓝图添加的属性:FindFieldChecked<UProperty>() 动态获取
  • 蓝图事件调用:Execute_EventName ()(NativeEvent)
  • 蓝图函数调用:CallFunctionByNameWithArguments ()
  • 蓝图 Cast:Cast<UBlueprintGeneratedClass>()、IsA()
  • 蓝图数据资产:UDataAsset 子类,蓝图配置数据,C++ 读取

3.蓝图函数库(BlueprintFunctionLibrary)

  • UCLASS (Blueprintable, BlueprintType) 继承 UBlueprintFunctionLibrary
  • UFUNCTION (BlueprintCallable, Category="MyLibrary") 静态函数封装通用逻辑

4. 混合开发规范

  • 职责划分:C++ 做核心逻辑(性能、算法),蓝图做表现(UI、数值、动画)
  • 避免陷阱:蓝图重写 C++ 函数的性能损耗、GC 对蓝图对象的影响
  • 调试:蓝图与 C++ 联合调试,断点跨语言跳转

虚幻引擎-设计场景物体哲学-C++

六、输入系统(全平台适配)

1. 传统输入系统

  • InputComponent 绑定:BindAxis ()/BindAction ()、BindKey ()、BindTouch ()
  • 输入映射:GetDefault<UInputSettings>()->AddAxisMapping ()(运行时修改)
  • 输入优先级:PlayerController 输入优先级、InputMode(游戏 / UI / 游戏 + UI)

2. 增强输入系统(Enhanced Input)

  • 核心类:UEnhancedInputLocalPlayerSubsystem、UEnhancedInputComponent
  • 输入动作:UInputAction(ValueType、TriggerBehavior)
  • 输入映射上下文:UInputMappingContext、AddMappingContext ()/RemoveMappingContext ()
  • 高级绑定:BindAction () 带触发条件(Pressed/Released/Held)、输入值过滤
  • 多设备适配:手柄(Xbox/PS)、键鼠、触控(多点触摸)、VR 控制器

虚幻引擎如何实现按键绑定按键反馈C++

七、物理与碰撞(进阶特性)

1. 核心物理控制

  • 物理状态:SetSimulatePhysics ()、SetEnableGravity ()、IsPhysicsConstrained ()
  • 物理材质:UPhysicalMaterial(摩擦系数、恢复系数)、SetPhysicalMaterial ()
  • 力与扭矩:AddForceAtLocation ()、AddImpulseAtLocation ()、AddRadialForce ()
  • 物理约束:UConstraintComponent(铰链、滑块、固定约束)

2. 高级物理

  • 布料系统:UClothingComponent、ClothingSimulation、自定义布料参数
  • 破坏系统:UDestructibleComponent、FractureSettings、破坏回调
  • 流体物理:Niagara 流体与物理交互、FLiquidSimulation
  • 车辆物理:UWheeledVehicleComponent、FVehicleWheel、车辆参数定制

3. 碰撞进阶

  • 射线检测:GetWorld ()->LineTraceSingleByChannel ()
  • 球形 / 盒体检测:SphereTrace ()、BoxTrace ()
  • 碰撞检测:
    • 批量检测:LineTraceMulti ()、SphereTraceMulti ()、OverlapMulti ()
    • 检测参数:FCollisionQueryParams(忽略自身、忽略标签)、FCollisionResponseParams
  • 碰撞通道:自定义 ECC(碰撞通道)、ECollisionChannel 枚举扩展
  • 物理力的施加:AddForce ()、AddImpulse ()、AddTorque ()
  • 碰撞响应:SetCollisionResponseToChannel ()、SetCollisionEnabled ()(QueryOnly/PhysicsOnly/All)
  • 碰撞通知:
    重叠事件(Overlap)与碰撞事件(Hit)OnComponentHit/OnComponentOverlap 绑定;
    忽略特定 Actor 碰撞;

虚幻引擎-检测射线TraceChannel与形状检测射线

虚幻引擎的BoxComponent组件实现触发器/碰撞箱

八、动画系统(C++ 全控制)

1. 基础动画控制

  • USkeletalMeshComponent:
    • 动画实例:UAnimInstance、CreateAnimInstance ()、GetAnimInstance ()
    • 动画蒙太奇:UAnimMontage、PlayAnimMontage ()、StopAnimMontage ()、Montage_JumpToSection ()
    • 动画通知:UAnimNotify、UAnimNotifyState、绑定 Notify 回调(OnNotifyBegin/End)

2. 进阶动画系统

  • 动画蓝图(AnimGraph)C++ 交互:
    • 自定义动画节点:UAnimGraphNode_Base、FAnimNode_Custom
    • 动画变量:SetAnimInstanceVariable ()、GetAnimInstanceVariable ()
  • 骨骼与 IK:
    • 正向运动学(FK)/ 反向运动学(IK):IK_Root/IK_Hand/IK_Foot
    • 自定义 IK:FKinematicController、IK Solver(FABRIK/CCD)
  • 动画状态机:
    • 状态机控制:UAnimStateMachine、SetCurrentState ()
    • 混合空间:UBlendSpace、UBlendSpace1D/2D、SetBlendSpaceInput ()
  • 布料与动画:ClothAnimationData、动画驱动布料模拟

虚幻引擎_动画蓝图/混合空间/状态机_超详细教学https://blog.csdn.net/Howrun777/article/details/156781213?spm=1011.2415.3001.5331

九、渲染系统(C++ 交互)

1. 基础渲染控制

  • 材质系统:
    • 材质实例:UMaterialInstanceDynamic(MID)、CreateDynamicMaterialInstance ()
    • 材质参数:SetScalarParameterValue ()、SetVectorParameterValue ()、SetTextureParameterValue ()
  • 静态 / 骨骼网格:
    • LOD 控制:SetForceLOD ()、GetNumLODs ()、LODTransitionTime
    • 实例化网格:UInstancedStaticMeshComponent、AddInstance ()/RemoveInstance ()
  • 光照:
    • 光源组件:ULightComponent、SetIntensity ()、SetLightColor ()、SetAttenuationRadius ()
    • 光照烘焙:LightmassSettings、bCastStaticShadow/bCastDynamicShadow

2. 进阶渲染

  • 渲染管线:
    • UE5 Nanite(虚拟几何体):C++ 控制 Nanite 启用 / 禁用、LOD 距离
    • UE5 Lumen(全局光照):LumenSettings、C++ 控制光线追踪开关
    • 自定义渲染通道:FRDGBuilder、AddPass ()、渲染线程提交
  • 后处理:
    • 后处理体积:UPostProcessComponent、SetPostProcessSettings ()
    • 自定义后处理:FPostProcessMaterial、RegisterPostProcessMaterial ()
  • Niagara 特效:
    • C++ 控制 Niagara:UNiagaraComponent、SetVariableFloat ()、SpawnEffectAtLocation ()
    • 自定义 Niagara 模块:UNiagaraScriptModule、Niagara 数据接口
  • 渲染调试:
    • DrawDebug 系列:DrawDebugBox ()、DrawDebugText ()、DrawDebugCamera ()
    • 渲染统计:Stat Rendering、Stat RHI、GPU Profiler

十、音频系统(C++ 控制)

1. 基础音频控制

  • USoundCue/USoundWave:
    • 播放:UGameplayStatics::PlaySoundAtLocation ()、UAudioComponent::Play ()
    • 暂停 / 停止:Pause ()、Stop ()、SetPaused ()
  • UAudioComponent:
    • 音频参数:SetVolumeMultiplier ()、SetPitchMultiplier ()、SetAttenuationSettings ()
    • 3D 音频:SetSpatializationEnabled ()、SetDistanceAttenuation ()

2. 进阶音频

  • 音频分类与混音:
    • USoundClass:SetVolume ()、SetPitch ()、音频优先级
    • USoundMix:ApplySoundMix ()、FadeSoundMix ()、音频总线(USoundBus)
  • 音频通知:OnAudioFinished ()、OnAudioPlaybackPercent ()
  • 空间音频:HRTF(头部相关传输函数)、音频遮挡、混响(USoundReverb)
  • 音频性能:音频池大小、流媒体音频、LOD 音频

十一、UI 系统(UMG/Slate)

1. UMG(Unreal Motion Graphics)

  • UWidgetBlueprint/C++ 交互:
    • 创建 Widget:CreateWidget<UUserWidget>()、AddToViewport()
    • Widget 交互:BindToAnimationFinished ()、SetVisibility ()
    • 控件控制:UButton(OnClicked 委托)、UTextBlock(SetText ())、UImage(SetBrushFromTexture ())
  • 布局系统:UCanvasPanel、UHorizontalBox、UVerticalBox、锚点(Anchors)、偏移(Offset)
  • 输入焦点:SetKeyboardFocus ()、SetMouseFocus ()、UI 输入模式(EMouseLockMode)

2. Slate(底层 UI 框架)

  • Slate 核心:SWidget、SCompoundWidget、SLATE_BEGIN_ARGS/SLATE_END_ARGS
  • 自定义 Slate 控件:OnPaint ()、OnMouseButtonDown ()、OnKeyDown ()
  • Slate 与 UMG 交互:UWidget::GetSlateWidget ()、SlateWidgetHost
  • 编辑器 Slate:自定义编辑器面板、细节面板(DetailsView)

虚幻引擎_UI搭建流程https://blog.csdn.net/Howrun777/article/details/157017568?spm=1011.2415.3001.5331虚幻引擎_用户小控件_准星-CSDN博客https://blog.csdn.net/Howrun777/article/details/156863517?spm=1011.2415.3001.5331

十二、AI 系统

1. AI 核心类

  • AAIController:AI 控制器,替代 PlayerController
  • UBehaviorTree:行为树,C++ 中加载与启动(RunBehaviorTree ())
  • UBlackboardComponent:黑板,C++ 中设置 / 获取黑板值(SetValueAsObject ()、GetValueAsVector ())

2. AI 行为定制

  • 行为树任务(BTTask):继承 UBTTaskNode,重写 ExecuteTask ()
  • 行为树服务(BTService):继承 UBTService,重写 TickNode ()
  • 行为树装饰器(BTDecorator):继承 UBTDecorator,重写 CalculateRawConditionValue ()
  • 环境查询系统(EQS):C++ 中创建 EQS 查询,获取目标点

3. 导航系统

  • 导航网格(NavMesh):
    • 烘焙:UNavigationSystemV1::Build ()、NavMeshBoundsVolume
    • 导航代理:UNavigationAgentComponent、SetCanNavigate ()
    • 自定义导航:NavLinkProxy、NavMeshModifier(修改导航区域)

4. 行为树(Behavior Tree)

  • 自定义 BT 节点:
    • BTTask:UBTTaskNode、ExecuteTask()、AbortTask()
    • BTService:UBTServiceNode、TickNode()
    • BTDecorator:UBTDecoratorNode、CalculateRawConditionValue()
  • 黑板(Blackboard):
    • UBlackboardComponent、SetValueAsObject()/GetValueAsVector()
    • 黑板键类型:BlackboardKeyType_Object、BlackboardKeyType_Vector
    • 黑板共享:BlackboardData、黑板变量同步

5. 环境查询(EQS)

  • 自定义 EQS 查询:UEQSQuery、RunQuery ()
  • EQS 上下文:FEQSContext、GetContextLocation ()
  • EQS 测试:UEQSTest、RunTest ()、评分规则

6. AI 感知

  • UAIPerceptionComponent:
    • 感知类型:视觉(Sight)、听觉(Hearing)、触觉(Touch)
    • 感知配置:UAISenseConfig_Sight、SetSightRange ()、SetLoseSightRadius ()
    • 感知回调:OnPerceptionUpdated ()、GetPerceivedActors ()

十三、网络与多人游戏(进阶核心)

1. 网络基础

  • 服务器 / 客户端 / 单机:NetMode(NM_Standalone/NM_Client/NM_Server)
  • 权威(Authority):只有服务器拥有权威,客户端仅做表现
  • 网络模式:NM_Standalone/NM_Client/NM_Server/NM_DedicatedServer
  • 网络权威:HasAuthority ()、IsNetMode ()、OnlyOwnerSee ()
  • 网络变量:ReplicationGraph(复制图,UE5 优化)、ReplicaManager

2. 网络同步核心

  • 复制(Replication):UPROPERTY (Replicated) 标记需要同步的属性
  • 复制条件:ReplicatedUsing(属性变化时触发回调)、NetCondition(如 COND_OwnerOnly)
  • 网络函数:UFUNCTION (Server, Reliable)(服务器执行,可靠)、UFUNCTION (Client, Unreliable)(客户端执行,不可靠)
  • 角色同步:APlayerState、AGameState 的复制规则

3. 复制进阶

  • 属性复制:
    • 复制条件:COND_OwnerOnly、COND_SimulatedOnly、COND_ServerOnly
    • 增量复制:NetDeltaSerialize、FNetDeltaSerializeInfo
  • RPC(远程过程调用):
    • RPC 优化:Unreliable RPC(非可靠)、RPC 批量发送
    • RPC 限制:MaxRPCSize、RPC 调用频率控制
    • 自定义 RPC:ProcessRemoteFunction ()
  • 网络休眠:SetNetDormancy ()、DORM_Initial/DORM_Client/DORM_Awake
  • 网络同步:
    • 角色同步:CharacterMovement 复制、RootMotion 复制
    • 动画同步:AnimMontage 复制、AnimInstance 变量复制

4. 多人游戏框架

  • 在线子系统(Online Subsystem):
    • 核心类:IOnlineSubsystem、IOnlineSession、IOnlineFriends
    • 会话管理:CreateSession ()、FindSessions ()、JoinSession ()
    • Steam/Epic 在线服务:OnlineSubsystemSteam、OnlineSubsystemEOS 集成
  • 反作弊基础:Easy Anti-Cheat(EAC)集成、自定义反作弊检测
  • 网络调试:Stat Net、NetShowDebug、NetSpeedTest、PacketLogger

十四、资源管理与序列化

1. 资源加载

  • 软引用(TSoftObjectPtr、TSoftClassPtr):避免资源预加载,减少内存占用
  • 同步加载:LoadObject<>()、LoadClass<>()
  • 异步加载:FStreamableManager 异步加载资源,避免卡顿
  • 资源类型:UAsset、UStaticMesh、UTexture2D、USoundWave 等
  • 加载方式:
    • 同步加载:LoadObject<>()、LoadClass<>()
    • 异步加载:FStreamableManager、LoadAsync ()、HandleAsyncLoad ()
    • 软引用:TSoftObjectPtr、TSoftClassPtr、ResolveObject ()
  • 资源注册表:FAssetRegistryModule、GetAssetRegistry ()、ScanPathsForAssets ()
  • 资源缓存:AssetManager、PrimaryAssetType、PrimaryAssetId、预加载组

2. 序列化进阶

  • SaveGame**(存档)系统** :
    • 自定义 SaveGame 类:USaveGame、SaveGameToSlot ()/LoadGameFromSlot ()
    • 加密存档:FAES 加密、自定义压缩(Zlib)
    • 存档版本:SaveGameVersion、兼容旧存档
  • 配置文件:
    • INI 配置:GConfig->GetInt ()/SetString ()、ConfigFile 路径定制
    • 自定义配置:UConfigurableObject、ConfigCacheIni

3. 数据资产

  • 自定义数据资产:UDataAsset 子类、蓝图配置数据、C++ 读取
  • 数据表(DataTable):
    • FDataTableRowHandle、GetRow<>()、FindRow<>()
    • 数据表导入 / 导出:CSV/JSON 格式、自定义解析器

十五、编辑器扩展(C++ 定制)

1. 编辑器面板

  • 自定义编辑器窗口:SWindow、SDockTab、FEditorModule
  • 细节面板定制:IPropertyTypeCustomization、FDetailCustomizationManager
  • 工具栏定制:FExtender、FLevelEditorModule、AddToolBarButton ()

2. 编辑器工具

  • 自定义编辑器模式:FEdMode、FEditorModeRegistry
  • 自定义 Actor 工厂:UActorFactory、FActorFactoryModule
  • 编辑器蓝图:Editor Utility Widget、Editor Utility Blueprint

3. 编辑器自动化

  • 编辑器脚本:C++ 编写 Editor Utility Command
  • 批量处理:批量重命名资源、批量修改 Actor 属性
  • 编辑器事件:FEditorDelegates、OnMapLoaded、OnAssetSaved

十六、跨平台开发(全平台适配)

1. 平台配置

  • 目标平台:Windows/Android/iOS/PS5/Xbox/Switch/Linux/Mac
  • 平台编译:Platform-specific 代码(#if PLATFORM_ANDROID 等)
  • 平台配置:DefaultPlatform.ini、Platform-specific Settings

2. 平台适配

  • 输入适配:手柄 / 触控 / 键鼠 / VR 控制器的平台差异
  • 性能适配:不同平台的 CPU/GPU 性能调优、分辨率适配
  • 权限适配:Android/iOS 权限(存储 / 相机 / 麦克风)、C++ 申请权限
  • 平台 API:调用平台原生 API(Android JNI、iOS Objective-C++)

3. 跨平台测试

  • 远程调试:Android/iOS 远程调试、PS5/Xbox 开发机调试
  • 平台兼容性:资源格式兼容(纹理 / 音频)、代码兼容

十七、内存与性能优化(深度)

代码层面优化

  • 避免 Tick () 空循环:SetActorTickEnabled (false) 关闭不必要的 Tick
  • 容器遍历优化:使用 Range-based for 或迭代器,避免频繁拷贝
  • 垃圾回收优化:合理使用 UPROPERTY (),避免内存泄漏

引擎层面优化

  • 绘制距离(Draw Distance)、LOD(细节层次)配置
  • 异步加载与流关卡(Stream Level)
  • 性能分析工具:Stat Unit、Stat GPU、Unreal Insights 定位性能瓶颈

1. 内存优化

  • 内存检测:Unreal Insights Memory Tracker、GMemory->GetTotalPhysicalMemory ()
  • 内存泄漏:排查 UPROPERTY () 遗漏、AddToRoot () 未释放、资源引用泄漏
  • 内存池:自定义内存池(FMallocPool)、UE 内置内存池
  • 资源优化:纹理压缩、网格简化、LOD 优化、资源流送

2. CPU 优化

  • 线程管理:
    • 主线程 / 游戏线程 / 渲染线程分离
    • 自定义线程:FRunnable、FRunnableThread、FQueuedThreadPool
    • 线程安全:FCriticalSection、FMutex、FEvent、TThreadSafeBool
  • Tick 优化:
    • 关闭不必要的 Tick:SetActorTickEnabled (false)、SetComponentTickEnabled (false)
    • Tick 分组:ETickingGroup、TG_PrePhysics/TG_PostPhysics
  • 代码优化:
    • 避免频繁拷贝:使用 const&、移动语义(std::move)
    • 容器优化:TArray 预留容量(Reserve ())、避免频繁 Add/Remove
    • 虚函数优化:减少虚函数层级、使用 CRTP 模式

3. GPU 优化

  • 渲染优化:
    • 绘制调用(Draw Call)优化:实例化渲染、批处理
    • 纹理优化:MipMap、纹理压缩格式(ETC2/ASTC/PVRTC)
    • 着色器优化:简化 Shader、Shader 变体控制
  • 后处理优化:关闭不必要的后处理、降低后处理分辨率
  • GPU 调试:RenderDoc、UE5 Render Graph Debugger

4. 性能分析工具

  • Unreal Insights:CPU/GPU/ 内存 / 网络 / 动画分析
  • Stat 命令:Stat Unit、Stat FPS、Stat GPU、Stat Net、Stat Animation
  • 平台工具:Android Profiler、iOS Instruments、PS5/Xbox 性能工具

十八、调试与测试(全维度)

日志调试

  • UE_LOG () 自定义分类:DECLARE_LOG_CATEGORY_EXTERN (LogMyGame, Log, All)
  • 控制台变量(CVar):FCVarDelegate 绑定调试变量,运行时调整参数

可视化调试

  • DrawDebugLine ()、DrawDebugSphere () 绘制调试图形
  • 控制台命令:ToggleDebugHUD、ShowCollision 等

单元测试

  • 虚幻自动化测试框架(Automated Testing):创建测试类,验证核心逻辑

1. 调试进阶

  • 日志系统:
    • 自定义日志分类:DECLARE_LOG_CATEGORY_EXTERN、UE_LOG () 分级(Log/Warning/Error/Fatal)
    • 日志输出:输出到文件、控制台、远程日志(Logcat/Console)
    • 控制台变量:FCVarDelegate、FAutoConsoleVariableRef、运行时调整参数
  • 断点调试:
    • 条件断点:基于变量值的断点
    • 多线程调试:游戏线程 / 渲染线程断点、线程切换
    • 远程调试:Android/iOS/ 主机远程断点
  • 可视化调试:
    • 调试绘制:DrawDebug 系列函数、自定义调试几何体
    • 编辑器调试:Debug Draw Mode、Collision Debug、Animation Debug

2. 测试体系

  • 自动化测试:
    • 单元测试:UTestSuite、UTestCase、IMPLEMENT_SIMPLE_AUTOMATION_TEST
    • 功能测试:UGameplayTestBase、自动化关卡测试
    • 性能测试:Automated Performance Test、基准测试
  • 崩溃分析:
    • 崩溃日志:Minidump、CallStack、GEngine->AddOnScreenDebugMessage ()
    • 崩溃捕获:Windows WER、Android Breakpad、iOS CrashReporter
  • 回归测试:版本对比测试、资源回归测试、代码回归测试

十九、本地化与合规

1. 本地化

  • 文本本地化:FText、NSLOCTEXT ()、LocRes 文件、多语言导入 / 导出
  • 资源本地化:纹理 / 音频 / 视频的多语言版本、本地化资源加载
  • 区域适配:日期 / 时间 / 货币格式、区域设置(Locale)

2. 合规

  • 平台合规:PS5/Xbox/Switch 的 TRC/XRD 合规、Android/iOS 商店合规
  • 隐私合规:GDPR/CCPA、隐私政策弹窗、数据收集合规
  • 内容评级:ESRB/PEGI/GRAC 评级、内容适配

二十、发布与运维

打包配置

  • Project Settings 中配置打包平台(Windows/Android/iOS)
  • 打包脚本:通过 UBT 命令行打包(RunUAT.bat BuildCookRun)

依赖处理

  • 第三方库打包:确保库文件包含在打包目录
  • 资源压缩与加密(可选)

1. 打包进阶

  • 打包配置:
    • 打包脚本:RunUAT.bat BuildCookRun(命令行打包)
    • 打包模式:Development/Shipping/Test、Debug 符号
    • 资源烘焙:Cooker、Cook on the fly、增量 Cook
  • 打包优化:
    • 资源压缩:Pak 文件压缩、加密 Pak 文件
    • 分卷打包:大型游戏分卷、增量更新包
  • 平台打包:
    • Windows:EXE 打包、VC++ 运行时依赖
    • Android:APK/AAB 打包、签名、Google Play 适配
    • iOS:IPA 打包、签名、App Store 适配

2. 运维

  • 热更新:
    • 资源热更:Pak 文件热更、AssetManager 加载热更资源
    • 代码热更:UE5 Hot Reload、蓝图热更、C++ 热更(有限支持)
  • 崩溃监控:第三方崩溃监控(Bugly/Crashlytics)、自定义崩溃上报
  • 数据分析:集成 Analytics(Google Analytics/Firebase)、自定义事件上报
  • 版本管理:版本号管理、更新日志、强制更新 / 可选更新

二十一、高级专题(前沿技术)

1. Shader 与 C++ 交互

  • 自定义 Shader:HLSL/GLSL 编写 Shader、C++ 加载 Shader
  • Shader 参数:C++ 设置 Shader 全局参数、材质参数
  • 计算着色器:Compute Shader、DispatchCompute ()、GPU 并行计算

2. 数据驱动开发

  • 配置表驱动:Excel/CSV 转 DataTable、C++ 读取配置
  • 行为树驱动:黑板数据驱动 AI 行为、配置表控制 AI 参数
  • 数值驱动:数值策划配置表、C++ 读取数值、热更数值

3. 新兴技术集成

  • VR/AR 适配:OpenXR 集成、VR 控制器输入、AR 追踪(ARKit/ARCore)
  • 机器学习:UE5 ML Deformer、TensorFlow/PyTorch 集成、AI 生成内容(AIGC)
  • 区块链 / 元宇宙:NFT 集成、链上数据交互、元宇宙场景同步
  • 云游戏:云游戏适配、低延迟渲染、串流优化

二十二、最佳实践与规范

1. 代码规范

  • 命名规范:类(A/U 前缀)、函数(PascalCase)、变量(camelCase)、宏(UPPER_CASE)
  • 注释规范:函数注释(参数 / 返回值 / 用途)、类注释、复杂逻辑注释
  • 代码风格:缩进、空格、大括号位置、避免超长函数 / 类

2. 工程管理

  • 工程结构:Source/Content/Plugins 目录规范、资源命名规范
  • 依赖管理:第三方库版本管理、模块依赖最小化
  • 编译优化:增量编译、Unity Build、预编译头(PCH)

3. 协作流程

  • 代码审查:Code Review 流程、审查要点(性能 / 安全 / 规范)
  • 版本控制:Git 分支策略(Feature/Release/Hotfix)、提交规范
  • 文档管理:API 文档、设计文档、变更日志
相关推荐
m0_561359672 小时前
嵌入式C++调试技术
开发语言·c++·算法
Yang-Never2 小时前
Open GL ES -> 应用前后台、Recent切换,SurfaceView纹理贴图闪烁问题分析解决
android·开发语言·kotlin·android studio·贴图
2301_763472462 小时前
C++中的享元模式高级应用
开发语言·c++·算法
不会代码的小测试2 小时前
UI自动化-针对验证码登录的系统,通过首次手动登录存储cookie的方式后续访问免登录方法
开发语言·python·selenium
weixin_458923202 小时前
分布式日志系统实现
开发语言·c++·算法
爱装代码的小瓶子2 小时前
【C++与Linux】文件篇(2)- 文件操作的系统接口详解
linux·c++
开发者小天2 小时前
python中calss的用法
开发语言·python
拾光Ծ2 小时前
【优选算法】双指针算法:专题二
c++·算法·双指针·双指针算法·c++算法·笔试面试
沉默-_-2 小时前
MyBatis 学习笔记
java·开发语言·tomcat