UE code analysis: GConfig loading

UE4中提供了一套非常成熟的INI文件配置机制,引擎中也使用了ini作为引擎和项目的配置文件。本篇文章来简单分析一下引擎中GConfig的加载。

阅读全文 »

UE development problem notes and data collection

在平时的开发和学习中遇到和解决的一些问题以及摘录的一些资料,都随手写在了notes中,UE相关的积攒了不少,其他的混在一起比较混乱,整理到本篇文章中。
UE4和VR开发技术笔记不同的是,这里的内容更偏向于项目中实际的问题记录和资料收集。

阅读全文 »

HTC发布的Vive配件Vive Tracker可以用来扩展与SteamVR连接的设备。而且还具有Pogo引脚,可以自己DIY出特殊功能的配件,最近看到了一些使用Vive Tracker来实现的非常棒的创意。相关的资料和技术细节在本篇文章里整理辑录。

阅读全文 »

虽然UE是个游戏引擎,但并不是只能写游戏——你甚至可以用来写Win32 GUI程序😏.
通常,我们使用Editor创建一个UE的游戏项目,然后在其基础上构建自己的类并在游戏中使用。但是如果不想要创建一个游戏项目,UE也支持可以独立运行的程序(Standalone Application),能够从main函数来自主构建自己的程序,完全控制启用哪些Modules,而不依赖于引擎本身的逻辑架构,也可以将其作为学习和测试UE模块的轻便方法。

:UE并没有提供直接创建Standalone Application的方法,我自己写了一个创建Program项目的工具:hxhb/ue4program,并实现了一个独立运行工具的Demo:hxhb/UE4Launcher

阅读全文 »

LaTeX Mathematical Symbols Quick Lookup Table

最近读龙书DX12会用到LaTeX来记录一些公式。为了方便查找,整理了一些常用的LaTeX数学符号语法表,更多符号可以看LaTeX:Symbols

阅读全文 »

Engine Source Analysis: Module Loading and Startup

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++ Polymorphism and Virtual Function Table

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
2
// package log
Ensure condition failed: ObservedKeyNames.Num() > 0 [File:D:\Build\++UE4+Release-4.18+Compile\Sync\Engine\Source\Runtime\AIModule\Private\BehaviorTree\Decorators\BTDecorator_BlueprintBase.cpp] [Line: 67]


我调试了一下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

阅读全文 »