UE中UPROPERTY部分说明符

本文介绍了在UE的C++编程中常用的属性修饰符,包括如何使用这些修饰符来控制属性的可见性和可编辑性,如 EditAnywhere、BlueprintReadWrite 和 Transient 等,帮助开发者更好地管理和调整游戏中的各种参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在UE的C++编程中,通常使用UPROPERTY(EditAnywhere)宏将属性公开给UE编辑器,使得可以在UE编辑器中对这些属性进行修改,避免了多次编译的繁琐,这个宏也有一些说明符,不同的含义

  • EditAnywhere
    • 括号中必须有这个说明符方可公开给编辑器并且可编辑该属性
    • UPROPERTY(EditAnywhere)
      int32 TotalDamage;
  • BlueprintReadWrite
    • 带有Blueprint前缀的,是将该属性公开给蓝图,可在蓝图图表中进行读写
    • UPROPERTY(EditAnywhere, BlueprintReadWrite)
      int32 TotalDamage;
  • BlueprintReadOnly
    • 跟上面可读写有区别,仅仅是可读,不可在蓝图图表中进行修改,相当于常量
  • VisibleAnywhere
    • 说明该属性被标记可见,但不可编辑
  • Transient
    • 说明该属性不会保存或者从磁盘加载,相当于该值是其他值通过计算而得,没有存储的必要
    • UPROPERTY(EditAnywhere, VisibleAnywhere, Transient, Category = "伤害")
      int32 TotalDamage;

  • Category
    • 分类,希望该属性出现在某个部分中,可以添加此说明符,如下,TotalDamage就会出现在“伤害”类别下面
    • UPROPERTY(EditAnywhere, Category = "伤害")
      int32 TotalDamage;

### Unreal Engine C++ 开发教程与示例代码 #### 创建和管理类 在Unreal Engine中,使用C++创建新类的过程涉及多个方面。为了有效地利用这一强大的工具集,了解如何定义新的Actor、Component以及其他核心对象至关重要[^1]。 对于初学者来说,可以从官方文档入手,这里不仅提供了详细的说明还附带了大量的实例来帮助理解概念。例如,在学习过程中可以通过构建自定义的`AActor`派生类来熟悉基本操作: ```cpp #include "CoreMinimal.h" #include "GameFramework/Actor.h" #include "MyCustomActor.generated.h" UCLASS() class MYPROJECT_API AMyCustomActor : public AActor { GENERATED_BODY() public: // 构造函数初始化默认属性 AMyCustomActor(); protected: virtual void BeginPlay() override; public: virtual void Tick(float DeltaTime) override; }; ``` 这段代码展示了如何声明一个新的Actor子类,并设置了一些基础方法重载以便于扩展行为逻辑。 #### 继承机制的应用 继承是面向对象编程中的一个重要特性之一,在Unreal Engine里同样得到了广泛应用。通过让一个类从另一个现有类那里获得成员变量和函数的能力,可以极大地提高代码复用性和维护效率。比如下面的例子就展示了一个简单的组件化设计模式——即把特定功能封装成独立部件再组合到一起形成复杂实体的方式: ```cpp // 定义父级基底组件 UCLASS(ClassGroup=(Custom), meta=(BlueprintSpawnableComponent)) class UBaseComponent : public UActorComponent { GENERATED_BODY() }; // 子类具体实现细节... UCLASS(BlueprintType) class USpecificComponent : public UBaseComponent { GENERATED_BODY() private: float SomeVariable; // 自定义字段 public: void DoSomething(); // 新增的方法接口 }; ``` 此部分强调了怎样基于已有结构快速搭建起具有相似特性的新型构件,同时也便于后期修改调整而不会影响其他关联模块的工作状态。 #### 蓝图与原生C++交互 除了纯编码工作外,很多时候还需要考虑与其他可视化编辑器(如蓝图系统)之间建立联系的可能性。这通常涉及到暴露某些公共API给外部调用者或是反过来读取由后者设定好的参数值等动作。为此目的所采取的技术手段主要包括但不限于宏定义(`UPROPERTY`, `UFUNCTION`)以及特殊标记符(`BlueprintCallable`, `BlueprintNativeEvent`)等形式。 举个例子说,如果希望某个属性能够在蓝图图表内被直接看到并操控,则只需简单加上相应修饰即可达成目标: ```cpp UCLASS() class AMovablePlatform : public AActor { GENERATED_BODY() public: UPROPERTY(EditAnywhere, BlueprintReadWrite, Category="Movement Settings") FVector MoveDirection; UFUNCTION(BlueprintCallable, Category="Action") void StartMoving(); ... }; ``` 上述片段表明了如何使内部数据对外界开放访问权限的同时保持良好的用户体验界面友好度;另一方面也证明了两者间确实存在紧密合作的空间值得深入探索研究下去。 #### 利用GEngine简化开发流程 值得一提的是,`GEngine`作为全局静态指针提供了一系列便捷的功能入口供开发者随时查阅当前运行环境下的各种信息。合理运用它可以有效减少重复劳动量并加快问题排查速度,不过需要注意过度依赖可能会带来不必要的风险因此建议仅限必要场合下谨慎采用[^3]。 例如获取屏幕尺寸或显示消息框这样的常用需求都可以借助它轻松完成: ```cpp if (GEngine != nullptr){ GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, TEXT("Hello World!")); } ``` 该段落介绍了有关`GEngine`的一些基础知识及其应用场景案例分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值