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.pswp.cn/bicheng/88221.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/88221.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/88221.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大数据学习1:Hadoop单机版环境搭建

1.基础知识介绍 Flume采集日志。Sqoop采集结构化数据&#xff0c;比如采集数据库。 存储到HDFS上。 YARN资源调度&#xff0c;每台服务器上分配多少资源。 Hive是基于Hadoop的一个数据仓库工具&#xff0c;提供SQL查询功能&#xff0c;能将SQL语句转变成MapReduce任务来执行…

深入理解PHP中的命名空间和自动加载机制

首先&#xff0c;让我们来讨论命名空间。PHP的命名空间是一种对代码进行逻辑分组的机制&#xff0c;它允许开发者将函数、类和常量封装在不同的命名空间中。这样做的好处在于可以避免全局范围内的名称冲突。例如&#xff0c;你可能在你的项目中使用了一个名为"Database&qu…

学习:JS[3]数组的增删改查+函数+作用域

一.操作数组1.改2.增arr.push(新增的内容):将一个或多个元素添加到数组的结尾arr.unshift(新增的内容):方法将一个或多个元素添加到数组的开头,并返回该数组的长度3.删除arr.pop():方法从数组中删除最后一个元素,不带参数,并返回元素的值arr.shift():方法从数组中删除第一个元素…

从0到1搭建ELK日志收集平台

ELK是什么 ELK 是指 Elasticsearch、Logstash 和 Kibana 这三种工具的组合&#xff0c;通常用于日志分析、数据搜索和可视化。它们分别承担不同的功能&#xff0c;形成了强大的数据处理和分析平台&#xff1a; Elasticsearch&#xff1a;一个分布式搜索引擎&#xff0c;擅长实时…

Qt:图片切割

