欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > 虚幻引擎5-Unreal Engine笔记之常用核心类的继承关系

虚幻引擎5-Unreal Engine笔记之常用核心类的继承关系

2025/5/13 17:44:23 来源:https://blog.csdn.net/weixin_43297891/article/details/147878162  浏览:    关键词:虚幻引擎5-Unreal Engine笔记之常用核心类的继承关系

虚幻引擎5-Unreal Engine笔记之常用核心类的继承关系

在这里插入图片描述

code review!

文章目录

  • 虚幻引擎5-Unreal Engine笔记之常用核心类的继承关系
    • 1.UE5中常用核心类的继承关系
      • 1.1.简化版
      • 1.2.plantuml图
      • 1.3.plantuml代码
      • 1.4.关于大写字母`U`和`A`
      • 2.1.组件和类的关系,组件也是类吗?
      • 2.1. 类是什么?
      • 2.2. 组件是什么?
      • 2.3. 组件和类的关系
      • 2.4. UE中的典型结构
      • 2.5. 总结一句话
    • 3.这是组件还是类?
    • 4.关卡蓝图是一个类吗?
      • 4.1. 关卡蓝图是不是类?
        • 4.1.2.关卡蓝图是什么?
        • 4.1.3.普通蓝图类是什么?
      • 4.2. 为什么关卡蓝图不是“类”?
      • 4.3. 技术上关卡蓝图的底层
    • 5.Actor和SceneComponent的关系
    • 5.1.Actor是什么?
    • 5.2.SceneComponent是什么?
    • 5.3.两者的关系
    • 5.4.简单举例
    • 5.5.简要总结
    • 6.SceneComponent是组件的其中一种组件还是说组件就是SceneComponent?
      • 6.1.组件(Component)是什么?
      • 6.2.SceneComponent是组件的一种
      • 6.3.组件的分类关系图
      • 6.4.举例说明
      • 6.5.结论
    • 7.UE5编辑器中的内容浏览器中的Class可以是些什么?
      • 7.1.Class 在内容浏览器中的含义
      • 7.2.主要的 Class 资产类型
        • 7.2.1.蓝图类(Blueprint Class)
        • 7.2.2.数据资产(Data Asset)
        • 7.2.3.蓝图接口(Blueprint Interface)
        • 7.2.4.枚举(Enum)/ 结构体(Struct)
        • 7.2.5.C++ Class(仅显示引用)
        • 7.2.6.其他类资产
      • 7.3.内容浏览器中的Class资产用途
      • 7.4.图示总结
      • 7.5.补充说明
    • 8.UE5编辑器中内容浏览器中的内容可能是SceneComponent吗?

1.UE5中常用核心类的继承关系

1.1.简化版

在这里插入图片描述

1.2.plantuml图

在这里插入图片描述

1.3.plantuml代码

@startuml
skin rose' 基础对象
class UObject' Actor体系
class AActor
UObject <|-- AActorclass APawn
AActor <|-- APawnclass ACharacter
APawn <|-- ACharacterclass AController
AActor <|-- AControllerclass APlayerController
AController <|-- APlayerControllerclass AAIController
AController <|-- AAIControllerclass AGamemodeBase
AActor <|-- AGamemodeBaseclass AGamemode
AGamemodeBase <|-- AGamemodeclass AGameStateBase
AActor <|-- AGameStateBaseclass AGameState
AGameStateBase <|-- AGameStateclass APlayerState
AActor <|-- APlayerStateclass ASpectatorPawn
AActor <|-- ASpectatorPawnclass AStaticMeshActor
AActor <|-- AStaticMeshActorclass ALight
AActor <|-- ALightclass ADirectionalLight
ALight <|-- ADirectionalLightclass APointLight
ALight <|-- APointLightclass ASpotLight
ALight <|-- ASpotLightclass ACameraActor
AActor <|-- ACameraActor' 组件体系
class UComponent
UObject <|-- UComponentclass USceneComponent
UComponent <|-- USceneComponentclass UPrimitiveComponent
USceneComponent <|-- UPrimitiveComponentclass UMeshComponent
UPrimitiveComponent <|-- UMeshComponentclass UStaticMeshComponent
UMeshComponent <|-- UStaticMeshComponentclass USkeletalMeshComponent
UMeshComponent <|-- USkeletalMeshComponentclass UShapeComponent
UPrimitiveComponent <|-- UShapeComponentclass UActorComponent
UComponent <|-- UActorComponentclass UMovementComponent
UActorComponent <|-- UMovementComponentclass UCharacterMovementComponent
UMovementComponent <|-- UCharacterMovementComponentclass UAudioComponent
UActorComponent <|-- UAudioComponent
@enduml

1.4.关于大写字母UA

在这里插入图片描述

在这里插入图片描述

2.1.组件和类的关系,组件也是类吗?

