[UE]常见C++类继承关系

参考

UE的C++类的继承关系整理

命名规范

大小写:由一个或多个单词组成的变量或者函数,其中每个单词的首字母大写,单词之间没有下划线。
举个例子:Health 和UPrimitiveComponent就是正确的命名规则。但是lastMouseCoordinates或者delta_coordinates就是错误的命名法。
前缀:类名用一个额外的大写字母来区分变量名,例如:FSkin 是一个类名,Skin是FSkin的实例对象。
T:模板类
U:继承自UObject(虚幻引擎所有类的基类)
A:继承自AActor
S:继承自SWidget
I :抽象类
E:枚举
bool类型必须用以"b"作为首字母(例如0:bPendingDestruction, 或者bHasFadeIn)
绝大多数类的前缀是F,尽管有些子系统的前缀是其他字母。
变量名前缀尽量不要用handle和process,因为这些词是不明确的,造成歧义。
在函数形式参数传递的时候,引用传递参数名前尽量加上Out,并在函数中对参数进行赋值。
void GetObject(UObject* OutValue);
如果是引用传递的参数是bool类型,尽量加上“b”。例如:bOutResult;

组件的继承关系

Unreal Engine 4:学习笔记(六)Component

源头class UObject

//UActorComponent 是所有组件的基类, 适用于抽象行为,例如移动/物品栏/属性管理等非物理概念。其不存在任何物理位置或旋转。
一级派生class UActorComponent 角色组件
class ENGINE_API UActorComponent : public UObject, public IInterface_AssetUserData

    1.class UInputComponent 输入组件
    2.class UMovementComponent 移动组件
       URotatingMovementComponent
	3.class UProjectileMovementComponent
	4.class UNavMovementComponent
	   UPawnMovementComponent
	   UCharacterMovementComponent
	5.class USceneComponent
	6.class UFieldNodeBase
	     UfieldNodeFloat
	        URadiaFalloff

  //USceneComponent支持基于位置,不需要几何表示的行为。包括弹簧臂/摄像机/音频/物理力和约束(但不包括物理对象)等
  二级派生USceneComponent 场景可见 包含Transform
  class ENGINE_API USceneComponent : public UActorComponent
 
    1.class UPostProcesComponent 处理效果
    2.class UCameraComponent 摄像头组件
    3.class ULightComponentBase 灯光大类组件
      a.class ULightComponent 光源组件
        a1.class UDirectLightComponent 平行光组件
        a2.class UPointLightComponent 点光源组件
          a2_1.class USpotLightComponent 射光源组件
      b.class USkyLightComponent 天空光组件
    4.class UAudioComponent 音频组件

    //UPrimitiveComponent 拥有几何表示的场景组件,用于渲染视觉元素或与物理对象发生碰撞或重叠。
    //包括静态/骨架网格体/Sprite/公告板/粒子系统/盒体、胶囊体和球体碰撞体。
    三级派生class UPrimitiveComponent 图源(渲染/物理计算)
      1.class UMeshComponent 网格组件
      //静态网格体组件和骨架网格体组件包含将被渲染的预制几何体,需要时也可以用于碰撞检测
         (1).class UStaticMeshComponent 静态网格组件
             a.class UStaticMesh 网格实例
         (2).class USkinnedMeshComponent 皮肤网格组件
           b.class USkeletaMeshComponent 骨骼网格组件
             b1.class USkeletaMesh 骨骼实例
         (3).class UWidgetComponent 
      2.class UBrushComponent 笔刷组件
      3.class ULandscapeComponent 场景组件
      4.class UShapeComponent 形状组件
         //盒体/胶囊体/圆柱组件生成不可见的几何体进行碰撞检测
        (1).class UBoxComponent 盒体组件
        (2).class UCapsuleComponent 胶囊组件
        (3).class USphereComponent 圆柱组件
      5.class UTextRenderComponent
      6.class UParticleSystemComponent


注意:这里的组件类名字,在编辑器中添加组件时不一定就是通过类名来搜索的
例如:UCapsuleComponent 胶囊组件就会在编辑器中显示"Capsule Collision"


UCLASS(ClassGroup="Collision", editinlinenew, hidecategories=(Object,LOD,Lighting,TextureStreaming), meta=(DisplayName="Capsule Collision", BlueprintSpawnableComponent))
class ENGINE_API UCapsuleComponent : public UShapeComponent
{
    GENERATED_UCLASS_BODY()
    ...
}
这是一个在Unreal Engine中定义组件类的代码,其中包含了多个类标记,具体含义如下:
UCLASS:
这是一个宏,用于声明一个类。在这里,它被用于声明一个组件类。

