UE5【C++】 UPROPERTY和UFUNCTION介绍

18 篇文章 173 订阅 ¥29.90 ¥99.00


UPROPERTY介绍

属性使用标准的C++变星语法声明,前面用UPROPERTY宏来定义属性元数据和变量说明符。UPROPERTY的作用是将变量公开到编辑器或蓝图。

常见属性说明符

  1. VisiableAnyWhere: 如果给一个变量声明了此关键词,那么它会出现在蓝图编辑器的右边和主编辑器上。(只是显示,不能编辑)
  2. VisibleDefaultsOnly: 在主编辑器中不显示,但是在蓝图编辑器中显示(不可编辑),Default默认是蓝图编译器。
  3. EditDefaultsOnly: 在蓝图中可以编辑,但是在主编辑器中不显示所以不可编辑,只在类默认设置中可见。
  4. EditAnywhere: 在主编辑器和蓝图编辑器中都显示并且都可以编辑。
  5. EditInstanceOnly: 在蓝图编辑器中不可修改但是可见,只有当蓝图实例化到场景中点击该组件才会出现相应的设置,实例化之后可以修改。但只能在原型上进行。

使用示例

UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "MyCategory")
int MyInt;

在这个示例中,MyInt 是一个整数类型的属性,它被定义为可以在蓝图编辑器和主编辑器中都被编辑,并且可以在蓝图中被读写。

UFUNCTION介绍

使用 UFUNCTION 宏可以方便地为我们的函数添加元数据和属性,使得它们可以在蓝图中方便地使用和调用。

常见属性说明符

  • BlueprintCallable:此函数可在蓝图或关卡蓝图图表中执行。此函数不对拥有它的对象产生任何影响,可在蓝图或关卡蓝图图表中执行。
  • BlueprintPure:此函数可在蓝图或关卡蓝图图表中执行。此函数不对拥有它的对象产生任何影响,可在蓝图或关卡蓝图图表中执行。
  • BlueprintlmplementableEvent:需要在蓝图里面重载。此函数旨在被蓝图覆盖掉,但是也具有默认原生实现。用于声明名称与主函数相同的附加函数,但是末尾添加了Implementation,是写入代码的位置。如果未找到任何蓝图覆盖,该自动生成的代码将调用Implementation方法。
  • BlueprintReadOnly:蓝图只读
  • BlueprintReadWrite:蓝图可读可写
  • BlueprintNativeEvent:可通过细节(Details) 面板中的按钮在编辑器中的选定实例上调用此函数。
  • CallnEditor:可通过细节(Details) 面板中的按钮在编辑器中的选定实例上调用此函数。
  • ServerClient :表示这个函数是由服务器或客户端调用的。

使用示例

UFUNCTION(BlueprintCallable, Category = "MyCategory")
void MyFunction(int MyInt, FString MyString);

在这个示例中,MyFunction 是一个没有返回值的函数,它被定义为可以在蓝图中被调用,并且属于 MyCategory 类别。这个函数接受两个参数,一个整数类型的参数 MyInt 和一个字符串类型的参数 MyString

  • BlueprintCallable 表示这个函数可以在蓝图中被调用。
  • Category 表示这个函数属于哪个类别,可以在蓝图编辑器中方便地对函数进行分类和查找。

虚幻四种基本继承关系和组件的概念

虚幻引擎中有四种基本的继承关系:ActorPawnCharacterObject。其中,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自身不含变换,因此不带位置、旋转,或缩放。它们依赖于其组件的变换,具体来说是其根组件的变换。

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一碗情深

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值