文章目录
- UPROPERTY介绍
- 常见属性说明符
- 使用示例
- UFUNCTION介绍
- 常见属性说明符
- 使用示例
- 虚幻四种基本继承关系和组件的概念
- Actor和组件的关系
- RootComponent的作用
- 组件的分类
- 组件的使用
- UActorComponent的作用
- Ticking
- USceneComponent
- UPrimitiveComponent
UPROPERTY介绍
属性使用标准的C++变星语法声明,前面用UPROPERTY宏来定义属性元数据和变量说明符。UPROPERTY的作用是将变量公开到编辑器或蓝图。
常见属性说明符
VisiableAnyWhere
: 如果给一个变量声明了此关键词,那么它会出现在蓝图编辑器的右边和主编辑器上。(只是显示,不能编辑)VisibleDefaultsOnly
: 在主编辑器中不显示,但是在蓝图编辑器中显示(不可编辑),Default默认是蓝图编译器。EditDefaultsOnly
: 在蓝图中可以编辑,但是在主编辑器中不显示所以不可编辑,只在类默认设置中可见。EditAnywhere
: 在主编辑器和蓝图编辑器中都显示并且都可以编辑。EditInstanceOnly
: 在蓝图编辑器中不可修改但是可见,只有当蓝图实例化到场景中点击该组件才会出现相应的设置,实例化之后可以修改。但只能在原型上进行。
使用示例
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "MyCategory")
int MyInt;
在这个示例中,MyInt
是一个整数类型的属性,它被定义为可以在蓝图编辑器和主编辑器中都被编辑,并且可以在蓝图中被读写。
UFUNCTION介绍
使用 UFUNCTION 宏可以方便地为我们的函数添加元数据和属性,使得它们可以在蓝图中方便地使用和调用。
常见属性说明符
BlueprintCallable
:此函数可在蓝图或关卡蓝图图表中执行。此函数不对拥有它的对象产生任何影响,可在蓝图或关卡蓝图图表中执行。BlueprintPure
:此函数可在蓝图或关卡蓝图图表中执行。此函数不对拥有它的对象产生任何影响,可在蓝图或关卡蓝图图表中执行。BlueprintlmplementableEvent
:需要在蓝图里面重载。此函数旨在被蓝图覆盖掉,但是也具有默认原生实现。用于声明名称与主函数相同的附加函数,但是末尾添加了Implementation,是写入代码的位置。如果未找到任何蓝图覆盖,该自动生成的代码将调用Implementation方法。BlueprintReadOnly
:蓝图只读BlueprintReadWrite
:蓝图可读可写BlueprintNativeEvent
:可通过细节(Details) 面板中的按钮在编辑器中的选定实例上调用此函数。CallnEditor
:可通过细节(Details) 面板中的按钮在编辑器中的选定实例上调用此函数。Server
和Client
:表示这个函数是由服务器或客户端调用的。
使用示例
UFUNCTION(BlueprintCallable, Category = "MyCategory")
void MyFunction(int MyInt, FString MyString);
在这个示例中,MyFunction
是一个没有返回值的函数,它被定义为可以在蓝图中被调用,并且属于 MyCategory
类别。这个函数接受两个参数,一个整数类型的参数 MyInt
和一个字符串类型的参数 MyString
。
BlueprintCallable
表示这个函数可以在蓝图中被调用。Category
表示这个函数属于哪个类别,可以在蓝图编辑器中方便地对函数进行分类和查找。
虚幻四种基本继承关系和组件的概念
虚幻引擎中有四种基本的继承关系:Actor
、Pawn
、Character
和 Object
。其中,Actor 是最基本的继承关系,其他三种都是从 Actor 派生而来的。
Actor和组件的关系
组件可以附件到Actor身上,但是不能独立出现在场景中。Actor好比是人,组件好比是衣服,人可以出去逛街,衣服不行。
RootComponent的作用
每个 Actor 都必须有一个 RootComponent,它是所有其他组件的父组件。如果我们想要移动 Actor 或者旋转它,那么需要移动或旋转 RootComponent。
组件的分类
虚幻引擎中的组件可以分为两种:Actor Component 和 Scene Component。Actor Component 是一种可以附加到 Actor 上的组件,而 Scene Component 则只能依附于其他组件而不能单独放置到场景中。
组件的使用
组件可以在蓝图或 C++ 代码中创建和使用。如果我们想要创建一个新的组件,可以右键点击场景中的 Actor 并选择“Add Component”选项。然后在弹出的菜单中选择要创建的组件类型。
UActorComponent的作用
这是基础组件。其可作为Actor的一部分被包含。如果需要,其可进行Tick 。
ActorComponents与特定的Actor相关联,但不存在于场景中的任意特定位置。它们通常用于概念上的功能,如AI或解译玩家输入。
Actor Component (UActorComponent类) 有自己的行为,通常负责在许多类型Actor之间共享的功能,例如,提供视觉网格体、粒子效果、摄像机视角和物理互动。Actor通常提供与其游戏总体角色有关的高级目标,而Actor Component通常执行用于支持这些更高级目标的单独任务。
组件也可以与其他组件相连接,或者可以成为Actor的根组件。一个组件只能连接到一个父组件或Actor,但可以连接多个子Actor。我们可以想象一个组件树。子组件的位置、旋转和缩放相对于其父组件或Actor。
Ticking
在所属Actor的Tick()过程中执行Tick函数。(在编写自己的 Tick函数时,必须确保调用Super::Tick)
USceneComponent
SceneComponents是拥有变换的ActorComponents。变换是场景中的位置,由位置、旋转和缩放定义。
SceneComponents能以层级的方式相互附加。Actor的位置、旋转和缩放取自位于层级根部的SceneComponent。
UPrimitiveComponent
PrimitiveComponent是拥有一类图像表达(如网格体或粒子系统)SceneComponent。许多物理和碰撞设置均在此处。
Actor支持拥有一个SceneComponent的层级。每个Actor也拥有一个RootComponent属性,将指定作为Actor根的组件。
Actor自身不含变换,因此不带位置、旋转,或缩放。它们依赖于其组件的变换,具体来说是其根组件的变换。