UnrealEngine4之UObject(一)

Runtime最关键的实现是UObject,它是所有引擎层面、游戏层面对象的基类。

UObject实现了动态创建、持久化、脚本化、内存管理、生存期控制。

---------------------------

关于动态创建

---------------------------

通过一个类名创建一个对象就是动态创建。

UnrealEngine4流程就是:

FStringClassReference XxxxClassName;

|

TSubclassOf<Xxxx> XxxxClass;

|

Xxxx* XxxxObject;;

通过类名找到运行时类型信息,再通过运行时类型信息创建一个对象。

UField、UStruct、UClass、UProperty、UFunction、UEnum等是构建运行时类型信息的数据结构,参见Runtime/CoreUObject/Public/UObject/Class.h

这个时候引申出一个问题:这些运行时类型信息怎么构建起来?

UnrealEngine4里每个类都会对应一个Xxxx.generated.h,这个里面放着构建运行时类型信息的宏定义代码。这个Xxxx.gengerated.h是通过UnrealHeaderTool(UHT)生成的。

UHT通过解析每个头文件里的关键字UCLASS、USTRUCT、UPROPERTY、UFUNCTION、UENUM等生成出来的。

时间: 2024-10-12 02:49:27

UnrealEngine4之UObject(一)的相关文章

UnrealEngine4编码风格的思考

第一次拿到UE4源码,扫了一遍.各种宏定义,各种模板,各种类层次.杂乱无章. 后来慢慢明确其规律: UE4的编码风格是在匈牙利命名法的基础下做了改进,使其更适用游戏引擎业务(业务特点:数据可视编辑.脚本化). UE4保留了匈牙利命名法的大驼峰.使Tag含义更易读. UE4里有非常多类型都以F.U.A.T为前缀,成员变量不加m前缀.为什么呢? 站在设计者的角度,想想UE4的引擎设计思路.引擎必定是很庞大复杂,但再复杂的引擎都是从零设计编码出来的. 设计者设计之初定然明确这是一个庞然大物,要想可控.

UnrealEngine4(虚幻4)这次来真格的了

首发地址: http://98jy.net/group/3/thread/10 作为一个行内非常知名.而且的确牛逼(licence费用曾经高达传说中的千万RMB)的引擎.近日宣布开源并且免费供游戏开发者使用,对盈利的游戏,按照5%的毛利来分成即可.关键之处在于,对于教学.影视.建筑等也就是非游戏产品,虚幻4并不收取任何费用. 这下unity的licence费用就显的贵了! 那么unity的另外一个杀手锏"跨平台"呢?按照官方的公布,目前为止,unity已经可以支持到17个平台(平台列表

UnrealEngine4上下文

从游戏内容角度UnrealEngine4是如何初始化的? 引擎环境初始化 | 实例化定制的引擎(GameEngine,UnrealEdEngine) | 实例化游戏实例(GameInstance) | 启动游戏实例(StartGameInstance) | 创建世界(FWorldContext,UWorld) | 加载初始地图(LoadMap) | 创建玩家视图(ViewportClient) | 实例化游戏模式(GameMode) | 创建玩家(UPlayer) | 创建玩家控制器(UPlay

《InsideUE4》UObject(六)类型系统代码生成重构-UE4CodeGen_Private

读的不如写的快 引言 在之前的<InsideUE4>UObject(四)类型系统代码生成和<InsideUE4>UObject(五)类型系统收集章节里,我们介绍了UE4是如何根据我们的代码和元标记生成反射代码,并在Main函数调用之前,利用静态变量的初始化来收集类型的元数据信息.经过了我这么长时间的拖更--也经过了Epic这么长时间的版本更替,把UE从4.15.1进化到了4.18.3,自然的,CoreUObject模块也进行了一些改进.本文就先补上一个关于代码生成的改进:在UE4.

UnrealEngine4 PBR Shading Model 概述

虽然是概述,但内容并还是有些多,写上一篇PBR概念概述后,也在考虑怎么继续下去,最后还是觉得先多写一些东西再慢慢总结,所以还是尽量把这些年PBR相关的Paper精粹沉淀下来吧. 因为UE4开源的缘故,所以一开始还从它入手.相关的ppt和notebook可以从下面的链接下载,同期的黑色行动2(black op2)的PBR使用也是很有参考价值的,加上本文里也有OP2的IBL近似方法的介绍,如果没看过那也很值得下载的. http://blog.selfshadow.com/publications/s

UnrealEngine4.5 BluePrint初始化中遇到编译警告的解决办法

今天遇到一个问题,如下图: 假如你在一个BP的初始化脚本里用了"Get Player Character",编译BP时候就会遇到上述警告(Warning Function ' Get Player Character ' is unsafe to call in a construction script.).理论上编程时候应该向上述警告一样避免这种情况,但是如果你非要这么用,又不想改太底层的东西,有没有办法简单跳过这个warning呢? -----------------------

UnrealEngine4初始化流程

自古以来所有的游戏引擎都分为三个大阶段:Init,Loop,Exit.UE4也不例外. 首先找到带有入口函数的文件:Runtime/Launch/Private/XXXX/LaunchXXXX.cpp.Windows平台就将XXXX替换成Windows. 这个文件,实现一个GuardedMainWrapper函数,顾名思义,这个函数是对GuardedMain的包装,将GuardedMain用try\catch包装起来. GuardedMain位于:Runtime/Launch/Private/L

UnrealEngine4针对游戏模式的思考

游戏可以概括为三类:单进程联机(超级玛丽),小规模联机(魔兽争霸,CS),大规模联机(魔兽世界).

UnrealEngine4 VR程序打包在HTC VIVE上的使用

请确保VIVE设备连接正常. 打开UE4开发的VR程序,按键 ALT + ENTER 就可以使用VIVE头盔来体验了. PS.打包的时候  Edit -> Plugins -> Built-In -> Virtual Reality -> SteamVR 的已经勾选启用. 默认是勾选的.