UE4-基类

  • UE4-基类
  • Time:2020年10月15日11:10:05
  • Author: Yblackd


1. 类

​ 从大部分Gameplay类可以派生出4中主要类型的类。分别是:

  • UObject

  • AActor

  • UActorComponent

  • UStruct

当然也可以创建不继承任何父类的类,但它们不会参与到引擎内部的构建中。

1.1 UObject

​ 虚幻引擎中的基本构建块叫做UObject,该类结合UClass使用,可以提供引擎中的多个最重要的基本服务:

  • 反射属性和函数
  • 序列化属性
  • 垃圾回收
  • 按名称查找UObject
  • 属性的可配置值
  • 属性和函数的联网支持

​ 从UObject派生的每个类都会创建有一个UClass,UClass包含有关该类实例的所有元数据。UObject和UClass一起位于Gameplay对象在其生命周期所有作用的最根部位置。UClass描述的是UObject实例的样子、可序列化和联网的属性等。但是大多数Gameplay开发不会直接从UObject派生,而是从AActor和UActorComponent派生。

1.2 AActor

​ AActor派生自UObject,它由关卡设计师放在关卡中,或者通过Gameplay系统在运行时创建。可以放入关卡中的所有对象都是派生自AActor。AActor可以通过调用代码(C++或蓝图)销毁,或者在所属关卡从内存中卸载时通过标准的垃圾回收机制销毁。
AActor可以通过派生子类实现特殊化,也可以通过复合(充当UActorCOmponent的层级容器)实现特殊化。复合的过程通过AActor的RootComponent成员实现,它包含一个UActorComponent,而UActorComponent包含许多其他成员。在可以将AActor放入关卡之前,它必须包含至少一个USceneComponent,USceneComponent包含该AActor的平移、旋转、缩放。

1.3 UActorComponent

​ UActorComponent具有自己的特殊行为,可以为不同类型的AActor提供相同的功能。如:粒子特效等。AActor通常提供与该类型对象特征有关的高级行为功能,而UActorComponent通常用于提供可能与该对象类型特征不相关的特殊行为功能。UActorComponent可以成为AActor的根组件,也可以与其他组件相连接,一个组件只能连接到一个父组件或Actor,但可以连接多个子组件。子组件的位置、旋转和缩放是相对于父组件或Actor的。

  • ActorComponent 是组件的基础类。
  • 拥有变形的 ActorComponent 被称为 SceneComponents
  • 可被渲染的则称为 PrimitiveComponents

1.4 UStruct

​ 想要使用UStruct的话,不必从任何特定类扩展,只需要用USTRUCT()标记该结构体即可,引擎构建工具会自动完成基本构建工作。与UObject不同的是UStruct不会被垃圾回收。如果创建了UStruct的动态实例,必须自行管理其生命周期。UStruct应该是纯传统数据类型,包含UObject反射支持,可以在虚幻编辑器、蓝图操控、序列化等中编辑。

2. 类命名前缀

​ 虚幻引擎提供了一些在构建过程中自动生成代码的工具,这些工具对类的命名有一些默认规则。如果命名不符合默认规则,则会触发警告或错误。规则如下:

  • 派生自 Actor 的类带 A 前缀,如AController。
  • 派生自 Object 的类带 U 前缀,如UComponent。
  • Enums 的前缀是 E,如EFortificationType。
  • Interface 的前缀通常是 I,如IAbilitySystemInterface。
  • Template 的前缀是 T, 如TArray。
  • 派生自 SWidget的类(Slate UI)带有前缀 S,如SButton。
  • 其他类的前缀是 F,如FVector。

3. 常见基类

  • UObject
  • AActor: 能够挂载组件
  • Pawn
  • Character
  • Controller

3.1 另一种理解

  • Pawn: 肉体
    • 没有灵魂的人也可以当做Pawn,类似兵马俑
    • 下棋时,棋子也可以当做Pawn
    • 游戏时,英雄也可以当做Pawn
  • Character
    • Character继承Pawn
    • 区别联系:Character提供一个特殊组件Character Movement(移动、跳跃等)
    • 如果你的人物是在秦始皇陵的兵马俑便可以继承Pawn;如果你的人物是秦朝活着的兵马俑,便需要继承Character;(秦始皇陵不需要移动,秦朝的需要移动)
  • 三者关系类似MVC架构
    • Controller 对应 MVC的 Controller
    • Pawn 对应 MVC的 Model
    • Pawn挂载的一些组件 对应 MVC的 View(个人感觉Actor对应View更正确)

4. 参考

参考链接:https://blog.csdn.net/u011476173/article/details/98039909

参考书本:《大象无形:虚幻引擎程序设计浅析/ 罗丁力,张三著》——北京:电子工业出版社

posted @ 2020-10-15 11:11  yblackd  阅读(145)  评论(0编辑  收藏  举报