UE4对象系统_前言

概述

UE4的对象系统可以说是整个引擎的核心模块,其在引擎中的地位如下图:

UE4_ObjectSys_Level.png

该对象系统具有很强的扩展性,新增的类只需要从UObject类继承下来就可以融入到对象系统中。
对象系统具有如下几个特性:

  1. 反射对象属性和方法
  2. 对象的序列化
  3. 垃圾回收
  4. 创建和查找对象
  5. 通过配置文件设置对象的默认属性
  6. 网络支持(Replication和RPC)

C++语言本身不支持上述功能,为了实现上述功能,引擎定义了对象基类UObject, UObject类和其子孙类分别拥有一个UClass实例, UClass实例作为对象类的元数据(meta data),描述了类的反射信息和其它编辑器需要的信息。
Unreal Reflection System:
Each class that derives from UObject has a singleton UClass created for it that contains all of the meta data about the class instance. UObject and UClass together are at the root of everything that a gameplay object does during its lifetime. The best way to think of the difference between a UClass and a UObject is that the UClass describes what an instance of a UObject will look like, what properties are available for serialization, networking, etc.

整个对象系统,跟UE3比较起来变化不大。Blueprint对应UE3中的uc脚本系统和Kismet。 UE3通过在uc中定义一些uc class属性,通过uc编译器进行生成C++头文件;UE4通过在C++的头文件中的类定义中加入些宏(确切地说是空宏),让UnrealHeaderTool对.h文件进行预处理,产生一些C++ .h,.cpp文件,这些代码充当胶水层,将C++ Class加入Reflection功能。
注:UE3中的Kismet也是一个通过可视化连线达到编程目的,但是谈不上一个语言,其连接结点由C++代码实现;Blueprint集成了uc脚本和Kismet的功能,既能可视化编程又能够后端生成uc虚拟机字节码执行(也可以生成其它语言),所以Blueprint又叫Kismet2(这也许就是引擎Blueprint的接口有K2前缀的原因)。

对象的名字空间

与UE3类似,在对象系统中,每个对象有唯一的路径名和类型(路径名相同但类型不同是允许的)。这点应该是学习Java的包命名方式吧。
举个例子:


UE4_Editor_Content_Browser.jpg

上图中FirstPerson_Run资源的全路径名为:
AnimSequence'/Game/FirstPerson/Animations/FirstPerson_Run.FirstPerson_Run'。

  • AnimSequence 是资源对象类名
  • /Game/FirstPerson/Animations/ 是资源所在的路径(游戏项目的Content目录下的FirstPerson/Animations目录)
  • FirstPerson_Run.FirstPerson_Run 第一个FirstPerson_Run是包名(加载到内存后对应一个UPackage实例, 每个uasset文件对应为一个包,第二个FirstPerson_Run是动画序列对象的名字,它的类型是AnimSequece。在虚幻中把第一个FirstPerson_Run对象称为第二个FirstPerson_Run对象的Outer

通过类型和路径名就可以精确找到该对象。
注:在UE3中是对象名字空间是不带有资源所在路径这一因素的。

行程安排

代码模块:

  • RunTime\UObjectCore 对象系统
  • RunTime\Core 封装平台相关代码和算法

后续对象系统系列文章将从如下几个方面进行着手:

  1. 对象的类描述,主要通过UClass类来实现。
    • 与UClass的相关概念
    • UClass实例的创建
    • 分析一个由UnrealHeaderTool生成的反射代码
  2. 对象的创建流程和查找
  3. 对象的序列化, 文件格式,Linker
  4. 垃圾回收流程和机制
  5. Blueprint的原理 和 VM
    a. Blueprint的可视化描述
    b. 字节码生成
    c. VM的执行
  6. 模块机制,如何实现hot-reload
  7. 对象的Replication(Network)

使用UE4开发应用必须要了解对象系统(特别是1-5点),在开发中会碰到有的同学创建的对象被莫名其妙地回收了,导致系统崩溃。究其原因就是没有了解对象系统是如何利用UClass提供的信息来进行GC的,在定义C++类时是否需要给成员变量加UPROPERTY宏犯迷糊。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,594评论 18 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,431评论 25 707
  • 22年12月更新:个人网站关停,如果仍旧对旧教程有兴趣参考 Github 的markdown内容[https://...
    tangyefei阅读 35,159评论 22 257
  • 新加坡亚洲文明博物馆里新建了一个中国风的餐厅——皇后餐厅(EmpressRestaurant)。该餐厅由Taken...
    asf231阅读 341评论 0 0
  • 最后的必然,其实就是最初的偶然 2017年6月8日,高考结束,我终于走到了应试教育的尾端。6月10日,我踏上了开往...
    顾寒lucky阅读 510评论 7 11