实战案例:
这是一份极致全面、覆盖 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 专属数据类型
- 字符串类型:FString(可修改、格式化)、FName(不可修改、哈希优化)、FText(本地化)及相互转换
- 数值类型:FVector(三维向量)、FRotator(旋转)、FQuat(四元数)、FTransform(变换)、FColor/FLinearColor(颜色)
- 容器类型:TArray(动态数组,替代 std::vector)、TMap(键值对,替代 std::map)、TSet(集合)、TQueue(队列),及容器的线程安全使用
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
虚幻引擎的标签系统Tags
https://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 ()
虚幻引擎_控制角色移动的三种方法
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++ 联合调试,断点跨语言跳转
六、输入系统(全平台适配)
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 控制器
七、物理与碰撞(进阶特性)
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 碰撞;
八、动画系统(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、动画驱动布料模拟
九、渲染系统(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 文档、设计文档、变更日志