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

UE引擎初始化流程

UE引擎初始化流程:从Main到BeginPlay

前言

文章只作为学习用,有错各位大佬可以指出来,不探讨设计理念,只为了看清楚UE初始化的过程,为以后理解游戏中类的载入时机和Bug调试打基础。文章不仅取自于视频,还借助过Ai,所以对其中细节的函数作用并不确定,但我不打算现在就深入到细节里去,之后有需要才去深入细节,所以这篇文章只供我自己学习复习,不断修改。

参考视频:https://www.bilibili.com/video/BV1NA411L7x4/?spm_id_from=333.1007.top_right_bar_window_history.content.click&vd_source=d0bb3eb630952bd6c4013630f19fc966

总流程大致可以看做:

GuardedMain

FEngineLoop::PreInit(加载模块)

FEngineLoop::Init()

Tick 循环

Exit

2.各入口和其作用

GuardedMain(\Engine\Source\Runtime\Launch\Private\Lunch.cpp

进程的真正入口,包一层异常/崩溃处理,内部创建 FEngineLoop 并驱动 PreInit/Init/Tick/Exit

/*** Static guarded main function. Rolled into own function so we can have error handling for debug/ release builds depending* on whether a debugger is attached or not.*/
int32 GuardedMain( const TCHAR* CmdLine )

2.1 初始化

2.1.1 FEngineLoop::PreInit

FEngineLoop::PreInit:初始化之前还要加载模块。(大部分的模块包括插件模块都会在此时加载)

模块的加载的大致顺序后面我再说。

作用:加载引擎大部分模块、按 LoadingPhase 加载项目/插件

2.1.2 Init

1.内部发生的事情,首先就是

查找配置文件以什么方向创建了一个GEngine的对象实例,比如UEngine的子类有UEditorEngineUGameEngine。其后对其进行了初始化。

运行方式有两种:

​ 1.以游戏编辑器方式运行,就是我们在UE编辑器运行游戏所呈现的样子

​ 2.以游戏打包后的.exe方式运行

2.接下来会加载在PostEngineInit设置在Init时加载模块的项目模块

3.引擎启动

UEngine类:

  1. init()在底层模块(渲染、物理、音频等)就绪后执行,主要做:

    1. 创建 GameInstance
      按项目配置(如 GameInstanceClass)创建 UGameInstance,作为项目级逻辑的入口(存档、联机会话、全局状态等)。
    2. 创建 GameViewportClient
      连接游戏窗口与渲染管线,处理输入、分辨率、全屏等视口相关逻辑。
    3. 创建 LocalPlayer
      本地玩家控制器,关联 PlayerController、输入映射等。
    4. 初始化 Standalone 模式
      调用 UGameInstance::InitializeStandalone(),在其中创建第一个 UWorld

    从 UE 4.4 起,很多原本写在 UGameEngine 里的项目逻辑被拆到 UGameInstance 和各类 Subsystem,引擎类更偏「基础设施调度」。

  2. Start

    1. Start() 会调用 UGameInstance::StartGameInstance(),进而:

      • 读取默认地图(如 /Game/Maps/MainMenu
      • 调用 UEngine::LoadMap() / Browse() 加载关卡
      • 触发 World 初始化、Actor 生成、BeginPlay

      加载地图是 UEngine(含 UGameEngine)的核心能力之一,包括:

      • Browse():切换到新 URL/地图

      • LoadMap():异步/同步加载关卡资源(这其中也很复杂,包括创建GameModeBase,对组件初始化等)

        • LoadMap 的参数本质是 FURL,描述要加载的目标:MapName?Game=MyGameMode?Listen?Name=Player1│        │                │         │地图包名  指定 GameMode    监听端口   玩家名
          常见字段:Map:如 /Game/Maps/Dungeon(不带 .umap)
          Game:覆盖默认 GameMode 类
          Option:自定义参数字符串,可在 InitGame() 里读
          Browse 会先解析、校验 URL,再交给 LoadMap。
          
        • 通知与清理

          • 广播 FCoreDelegates::PreLoadMap 等(UI loading 屏常挂在这里)
          • 断开/清理旧 UWorld:销毁 Actor、释放 Level、清 NetDriver 绑定等
          • 非 Seamless 时:旧图所有 Actor 都会销毁(除非之前做了 Seamless 持久化标记)

          加载地图资源

          • 通过 FSoftObjectPath / 包名加载 .umap 对应 Package
          • 同步或异步(取决于调用路径和配置)
          • 可显示 Loading Movie(bStartedLoadMapMovie 就是干这个的)

          建立新 UWorld

          • 从加载的 Level 得到 UWorld
          • 写入 FWorldContext(当前上下文)
          • 设置全局 GWorld(注意:多 World / PIE 时 Context 更重要)
          • UGameInstance 关联到新 World

          初始化关卡与 GameMode

          • 初始化 Persistent Level 里的 Actor(Editor 下可能重跑 Construction Script)
          • Spawn AGameMode(只在 Server / Standalone 存在)
          • 调用 AGameMode::InitGame(),解析 URL 里的 Option
          • UWorld::InitializeActorsForPlay():注册组件、准备运行

          BeginPlay 与玩家

          • 对新 World 里符合条件的 Actor 调用 BeginPlay
          • 为每个 ULocalPlayer 临时 Spawn APlayerController(联机客户端之后可能被服务器下发的替换)

          到这里,新地图才算「可玩」

      • 管理 FWorldContext(当前 World、PIE 实例等上下文)

2.2 Tick()

编辑器或游戏跑起来后,引擎会不停循环。

步骤 内容
处理输入 键盘、鼠标
更新世界 UWorld::Tick、Actor、Component
物理 Chaos / PhysX
动画 AnimInstance
渲染 提交画面
音频 更新声音
http://www.rkmt.cn/news/1463229.html

相关文章:

  • 新手福音:借助快马AI代码生成,零基础轻松完成第一个Python数据分析项目
  • 2026最新!亲测3款免费实用神器,轻松搞定网页视频提取算完AI款综合得分真香!
  • PDF补丁丁深度探索:揭秘开源PDF工具箱的无限可能与实战应用
  • 2026年SCI英文润色机构横向测评:五强机构实测与选型避坑全攻略 - 西骏传媒
  • 保姆级教程:从零开始用GitHub Actions云编译你的专属OpenWrt固件(含feeds配置避坑)
  • 新手福音:在快马平台跟着吴恩达claude code手册敲出第一个AI程序
  • Voicebox开源:本地克隆声音,给Claude Code配音,支持情绪标签
  • DDD-017:六边形架构(Hexagonal Architecture)
  • 2026年北京钢铁租赁行业现状与专业选型分析 - 品牌企业推荐师(官方)
  • 别再死记硬背了!用Python和NumPy从零理解张量:从标量到视频数据的直观建模
  • GPT-3.5微调实战指南:企业专属ChatGPT构建方法
  • 提升openwfd开发效率:用快马平台智能生成高性能编码与传输模块
  • 想做硬件工程师?高考志愿填报与职业全攻略:芯片·嵌入式·板级硬件深度解析
  • 告别网盘限速烦恼:这款免费工具让你下载速度飙升500%
  • 2026年PDF全能转换指南:保留过渡效果与超链接,5款工具实测对比 - 时时资讯
  • 8分钟预测千只股票:Kronos AI如何用基础模型重塑你的投资决策?
  • Qbot量化交易框架:本地化AI投研平台架构深度解析与实战部署
  • 为什么选择BigVGAN-v2_22khz_80band_256x?揭秘其在多语言语音与环境音效生成中的优势
  • 2026年北京农村自建房用什么瓦好?不锈钢瓦/铝镁锰瓦/彩石金属瓦深度测评:金宸伯领先 - 企业深度横评dyy6420
  • MiniCPM-V-4-GPTQ安全与优化:确保模型稳定运行的10个最佳实践
  • 3步掌握PDF全能工具箱,轻松处理各类文档难题
  • 安卓本地仓库管理App源码:三类用户权限区分+SQLite数据存储+全界面流程实现
  • 如何彻底修复DWPose姿态估计器报错:3种实用解决方案
  • 11万英语发音宝库:打造你的专属离线发音助手
  • 2026年 通信电缆厂家推荐榜单:市话电缆/矿用通讯电缆/室内通信电缆/自承式通信电缆/防水通信电缆/地埋通信电缆优质品牌精选 - 企业推荐官【官方】
  • NF-κB通路:炎症与癌症发展的关键枢纽
  • 终极炉石传说增强插件HsMod:55项功能打造个性化游戏体验
  • 抖音批量下载工具终极指南:从零开始掌握无水印视频下载
  • 2026年论文党必备:一键生成论文工具测评与推荐清单
  • 如何用MOOTDX在5分钟内搭建专业级量化交易系统:从数据获取到策略实现的完整指南