【UE4源代码观察】可视化所有模块的依赖情况

思路

UE4引擎的模块非常多,我想要观察他们的依赖情况。于是我写了程序读取所有模块的.Build.cs文件,记录每个模块依赖的模块(当前是看PublicDependencyModuleNamesPrivateDependencyModuleNames。但后来经评论提醒我发现AddEngineThirdPartyPrivateStaticDependencies也应该视作是“依赖”但没统计,后续待修正_2020.12.3),然后根据一个自定的规则来排列他们,最后显示出来。
这个规则如下:
我引入一个依赖层级的概念:假设一个模块不依赖于任何其他模块,那他的依赖层级为0;假设A模块依赖于一个模块B,则A的依赖层级比B的依赖层级大1;假设A模块依赖于多个模块,则A的依赖层级比他所依赖的所有模块中依赖层级最大的大1。除了依赖层级外,我还统计了每个模块被依赖的次数,在同一层级内将被依赖次数高的模块放在了前面

成果

统计时,所UE4引擎源代码下载时间是:‎2020‎年‎2‎月‎14‎日,版本为4.24.2
统计的模块涵盖了 Runtime, Editor, Developer, Programs, Plugins, ThirdParty。他们在图中的颜色表示如下:
在这里插入图片描述
因为模块太多,所以我分成了三个部分:假设一个模块不依赖于任何模块,也不被任何一个模块依赖,那就叫他“孤单模块”;假设一个模块有依赖的模块,但是不被任何模块依赖,则叫他“叶子模块”;除此之外,就是“枝干模块”。

枝干模块:

(模块之后的数字是被引用的次数)
在这里插入图片描述

叶子模块:

在这里插入图片描述

孤单模块:

在这里插入图片描述
(按理说不应该出现这类模块,他们可能表示有的依赖关系没有统计上,正如开头所说,经评论提醒:我发现AddEngineThirdPartyPrivateStaticDependencies这种依赖关系没统计,这导致了一些模块被视为了所谓的“孤单模块”,此处之后有机会要重新统计修正_2020.12.3)

其他细节

循环引用

理想模式下规则是没有漏洞的,但是UE4模组之间存在着循环依赖的问题:即A依赖了B,B又依赖了A。这时我不得不对规则进行补充:
如果A依赖的众多模块中存在一个B,而B又依赖了A,则A在统计依赖层级最大值时忽略B的依赖层级。
补充上这条规则之后,所有模块的依赖层级都可以正常计算了

未找到的模块

即有些指明依赖的模块却找不到对应的".Build.cs"文件,但并不多,具体是:

AESGCMHandlerComponent depend PlatformCryptoBCrypt not found
AESGCMHandlerComponent depend PlatformCryptoSwitch not found
AESHandlerComponent depend PlatformCryptoBCrypt not found
AESHandlerComponent depend PlatformCryptoSwitch not found
AudioCapture depend AudioCapturePS4Voice not found
AudioCapture depend AudioCaptureSwitch not found
AudioMixerXAudio2 depend XMA2 not found
CADInterfaces depend CoreTech not found
CADLibrary depend CoreTech not found
DatasmithC4DTranslator depend MelangeSDK not found
DatasmithCADTranslator depend CoreTech not found
DatasmithDispatcher depend CoreTech not found
DatasmithIFCTranslator depend IFCEngine not found
DatasmithOpenNurbsTranslator depend OpenNurbs6 not found
DatasmithOpenNurbsTranslator depend CoreTech not found
DatasmithWireTranslator depend OpenModel not found
DatasmithWireTranslator depend CoreTech not found
Engine depend SwitchRuntimeSettings not found
GameplayMediaEncoder depend IBMRTMPIngest not found
NonRealtimeAudioRenderer depend XMA2 not found
PlatformCrypto depend PlatformCryptoBCrypt not found
PlatformCrypto depend PlatformCryptoSwitch not found
WindowsMixedRealityRHI depend ShaderCore not found
XAudio2 depend XMA2 not found

现在已经查明有些是由于平台的关系,没有对应平台的模块。不知道有没有其他的情况。

模块名字大小写

有些模块的大小写与文件不一致,已经修过了,具体是

AxFImporter: Mainframe -> MainFrame
BuildPatchTool: Http -> HTTP
DataPrepEditor: DataprepCore -> DataPrepCore
DataPrepLibraries: DataprepCore -> DataPrepCore
DatasmithCoreTechExtension: DataprepCore -> DataPrepCore
DatasmithImporter: DataprepCore -> DataPrepCore
ExternalRpcRegistry: HTTPServer -> HttpServer
GLTFImporter: Mainframe -> MainFrame
HTTPChunkInstaller: Http -> HTTP
LauncherServices: JSON -> Json
MDLImporter: Mainframe -> MainFrame
MobileLauncherProfileWizard: JSON -> Json
OnlineSubsystemGameCircle: Http -> HTTP
OnlineSubsystemGooglePlay: Http -> HTTP
OnlineSubsystemIOS: Http -> HTTP
PerfCounters: HTTPServer -> HttpServer
StaticMeshEditorExtension: DataprepCore -> DataPrepCore
UnrealEd: Http -> HTTP
WebMMedia: LibVpx -> libvpx
WebMMedia: LibWebM -> libwebm
WebRemoteControl: HTTPServer -> HttpServer
  • 10
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
UE4智慧机场数字孪生可是指利用虚幻引擎4技术,对机场进行数字建模和仿真,实现真实时间数据的可展示和交互应用。 首先,UE4通过对机场进行数字建模,可以将机场内外的实体设施和环境如终端楼、跑道、停机坪、候机厅等一一还原,包括建筑布局、道路、设备等细节。同时,可以加入人物模型、车辆模型,使得可效果更加逼真。 其次,通过智慧机场数字孪生可,可以实时采集机场各个区域的数据,包括人流、飞机起降情况、设备运行状态等,通过数据分析和处理,可以将这些数据在数字建模的机场场景中进行可展示。通过图表、动态模型等形式,可以直观地展示机场的运行情况和各个区域的实时状态。 进一步,通过虚拟现实技术,可以将数字孪生机场模型投影到仿真设备或VR眼镜上,使用户能够身临其境地体验机场的运作和环境。比如,用户可以通过VR眼镜看到飞机的起降过程,或者在仿真设备上模拟机场运营过程,包括行李传送、人流疏导等。 最后,通过数字孪生可,智慧机场还可以进行交互应用。比如,通过触摸屏,用户可以选择特定航班,查看航班信息、候机区域的拥堵度,还可以预约服务、购买机票、查询信息等。用户还可以通过声控、手势控制等交互方式与系统进行互动,方便快捷地获取所需信息。 总之,UE4智慧机场数字孪生可技术,通过数字建模、实时数据采集和可交互应用等手段,可以实现对机场运营情况的可展示和仿真体验,为机场运营和旅客提供了更加智慧、便捷的服务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值