ClassGroup="Collision":
这是一个自定义的元数据,用于指定该组件属于哪个类别。在这里,该组件属于“Collision”类别。

editinlinenew:
这是一个类标记,用于指定该组件可以在编辑器中内联创建和编辑。这意味着,可以在另一个Actor或组件中直接添加该组件,而不需要先创建一个新的组件对象。

hidecategories=(Object,LOD,Lighting,TextureStreaming):
这是一个类标记,用于指定在编辑器中隐藏哪些类别的属性。在这里,该组件在编辑器中隐藏了“Object”、“LOD”、“Lighting”和“TextureStreaming”这几个类别。

meta=(DisplayName="Capsule Collision", BlueprintSpawnableComponent):
这是一个元数据,用于指定一些额外的信息。
其中,DisplayName用于指定在编辑器中显示的名称,这里指定为“Capsule Collision”。BlueprintSpawnableComponent用于指定该组件可以在蓝图中创建实例。

Actor的继承关系

Unreal Engine 4:学习笔记(五)Actor

class UObject
    class AActor
        class AStaticMeshActor
        class ACameraActor
        class ANavigationObjectBase-+
            class APlayerStart
        class ALight
            class ADirectionalLight
            class APointLight
            class ASpotLight
        class ATriggerBase
            class ATriggerBox
            class ATriggerCapsule
            class ATriggerSphere
        class AMatineeActor
        class AController
            class AAIController
            class APlayerController
        class APawn
            class ACharacter
        class ABrush
            class AVolume

AActor中都有一个根组件RootComponent

USceneComponent* RootComponent;

一些常见的AActor

APlayerStart: 指示游戏启动时玩家的出生位置,如果没有APlayerStart,则玩家默认在关卡的(0,0,0)位置出生,
其RootComponent = UCapsuleComponent;

AStaticMeshActor:场景中一个静态网格的实例,没有动画,把一个静态网格资源直接拖到关卡中就会自动转换成一个StaticMeshActors,
其RootComponent = UStaticMeshComponent

ACameraActor:一般放置在场景中作为一个相机ViewTarget来切换相机视角的对象,
其RootComponent = USceneComponent,USceneComponent下面附加了UCameraComponent

ATriggerBase:触发器对象,一般用于与其他对象交互时触发事件,
其RootComponent = UShapeComponent

AAIController:用于AI控制的Pawn的控制器

APlayerController:玩家控制Pawn的控制器

ABrush:其RootComponent = UBrushComponent;

Mobility: Actor的移动性控制,以下为可使用各状态的Actor的类型:
Static           StaticMeshActors,  LightActors   
Stationary       LightActors
Movable          StaticMeshActors, LightActors  

APawn:被玩家或者AI控制的对象的基类,其包含一个UPawnMovementComponent处理移动逻辑,但需要程序员自己创建

ACharacter:具有网格、碰撞、移动逻辑的Pawn
    可以使用CharacterMovementComponent来实现walk, jump, fly, and swim等,
    其RootComponent = UCapsuleComponent,UCapsuleComponent下面附加了USkeletalMeshComponent,
    同时包含一个UCharacterMovementComponent处理ACharacter运动逻辑,并设置了UpdatedComponent
    UCharacterMovementComponent->UpdatedComponent = UCapsuleComponent;

Actor的生命周期

Actor 被实例的三种主要路径
1.从磁盘加载
已位于关卡中的 Actor 使用此路径,如 LoadMap 发生时、或 AddToWorld(从流关卡或子关卡)被调用时。
2.Play in Editor
Actor 却并非从磁盘中加载,而是从编辑器中复制而来。
3.SpawnActor生成Actor实例
具体见:Actor 生命周期

其他

在蓝图中新增了属性或委托,然后在 C++ 中创建了 Actor,则可以在 C++ 中访问该属性并修改该属性或委托,前提是:
该属性是Public或者Serialized的
示例:

先在蓝图中新增属性 MyProperty

在 C++ 中创建 Actor 并修改 MyProperty 属性:
// 获取世界指针
UWorld* World = GetWorld();
// 创建 Actor
AMyActor* MyActor = World->SpawnActor<AMyActor>();
// 修改 MyProperty 属性
MyActor->MyProperty = 100;
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值