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

【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.lryc.cn/news/582864.html

相关文章:

  • 智能推荐社交分享小程序(websocket即时通讯、协同过滤算法、时间衰减因子模型、热度得分算法)
  • Tomcat与IIS:核心差异及接口调用实战解析
  • Spring中过滤器和拦截器的区别及具体实现
  • 26.安卓逆向2-frida hook技术-解密响应
  • LoRaWAN 有几种入网方式?
  • DMA技术与音频数据的存储和播放
  • LLM视觉领域存在模型视觉识别不准确、细粒度视觉任务能力不足等科学问题
  • (四)机器学习小白入门YOLOv :图片标注实操手册
  • C#中封装halcon函数的报错
  • 用基础模型构建应用(第七章)AI Engineering: Building Applications with Foundation Models学习笔记
  • Google AI 刚刚开源 MCP 数据库工具箱,让 AI 代理安全高效地查询数据库
  • 推荐系统中的相似度
  • JAVAEE 代理
  • 短视频电商APP源码开发技术栈解析:音视频、商品链路与互动设计
  • 怪物机制分析(有限状态机、编辑器可视化、巡逻机制)
  • DCL学习
  • SpringAI学习笔记-MCP客户端简单示例
  • C#Halcon从零开发_Day18_OCR识别
  • SpringAI系列 - 基于Spring AI 1.0.0 的AI助手实现示例
  • 图像梯度处理与边缘检测:OpenCV 实战指南
  • Apache Atlas编译打包,可运行包下载地址
  • VM上创建虚拟机以及安装RHEL9操作系统并ssh远程连接
  • 7月8日星期二今日早报简报微语报早读
  • XSLT注入与安全修复方法
  • 人工智能与人工智障———仙盟创梦IDE
  • 【Note】《Kafka: The Definitive Guide》第11章:Stream Processing
  • 【Bluedroid】BLE 地址解析列表的初始化与清除机制(btm_ble_resolving_list_init)
  • MySQL 8.0 OCP 1Z0-908 题目解析(23)
  • Kafka消息倾斜
  • 编码器(Encoder)和解码器(Decoder)