void MainWindow::on_action_slice_triggered() {QDialog *dialog new QDialog(this);dialog->setWindowTitle("切割");dialog->setFixedSize(200, 150);QVBoxLayout *vbox new QVBoxLayout;QHBoxLayout *hbox new QHBoxLayout;QLabel *label new QLabel(&…

BabelDOC,一个专为学术PDF文档设计的翻译和双语对比工具

你是否也有这样的困境&#xff0c;面对一篇学术论文&#xff0c;即使英语水平不错&#xff0c;仍需反复查词典&#xff0c;尤其是遇到专业术语和复杂长句&#xff0c;翻译软件又常常不能很好地处理学术PDF的排版&#xff0c;导致翻译结果混乱不堪。 现在&#xff0c;解决你烦恼…

Python之面向对象和类

一.类1.类的定义&#xff1a;class 类名&#xff1a;“”“注释 ”“”pass2.实例的创建&#xff1a;实例 类名(parameterlist)parameterlist&#xff1a;定义类时__init__()方法的参数&#xff0c;如果该方法只有一个self参数&#xff0c;parameterlist可以省略class Goose()…

【力扣 困难 C】329. 矩阵中的最长递增路径

目录 题目 解法一 题目 待添加 解法一 int max(int a, int b) {return a > b ? a : b; }int search(int** matrix, int m, int n, int i, int j, int (*dp)[n]) {if (dp[i][j]) {return dp[i][j];}int len 0;if (i > 0 && matrix[i - 1][j] > matrix[i]…

Blueprints - UE5的增强输入系统

一些学习笔记归档&#xff1b;增强输入系统由两部分组成&#xff1a;Input Action和Input Mapping ContextInput Action是输入操作的映射&#xff08;操作中比如有移动、跳跃等&#xff09;&#xff0c;Input Mapping Context是输入情境的映射&#xff08;对各种操作的具体按键…

Python 【技术面试题和HR面试题】➕ 动态类型、运算符、输入处理及算法编程问答

1.技术面试题 &#xff08;1&#xff09;TCP与UDP的区别是什么&#xff1f; 答&#xff1a; ①连接性&#xff1a;TCP 面向连接&#xff0c;3次握手及4次挥手&#xff0c;建立端到端的虚链路像&#xff1b;UDP 无连接&#xff0c;直接发送&#xff0c;无需预先建立连接 。 ②传…

etcd-cpp-apiv3 二次封装

接口介绍头文件#include <etcd/Client.hpp> #include <etcd/KeepAlive.hpp> #include <etcd/Response.hpp> #include <etcd/SyncClient.hpp> #include <etcd/Value.hpp> #include <etcd/Watcher.hpp>下面从功能介绍几个类的概念Value &…

【网络与系统安全】强制访问控制——Biba模型

一、模型定义与目标 提出背景&#xff1a;1977年由Ken Biba提出&#xff0c;是首个完整性安全模型&#xff0c;与BLP模型形成对偶&#xff08;BLP关注机密性&#xff0c;Biba关注完整性&#xff09;。核心目标&#xff1a;防止低完整性信息污染高完整性信息&#xff0c;避免未授…

从架构抽象到表达范式:如何正确理解系统架构中的 4C 模型20250704

&#x1f9e9; 从架构抽象到表达范式&#xff1a;如何正确理解系统架构中的 4C 模型&#xff1f; “4C”到底是架构的组成结构&#xff0c;还是架构图的表现方式&#xff1f;这类看似细节的问题&#xff0c;其实直击了我们在系统设计中认知、表达与落地之间的张力。 &#x1f5…

Debian10安装Mysql5.7.44 笔记250707

Debian10安装Mysql5.7.44 笔记250707 1️⃣ 参考 1 在Debian 10 (Buster) 上安装 MySQL 5.7.44 的步骤如下&#xff1a; 1. 添加 MySQL APT 仓库 MySQL 官方提供了包含特定版本的仓库&#xff1a; # 下载仓库配置包 wget https://dev.mysql.com/get/mysql-apt-config_0.8.28…

20250706-6-Docker 快速入门(上)-镜像是什么?_笔记

一、镜像是什么&#xfeff;1. 一个分层存储的文件&#xff0c;不是一个单一的文件分层结构: 与传统ISO文件不同&#xff0c;Docker镜像由多个文件组成&#xff0c;采用分层存储机制存储优势: 每层可独立复用&#xff0c;显著减少磁盘空间占用&#xff0c;例如基础层可被多个镜…

[SystemVerilog] Clocking

SystemVerilog Clocking用法详解 SystemVerilog 的 clocking 块&#xff08;Clocking Block&#xff09;是一种专门用于定义信号时序行为的构造&#xff0c;主要用于验证环境&#xff08;如 UVM&#xff09;中&#xff0c;以精确控制信号的采样和驱动时序。clocking 块通过将信…

kong网关基于header分流灰度发布

kong网关基于header分流灰度发布 在现代微服务架构中&#xff0c;灰度发布&#xff08;Canary Release&#xff09;已经成为一种常用且安全的上线策略。它允许我们将新版本的功能仅暴露给一小部分用户&#xff0c;从而在保证系统稳定性的同时收集反馈、验证效果、规避风险。而作…

Go语言gin框架原理

在gin框架中&#xff0c;最关键的就是前缀树&#xff0c;是很重要的。gin框架本质上是在http包的基础之上&#xff0c;对其的一个二次封装。这里借鉴一下小徐先生的图&#xff0c;可能当前版本的gin可能内容有所改变&#xff0c;但大致思想还是这样。gin框架所做的就是提供一个…

4、Sending Messages

本节介绍如何发送消息。Using KafkaTemplate本节介绍如何使用KafkaTemplate发送消息。OverviewKafkaTemplate封装了一个生产者&#xff0c;并提供了向Kafka主题发送数据的便利方法。以下列表显示了KafkaTemplate的相关方法&#xff1a;CompletableFuture<SendResult<K, V…

CSS长度单位问题

在 CSS 中&#xff0c;100px 的逻辑长度在不同分辨率的手机屏幕上是否表现一致&#xff0c;取决于 设备的像素密度&#xff08;devicePixelRatio&#xff09; 和 视口&#xff08;viewport&#xff09;的缩放设置。以下是详细分析&#xff1a;1. 核心概念 CSS 像素&#xff08;…