Unreal 代码流程分析

本文详细介绍了Unreal引擎启动过程中的关键步骤,包括WinMain函数内的实例句柄记录、日志初始化、文件管理器初始化、内存分配器初始化、命名系统初始化、配置信息初始化等,并涉及窗体创建、编辑器初始化等后续操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 WinMain

1 记录实例句柄及包名称

2 生成Log文件路径名称-存于Log.Filename

3  app初始化-appInit

3.1 文件管理器GFileManager

3.2 初始化 CRC -GCRCTable

3.3 初始化Log-GLogs

3.4 记录命令行-GCmdLine

3.5 初始化错误信息-GErrorHist

3.6 内存分配器初始化-FMallocWindows.Init

3.6.1 获取页面大小

3.6.2 初始化一系列表:OsTablePoolTableMemSizeToPoolTablePoolIndirect

3.7 初始化命名系统-FName::StaticInit()

3.7.1 初始化Hash表:NameHash

3.7.2 定义两个宏用于注册NameREGISTER_NAMEREG_NAME_HIGH

3.7.3 验证NameHash中是否有重复

3.8 运行平台版本信息初始化-appPlatformPreInit():将版本信息存于GRunningOS

3.9  GFileManager->Init(1); GFileManager->SetDefaultDirectory( appBaseDir() );

3.10  Default.ini中内容拷贝到:包名.iniGIni存路径)中

3.11  DefUser.ini中内容拷贝到User.iniGUserIni存路径)中

3.12 初始化Config信息-GIniGUserIni来初始化,并存于GConfig

3.13 设置语法格式-UObject::SetLanguage

3.14 初始化Obj管理器、-UObject::StaticInit()

3.14.1 初始化Obj哈希表-GObjHash

3.14.2 注册class-ProcessRegistrants()

3.14.3 新建一个临时Package-GObjTransientPkg 新建一个PackageMap-GObjPackageRemap

3.15 内存栈GMem初始化大小65536-FMemStack::Init

3.16 文件流GFileStream初始化-FFileStream::Init

3.17 运行平台详细信息初始化-appPlatformInit() 记录详细的硬件信息:GSysGPageSizeGProcessorCountGMachineCPUGSecondsPerCycleGPhysicalMemory

4 窗体初始化-InitWindowing

4.1 新建一个窗体管理器-GWindowManager

4.2 GWindowManager作为根窗体

5 注册所有的窗体类(从WWindow派生的类)

6 创建一个MdiFrame窗体-Frame

7 Frame.OpenWindow()

7.1 创建窗体-PerformCreateWindowEx

7.1.1 NewCQClient.ini中读窗体位置([WindowPositions]标签)

7.1.2 把该窗体的指针加入到全局的窗体列表中-_Windows

8 初始化闪屏封面-InitSplash

8.1 导入图片EdSplash.bmp

