标签:场景 Level Actor Part World UE4 图解 UObject
在介绍UE4渲染体系前,我们有必要来先看一下UE4是用什么样的方式来构建游戏场景数据的。
1 Object
在UE4中当我们说Object,通常是指代引擎代码中的UObject
类,它是引擎里管理绝大部分类和对象的基石,这是因为它提供了非常多的开发者需要的功能特性,例如元数据、反射、垃圾回收、序列化、编辑器支持等一系列功能。
与Unity中的物体容器GameObject
相比(名字上类似),个人理解UObject
存在更像是一种UE4提供的开发核心工具箱,各种需要高复用性的核心功能都集成到里面,不仅仅说场景里的各个物体需要用到UObject
提供的功能,不可见的底层数据管理同样也需要使用到这些。
2 Actor
Actor通常指代引擎代码中的AActor
类,所有可以放置到游戏场景中的"物体"都是一个Actor,例如角色、怪物、光(ALight
)、场景(AStaticMeshActor
)、摄像机(ACameraActor
)等等。它提供的功能和Unity的GameObject
就比较相似了,作为一个容器包含一个"物体"的各种内容,自然地AActor
继承自UObject
类,在UObject
的基础上,还提供了网络同步、创建销毁、帧更新等功能。
对很多刚接触的开发者来说,可能Actor的名字看起来有点突兀,UE4并没有特别说明该名称的由来,个人理解,Actor单词本身的意思是演员,如果可以把游戏看作一场演出的话,其中就是各位出演角色各司其职,角色和怪物完成各种交互、光照(就像打光师)完成场景光照、场景物体可以各种移动变化、摄像机完成拍摄等等。
3 Component
Component通常指代引擎代码中的UActorComponent
类,继承UObject
,是所有组件类型的基类,通常挂载在Actor实例下,如同之前所介绍的,Actor本身是一个容器,而Actor具体的特性则由其具有的Component决定,如在世界场景中的位置旋转缩放(USceneComponent
)、模样(UMeshComponent
)等等。
Component对于Actor来说并不是必选的,可以存在没有组件的空Actor、不需要空间位置的Actor、不需要模样的Actor等等,这样在我们DIY自己需要的Actor时,就可以尽可能少地引入不需要的内容了。
4 Level
Level通常指代引擎代码中的ULevel
,也被叫做关卡,是UE4中用于组织游戏场景的基本单位,由一系列可见和不可见的Actor组成,同时还包含Level自身的一些属性,比如关卡属性、关卡蓝图等等,和Unity中的Scene
概念相通。
5 World
World,引擎代码中的UWorld
,如果说Level代表场景,那World代表承载这个场景的世界,Level必须放在World中才能显示出其中的内容,对于一些以关卡切换来转换游戏场景的游戏来说,他们一个Level就是一个World,这样的概念可能有点多余,但是在很多开放世界的项目中,一个World同时可能不止一个Level,很多3A游戏的无缝多场景切换也是得益于流式关卡(Streaming Level)的使用。
6 Script
除了以上的基本概念,还有脚本(Script)存在于世界的各个Actor中,脚本可以用于给Actor添加不同的行为,脚本可以是C++定义编写的,也可是蓝图定义的,从功能上看,脚本和Component十分相像,但在UE4的组织形式上看,脚本并非是一种Component,而更像是一种对Actor的补充,从程序员角度来讲,就像是对Actor一些接口的覆写(Override),例如自定义BeginPlay、Tick、EndPlay等(对应Unity中的Start、Update、End)时Actor应该有的操作。
顺带一提
你可能已经发现在提到引擎代码中的类名时,相比名称会多出一个前缀(Prefix),这是UE4中一种编码规范,用来指代该类的类别:
T
:模板类,例如TArray
;U
:继承UObject
的类;A
:继承AActor
的类;S
:继承SWidget
的类;I
:抽象界面类;E
:枚举;F
:其他多数类(不在UObject
继承体系内);
参考文献
- [1] 0向往0,剖析虚幻渲染体系(01)- 综述和基础
- [2] UE4官方文档,Actor生命周期
- [3] UE4官方文档,代码规范
标签:场景,Level,Actor,Part,World,UE4,图解,UObject
来源: https://www.cnblogs.com/acstudio/p/16101201.html
本站声明:
1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。