2.1. 类是什么?

  • (Class)是代码层面的概念,是某种对象的“蓝图”或“模板”。
  • 在C++或蓝图里定义的AActorUStaticMeshComponentUUserWidget等,都是
  • 类描述了对象的属性和行为,但本身不是“实体”。

2.2. 组件是什么?

  • 组件(Component)是指挂在Actor上的功能模块,比如碰撞体、网格、灯光、声音等。
  • 组件本质上是类的实例对象。比如UStaticMeshComponent是“网格组件”这个类,在关卡中创建一个“汽车Actor”,可以给它添加一个网格组件,这个组件其实就是UStaticMeshComponent类的一个实例。
  • 组件不能单独存在,只能附着在Actor(或其它组件)上。

2.3. 组件和类的关系

概念解释关系说明
代码中的一个模板,比如UStaticMeshComponent定义了组件的属性和功能
组件类的一个实例,比如“角色的Mesh组件”是类实例化出来的具体对象

举个现实例子:

  • “汽车”是类(模板),
  • “汽车”是类的一个实例(对象),
  • “后视镜”是组件类(后视镜的模板),
  • “汽车上的后视镜”是后视镜组件类的一个实例(挂在汽车上的后视镜对象)。

2.4. UE中的典型结构

  • Actor 是一个类,在场景里拖一个“Actor”进去,其实是Actor类的一个实例。
  • 组件 也是类,比如UStaticMeshComponent,给Actor添加一个网格组件,就是实例化了UStaticMeshComponent这个类,然后“挂”到了这个Actor身上。

代码层面举例:

// 定义自己的Actor类
class AMyActor : public AActor
{
public:UPROPERTY()UStaticMeshComponent* MeshComp;AMyActor(){MeshComp = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("MeshComp"));RootComponent = MeshComp;}
};
  • 这里UStaticMeshComponent是类,MeshComp是这个类的实例,被挂到AMyActor上。

2.5. 总结一句话

组件是类的实例,是Actor的“零部件”。组件的类型由组件的类决定。

3.这是组件还是类?

在这里插入图片描述

截图中黄色框选部分(比如 Audio、Point Light、Skeletal Mesh、Static Mesh、Sphere、Cube、Plane 等)在编辑器里叫“组件”,但本质上

  • 它们是“组件类型”或“组件类”的名字,代表可以往当前Actor里添加这类组件的实例。
  • 当点击它们,比如“Static Mesh”,就会给Actor添加一个“Static Mesh 组件实例”,这个实例本质上就是 UStaticMeshComponent 类的一个对象。

换句话说

  • 列表里的每一项,比如“Static Mesh”,其实对应一个组件类(比如UStaticMeshComponent)。
  • 但点击添加到Actor后,在Actor身上的就是“组件实例”,即真正的“组件”。

总结

  • 图中是“组件类型选择列表”,每一项是一个组件类。

  • 添加到Actor上的是该类的一个组件实例。

  • 这个列表就像是“零件目录”(比如“轮子”、“车灯”),

  • 点一下,相当于“从工厂拿一个零件(类的新实例)装到的Actor上”。

4.关卡蓝图是一个类吗?

4.1. 关卡蓝图是不是类?

关卡蓝图不是传统意义上的“类”,它和普通的“蓝图类”有本质区别。

4.1.2.关卡蓝图是什么?
  • 关卡蓝图某个具体关卡(Level)唯一对应的脚本,只属于该关卡。
  • 它不能被复用、继承或实例化成多个对象。
  • 它不像普通蓝图(如Actor蓝图、Widget蓝图)那样,是某个类的定义,可以生成无数实例。
4.1.3.普通蓝图类是什么?
  • 比如Actor蓝图,本质是类的定义,可以在关卡里拖很多个实例出来。

4.2. 为什么关卡蓝图不是“类”?

  • 关卡蓝图没有类名,不能像AActor那样被继承或派生。
  • 只服务于当前这个关卡,里面的逻辑只在本关卡运行时才执行。
  • 它的本质更接近于“该关卡的全局事件脚本”或“唯一的控制器”。

4.3. 技术上关卡蓝图的底层

  • 在UE底层,关卡蓝图由引擎自动生成了一个特殊的蓝图类(比如ALevelScriptActor的子类),但无法像普通蓝图那样操作这个类型
  • 在编辑器里看不到“关卡蓝图类”,也无法基于它创建多个对象。
  • 每个关卡只有一个关卡蓝图

关卡蓝图不是普通意义上的“类”,而是关卡的唯一全局脚本。它本身不是可以复用或实例化的类。

  • Actor蓝图、Pawn蓝图、Widget蓝图等,是“类”,可以复用、继承、实例化。
  • 关卡蓝图,只有“单例”,只属于当前关卡,不能像类一样被复用。