8.2 创建一个对话框窗体(对应资源IDDIALOG_Splash

9 初始化LogWindow-GLogWindow

10  初始化Engine,并将Engine指针存于GUnrealEdGEditor-InitUnrealEdEngine()

10.1 设置Exec hook - GExec

10.2 加载类"UnrealEd.UnrealEdEngine"并存于EngineClass-UObject::StaticLoadClass

10.2.1 UObject::StaticLoadObject

10.3  EngineClass构造一个Object对象:Engine - ConstructObject<UUnrealEdEngine>

10.4 Engine->Init()

10.4.1 UEditorEngine::Init()

初始化GEditorthis

初始化Editor - UEditorEngine::InitEditor()

UEngine::Init()

NewCQClient.ini中读取[URL]的数据 - FURL::StaticInit()

引擎内存栈GEngineMem初始化分配65536

缓冲区GCache初始化

 引擎状态管理器GEngineStats初始化

随机数生成器初始化

GStatGraphGTempLineBatcherCylinderGGlobalTempObjects新建对象

g_pTerrainGridBrush新建对象

NewCQClient.ini中读取[D3D9Drv.D3D9RenderDevice]中的视口参数

初始化音频 - UEngine::InitAudio()

初始化Topic - FGlobalTopicTable::Init()

编辑器其他参数初始化

创建transaction - Trans

加载Package - LoadPackage

初始化Client

10.4.2 设置EditorModel为:EM_ViewportMove

11  设置CQShell

12 创建一个游戏接口指针 - g_pUnInterface

13 g_pUnInterface->Init - UnInterface::Init

13.1 新建一个UnRepresentShell对象,并设置视口

13.2 新建NpcMap - m_Npcs

13.3 加载技能相关数据

14 初始化CQShellName构造宏 - UCQShell::InitCQShellNames()

15 设置编辑器的主窗体句柄 - 存于GUnrealEd->hWndMainGhwndEditorFrame

16 为主窗体启动一个计时器 - 每一分钟一次,用于自动保存

17 若没有UnrealEd.ini,就从DefUnrealEd.ini拷贝一份到UnrealEd.ini

18 初始化GLastDir数组,用于记录上次使用的资源的路径

19 UnrealEd2.ini中读取地图资源的扩展名,存于GMapExt,并让UnravelEdEngine执行命令:MODE MAPEXT,已设置地图资源的扩展名

20 初始化Input - UInput::StaticInitInput()

21 初始化编辑器的一系列Tools GTerrainToolsGRebuildToolsGEdModeToolsGEdModeToolsGTBOptions GMaterialToolsGTexAlignToolsGMatineeToolsGButtonBar

22  创建浏览器总窗体 - GBrowserMaster,并设置好它的一系列子窗体的指针

23 创建一些面板:GBuildSheetGSurfPropSheetGTerrainEditSheet GDlgMapBlockEditorGMatineeSheetGCodeFrame

24 编辑器主框架打开LevelView - Frame.OpenLevelView()

25 从配置文件UnrealEd.ini中读取,浏览器的各个子窗体的是否显示和停靠方式

26  设置RepresentShell的视口及主窗口句柄

27 加载菜单IDMENU_MainMenu到主框架上

28 往菜单上添加“最近使用的地图”,数据来源于UnrealEd.ini中的[MRU]

29 Main Topic

 

Epic Games今天宣布,正式发布“虚幻引擎4”(Unreal Engine 4/UE4),相关所有资源也一并放出。# h9 u6 O( p! y& D) q4 K7 P9 ~# N   只要每个月花19美元,你就能到全部资源,包括拿过来就能用的虚幻编辑器(Unreal Editor),GitHub上的完整C++源代码(支持微软Visual Studio/苹果Xcode),还有完整的生态系统:论坛、维基、问答、协作。8 t8 q& _* ?7 K. D) S6 W 一大波新游戏要来了 虚幻4引擎正式发布, s! f+ v' w9 M j3 y: ^   而在虚幻引擎4游戏的销售中,Epic将抽取5%的毛收入提升,也就是你的游戏赚了100万美元,就要交给Epic 5万美元。   回到技术方面,Epic号称虚幻引擎4是他们多年来心血的结晶,而且现在只是第一版,才刚刚开始。C++代码里你可以看到大量的创新,比如说支持虚拟立体偷窥Oculus VR,支持Linux操作系统,以及支持Valve SteamWorks、StreamBox,而且还可以通过HTML5在网页浏览器内开发游戏(页游)。   平台支持PC、PS4、Xbox One、iOS、Google等等。   虚幻引擎4基于DirectX 11,拥有新的材料流水线、蓝图视觉化脚本、直观蓝图调试、内容浏览器、人物动画、Matinee影院级工具集、全新地形和植被、后期处理效果、热重载(Hot Reload)、模拟与沉浸式视角、即时游戏预览、AI人工智能、音频、中间件集成等一系列全新特性。   虚幻引擎4现已开始提供授权。 现在提供网盘下载地址,毕竟到官方下载很麻烦,还要$,呵呵,10分很值得,代码风格很好,注释很爽!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值