【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.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;…