如果想让一段逻辑可以被多个关卡或多个对象复用,应该写成Actor蓝图或自定义C++类,而不是关卡蓝图。

5.Actor和SceneComponent的关系

5.1.Actor是什么?

  • Actor 是虚幻引擎中可放置到关卡(Level)中的对象的基类。
  • 你可以把Actor理解为**“游戏世界中的实体”**,比如玩家角色、道具、灯光、敌人等。
  • Actor本身并没有可见的形状或位置,但它管理和组织一组组件

5.2.SceneComponent是什么?

  • SceneComponent 是一种特殊的组件,具有**空间变换(位置、旋转、缩放)**的能力。
  • 也就是说,SceneComponent可以有自己的坐标系,可以附加到其他SceneComponent上形成层级结构。
  • 典型的SceneComponent有:StaticMeshComponent(静态网格体)、CameraComponentSpringArmComponent等。

5.3.两者的关系

  • 每个Actor都可以包含一个或多个Component(组件),其中可以包含多个SceneComponent。
  • SceneComponent提供了空间(Transform)信息,这样Actor就能“存在”在世界的某个位置。
  • 通常,Actor会有一个RootComponent(根组件),而RootComponent通常是一个SceneComponent。所有其他组件都可以附加到RootComponent上,形成一个组件树。

示意关系图

Actor
│
├── SceneComponent (RootComponent)
│    ├── SceneComponent (子组件)
│    │    └── SceneComponent (孙组件)
│    └── StaticMeshComponent
│
└── 其它非SceneComponent(如AudioComponent等)
  • Actor 本身没有位置,RootComponent(通常是SceneComponent)决定了Actor的位置。

5.4.简单举例

例如,你有一个角色Actor:

  • MyCharacterActor
    • RootComponent: CapsuleComponent(SceneComponent)
      • MeshComponent(角色网格,附加在RootComponent下)
      • CameraComponent(摄像机,附加在RootComponent下)

5.5.简要总结

  • Actor是容器,负责管理生命周期、网络同步、交互等。
  • SceneComponent是可以被附加和定位的组件,决定Actor在世界中的空间信息。
  • Actor必须有一个SceneComponent作为RootComponent,才能具有位置和旋转。

6.SceneComponent是组件的其中一种组件还是说组件就是SceneComponent?

SceneComponent 只是组件(Component) 的一种,不是所有组件都是 SceneComponent

6.1.组件(Component)是什么?

  • 组件(UActorComponent)是可以附加到Actor上的功能模块,用来为Actor添加功能或行为。
  • 组件有很多种,不一定都有空间(Transform)属性。

6.2.SceneComponent是组件的一种

  • SceneComponentUSceneComponent)继承自UActorComponent,是具有空间变换(位置、旋转、缩放)能力的组件
  • 只有SceneComponent及其子类可以形成层级结构,被附加到Actor的RootComponent上。

6.3.组件的分类关系图

UActorComponent
│
├── USceneComponent   ← 有空间信息(位置、旋转等)
│   ├── UStaticMeshComponent
│   ├── USkeletalMeshComponent
│   ├── UCameraComponent
│   └── ...(其他有空间信息的组件)
│
└── UAudioComponent   ← 没有空间(直接继承自UActorComponent)
└── UProjectileMovementComponent
└── UActorComponent   ← 你自定义的功能组件

6.4.举例说明

  • SceneComponent 子类:

    • UStaticMeshComponent(静态网格体)
    • UCameraComponent(摄像机)
    • USpringArmComponent(弹簧臂)
    • 这些都可以拥有位置、旋转和缩放,并能形成父子层级。
  • 非 SceneComponent 的组件:

    • UAudioComponent(音频组件)
    • UMovementComponent(移动组件)
    • 这些没有空间(Transform)属性,不能组成空间层级,只是为Actor添加额外功能。

6.5.结论

  • SceneComponent 是组件的一种,专门用于有空间变换需求的情况。

  • 不是所有组件都是 SceneComponent。

  • 组件体系结构如下:

    • UActorComponent(基础组件)
      • USceneComponent(有空间信息的组件)
        • 例如:UStaticMeshComponentUCameraComponent
      • 其他ActorComponent(没有空间信息的组件)
        • 例如:UAudioComponentUMovementComponent

7.UE5编辑器中的内容浏览器中的Class可以是些什么?

Unreal Engine 5 编辑器的内容浏览器(Content Browser)中,Class 指的是资产(Asset)的一种类型,也就是类资产。这些类资产主要用于蓝图(Blueprint)、数据资产(Data Asset)、C++类引用等多种用途。下面详细讲解一下:

