Unreal 代码流程分析

1649 篇文章 11 订阅
1277 篇文章 12 订阅

 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

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值