
UE是模块化的架构,Engine/Game Project/StandaloneApplication/Plugins都是Module(Unreal Engine API Reference列出了Engine提供的Module列表),本篇文章从FModuleManager
的代码来分析一下UE的Module是如何通过FModuleManager::LoadModule
加载和启动的。
UE是模块化的架构,Engine/Game Project/StandaloneApplication/Plugins都是Module(Unreal Engine API Reference列出了Engine提供的Module列表),本篇文章从FModuleManager
的代码来分析一下UE的Module是如何通过FModuleManager::LoadModule
加载和启动的。
UE通过UBT来构建项目(不管是VS里的Build也好,Editor里的Compile也好,最终都会调用UBT)。UBT和UHT是UE工具链的基石,内容太多,没办法一次性分析全部,先梳理出一个大致的轮廓,有时间再慢慢补充。
C++是一门支持面向对象编程(object-oriented Programming)的语言,继承和多态(Polymorphic)是其最重要的特性。
关于C++的继承和类内成员的各种内容在之前的文章中已经有了不少介绍,本篇文章主要是研究一下编译器对C++多态的一个实现方式:虚函数表。
C++标准([IOS/IEC 14882:2014])中写道:
Virtual functions support dynamic binding and object-oriented programming. A class that declares or inherits a virtual function is called a polymorphic class.
注意:C++标准并没有规定如何实现多态,所以编译器对多态的实现是Implementation-defined Behavior
,意思就是不同的编译器可能对多态的实现是不一样的,在不同的平台可能会无法得到相同的实验结果。
最近项目打包时遇到一个非常奇怪的错误:
1 | // package log |
我调试了一下UE4的代码,分析了一下原因和解决过程。
UE4引擎里面定义了很多引擎中的宏和一些处理逻辑,如WITH_ENGINE
/WITH_EDITOR
等,它们部分是UBT通过读取*.target.cs
文件中的配置来定义的,有些逻辑是通过读取*.Build.cs
的配置处理的。
我读了一下UBT的代码,抽出来部分UBT中配置文件(Target.cs
/Build.cs
)参数与MACRO的相互定义,作为速查手册。*.Target.cs
的参数可以看:UnrealBuildSystem/Targets*.Build.cs
的参数可以看:UnrealBuildSystem/ModuleFiles
UE的构建系统文档:Build Tools
Tor的Bridge如果传播的范围比较广,可能隔几天就被和谐掉了,频繁地换有点麻烦(恍惚间让我想到了当年改host上Google的时光)。今天折腾了一下,自己在VPS上搭建tor的Bridge来自用。
而且也从Tor Browser里提取出tor,使其不依赖Tor Browser,可以供其他浏览器使用。
警告:部署Bridge可能会增加服务器被墙的概率。
在部分SDK的对接中,有些平台除了DLL外并没有提供导入库来供我们使用,那就只能使用代码中加载DLL的办法来调用DLL内的函数,本文来记录一下两种用法,再分析一下优劣。