7.1.Class 在内容浏览器中的含义

  • 在内容浏览器中,Class 通常指的是UClass,也就是 Unreal 对象系统中的“类”。
  • 当右键选择“添加资产”时,选项里有“蓝图类(Blueprint Class)”、“数据资产(Data Asset)”等。
  • 可以直接在内容浏览器中看到和管理各种类相关的资产,比如蓝图类、数据资产、接口等。

7.2.主要的 Class 资产类型

7.2.1.蓝图类(Blueprint Class)
  • 最常见的 Class 资产。
  • 包括继承自 Actor、Pawn、Character、Component、Widget、GameMode 等不同父类的蓝图。
  • 用于可视化编写和扩展逻辑。
7.2.2.数据资产(Data Asset)
  • 继承自 UDataAsset 或其它数据驱动的类。
  • 用于存储结构化数据,例如怪物参数、配置表、对话文本等。
7.2.3.蓝图接口(Blueprint Interface)
  • 定义一组可以被实现的函数,但不包含实际实现。
  • 用于不同蓝图之间的通信。
7.2.4.枚举(Enum)/ 结构体(Struct)
  • 虽然严格来说不是“Class”,但在内容浏览器中可以创建并管理。
  • 用于定义数据类型。
7.2.5.C++ Class(仅显示引用)
  • 如果用C++扩展项目,内容浏览器中可以看到C++类的引用,但不能直接编辑C++类。
  • 可以右键“创建蓝图类”继承C++类。
7.2.6.其他类资产
  • Animation Blueprint(动画蓝图类)
  • Behavior Tree(行为树类)
  • Widget Blueprint(UI小部件类)
  • Material Function、Material Parameter Collection(材质相关类)
  • 等等

7.3.内容浏览器中的Class资产用途

  1. 作为对象模板:比如蓝图类就是Actor的模板,可以拖到场景中生成实例。
  2. 供运行时动态加载与引用:比如通过Class Reference变量,动态生成新对象。
  3. 数据驱动:数据资产/DataTable用于配置和调优游戏内容。

7.4.图示总结

内容浏览器中的Class资产(常见类型)- Blueprint Class(蓝图类)
- Data Asset(数据资产)
- Blueprint Interface(蓝图接口)
- Enum / Struct(枚举/结构体)
- Animation Blueprint(动画蓝图)
- Behavior Tree(行为树)
- Widget Blueprint(UI蓝图)
- Material Function / Collection(材质类资产)
- C++ Class(仅引用,不可编辑)

7.5.补充说明

  • 在内容浏览器中,Class资产不是运行时实例,而是可以被实例化的“模板”或“配置”。
  • 可以通过右键菜单创建新的Class资产,或者对它们进行组织、继承和管理。

8.UE5编辑器中内容浏览器中的内容可能是SceneComponent吗?

一般情况下,SceneComponent 不是内容浏览器里的“Class资产”。

详细解释

1.内容浏览器中的Class资产是什么?

  • 内容浏览器里的“Class资产”,通常指的是可以作为资产被保存和引用的类,例如“蓝图类(Blueprint Class)”、“数据资产(Data Asset)”、“蓝图接口(Blueprint Interface)”等。
  • 这些资产可以在内容浏览器中单独管理、创建、编辑和引用

2.SceneComponent是什么?

  • SceneComponent 是一个组件类,通常作为Actor蓝图或C++类的组件成员存在。
  • 不是一个可以单独作为资产保存或拖进场景的对象

3.你能在内容浏览器中看到SceneComponent吗?

  • 不能:你无法直接在内容浏览器中创建一个“SceneComponent资产”
  • 你可以在内容浏览器中创建一个Actor蓝图类(比如MyActor),然后在蓝图编辑器里给这个Actor添加SceneComponent
  • 但SceneComponent本身不会作为独立的Class资产出现在内容浏览器里。

4.例外情况

  • 可以创建“继承自SceneComponent的蓝图类”,比如你新建一个“继承自SceneComponent的蓝图”,这时这个蓝图就是一个Class资产。
  • 但这种蓝图不能直接拖进关卡作为Actor使用,只能作为组件被添加到别的Actor里。
  • 所以,内容浏览器里的Class资产可以是“SceneComponent的子类蓝图”,但它本身不是可以直接用来实例化到场景里的资产。

总结

  • 内容浏览器里的Class资产,大多数是Actor类及其子类,当然也可以新建“继承自SceneComponent的蓝图类”。
  • SceneComponent本身作为资产没有用途,但你可以在内容浏览器里看到“继承自SceneComponent的蓝图类”。
  • 这些组件蓝图只能作为组件被添加到别的Actor里,而不是直接出现在场景中。

典型用法举例

  • 在内容浏览器中创建一个MyCustomComponent(继承自SceneComponent的蓝图类)。
  • 在你自己的Actor蓝图中,添加组件,选择你刚刚创建的MyCustomComponent
  • 这样就能复用你自定义的SceneComponent逻辑。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词