当前位置: 首页 > java >正文

【UE5】虚幻引擎的运行逻辑

UE5的运行逻辑可以分为引擎启动流程游戏运行流程两个部分。

引擎启动流程

一、平台入口&引擎主流程初始化

1、系统入口

不同的平台会有不同的入口。在Windows平台,入口是Launch模块下的\Engine\Source\Runtime\Launch\Private\Windows\LaunchWindows.cpp文件中的WinMain()函数。

2、FEngineLoop初始化

FEngineLoop是整个引擎运行控制器,生命周期管理器。

FEngineLoop::PreInit()

作用:用于早期设置,引擎模块初始化。

  • 解析命令行
  • 加载config文件(DefaultEngine.ini等)
  • 初始化日志系统(GLog)
  • 创建GIsEditor或GIsGameAgnosticExe标志
  • 加载平台相关信息(平台模块)
FEngineLoop::Init()

作用:用于引擎的主要子系统初始化。

  • 加载各个模块(ModuleManager)
  • 创建并初始化UGameEngine或UEditorEngine
  • 初始化RHI(渲染硬件接口)和Rendering System
  • 加载默认地图或启动器地图
  • 创建GameInstance,启动游戏或进入编辑器

二、模块加载系统:FModuleManager

UE使用FMoudleManager统一控制管理动态模块加载,常见模块有:

  • Core
  • CoreUObject
  • Engine
  • InputCore
  • RenderCore
  • RHI
  • Renderer
  • Slate
  • UMG
  • MyGameModule(用户创建的项目模块)
FModuleManager::Get().LoadModuleChecked<ISlateRHIRendererModule>("SlateRHIRenderer");
FModuleManager::Get().LoadModule(TEXT("Renderer"));

三、创建&初始化UGameEngine

在游戏模式下,会构造UGameEngine,并调用其Init():

//\Engine\Source\Runtime\Launch\PrivateLaunchEngineLoop.cppGEngine = NewObject<UEngine>(GetTransientPackage(), EngineClass);
check(GEngine);GEngine->ParseCommandline();UE_LOG(LogInit, Log, TEXT("Initializing Game Engine..."));
GEngine->Init(this);
UE_LOG(LogInit, Log, TEXT("Initializing Game Engine Completed"));

内部做了:

  • 加载GameViewportClient
  • 创建UWorld,并加载初始地图
  • 初始化Audio、Physics、Navigation、Streaming、Scene、AI、Input等子系统。

四、世界和地图加载:UWorld创建

UEngine::LoadMap()中会:

  • 创建UWorld(每个地图一个世界)
  • 创建GameModeBase,GameState,PlayerController
  • 加载Level、Actors、components等内容
  • 初始化Navigation、Lightmaps、Landscape、AI、Streaming等系统

五、初始化关键对象

  • UGameInstance:游戏生命周期管理器(全局)
  • AGameModeBase:地图规则控制器(服务器端)
  • AGameStateBase:同步游戏状态(客户端可见)
  • APlayerController:玩家输入管理器
  • APawn/ACharacter:玩家可操控角色

六、Editor与Game的分支流程

类型对应Engine类初始化地图特殊流程
编辑器运行UEditorEngine启动编辑器地图创建FEditorViewportClient,运行SlateEditor
游戏运行UGameEngine加载默认地图创建GameInstance,运行主循环

七、Tick启动,进入主循环

FEngineLoop::Tick();

启动主循环,每帧调用:

  • 输入处理
  • Tick世界(UWorld)
  • AI、动画、物理等更新
  • 提交渲染数据,开启RenderThread
  • Slate/UMG UI更新

游戏运行流程

未完待续

http://www.xdnf.cn/news/14925.html

相关文章:

  • 【数据结构】二叉树
  • 广度优先与深度优先遍历核心逻辑理解及实践
  • qt-C++笔记之setCentralWidget的使用
  • IoTDB:专为物联网场景设计的高性能时序数据库
  • EfficientVMamba: Atrous Selective Scan for Light Weight Visual Mamba论文精读(逐段解析)
  • 跨境ERP系统
  • Java常用加密算法详解与实战代码 - 附可直接运行的测试示例
  • Swift 解 LeetCode 321:拼接两个数组中的最大数,贪心 + 合并全解析
  • 【适合 Java 工程师的 AI 转型方向】
  • 17-C#的socket通信TCP-1
  • 【论文阅读】CogVideoX: Text-to-Video Diffusion Models with An Expert Transformer
  • 2. 两数相加
  • 恒创科技:香港站群服务器做seo站群优化效果如何
  • maven 发布到中央仓库之持续集成-03
  • 解决GitHub仓库推送子文件夹后打不开的问题
  • SpringBoot项目的创建
  • 【ZYNQ Linux开发】BRAM的几种驱动方式
  • 使用协程简化异步资源获取操作
  • 【c++八股文】Day4:右值,右值引用,移动语义
  • 【时时三省】(C语言基础)指针变量作为函数参数
  • Oracle 存储过程、函数与触发器
  • 【牛客刷题】相遇
  • 暑假读书笔记第四天
  • 关于 scrapy框架 详解
  • 二分查找篇——搜索插入位置【LeetCode】三种写法,python2/python3
  • (电机03)分享FOC控制中SVPWM的输出关联硬件
  • 【AI智能体】智能音视频-硬件设备基于 WebSocket 实现语音交互
  • 【计算机组成原理】-CPU章节学习篇—笔记随笔
  • study_WebView介绍
  • JVM 基础 - 类字节码详解