UE4入门-常见的宏-UPROPERTY

来源:互联网 发布:安安软件站爆枪英雄 编辑:程序博客网 时间:2024/03/29 18:01

UPROPERTY 用途广泛。它允许变量被复制、被序列化,并可从蓝图中进行访问。垃圾回收器还使用它们来追踪对 UObject 的引用数。


本文只对部分常用的修饰属性做用法说明,高端的后面接触到了再补充,大佬勿喷

Unreal Engine version == 4.18.0 ; Virtual Studio 2017 update 15.4.2


  • 简单的举个例子说明UPROPERTY宏的基本用法:
// Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h"#include "GameFramework/Actor.h"#include "ActorTest.generated.h"UCLASS()class UNREALCPPLEARN_API AActorTest : public AActor{    GENERATED_BODY()public:     // Sets default values for this actor's properties    AActorTest();    void PostInitProperties() override;protected:    // Called when the game starts or when spawned    virtual void BeginPlay() override;public:     // Called every frame    virtual void Tick(float DeltaTime) override;public:    UPROPERTY(VisibleAnywhere, Category = "Snowing")        int32 VoidParam;    UPROPERTY(VisibleAnywhere, Category = "Snowing|Visible")        FString VisibleAnywhereParam;    // 没试出来有毛用    UPROPERTY(VisibleInstanceOnly, Category = "Snowing|Visible")        FString VisibleInstanceOnlyParam;    UPROPERTY(EditAnywhere, Category = "Snowing|Edit")        float EditAnywhereParam;    // 没试出来有毛用    UPROPERTY(EditInstanceOnly, Category = "Snowing|Edit")        float EditInstanceOnlyParam;    UPROPERTY(BlueprintReadOnly, Category = "Snowing|Blueprint")        float BlueprintReadOnlyParam;    UPROPERTY(BlueprintReadWrite, Category = "Snowing|Blueprint")        float BlueprintReadWriteParam;};

UPROPERTY宏的修饰符说明信息:

  • AdvancedDisplay
    属性在“详细信息”面板的高级下拉列表中

    UPROPERTY(VisibleAnywhere, AdvancedDisplay, Category = "Snowing")    FString AdvancedDisplayParam;

     属性在“详细信息”面板的高级下拉列表中

  • AssetRegistrySearchable
    AssetRegistrySearchable关键字表明此属性及其值将会为任意将其作为成员变量而包含的资源类示例被自动添加到资源注册中。不可用于结构体属性或参数

  • BlueprintAssignable
    仅能用于Multicast代理。应显示该属性,以供在蓝图中分配

  • BlueprintCallable
    仅能用于Multicast代理。应显示该属性,以在蓝图代码中调用

  • BluprintReadOnly
    设置属性为蓝图只读。会在蓝图脚本中为被修饰的变量提供 Get 方法,没有 Set 方法

    UPROPERTY(BlueprintReadOnly, Category = "Snowing|Blueprint")    float BlueprintReadOnlyParam;

    这里写图片描述

  • BlueprintReadWrite
    设置属性为蓝图读写。会在蓝图脚本中为被修饰的变量提供 Get 和 Set 方法

    UPROPERTY(BlueprintReadWrite, Category = "Snowing|Blueprint")    float BlueprintReadWriteParam;

    这里写图片描述

  • BlueprintGetter / BlueprintSetter
    BlueprintGetter属性指定一个自定义存取器函数。如果这个属性没有被标记为BlueprintSetter或者BlueprintReadWrite,那么它就是隐式的BlueprintReadOnly。用法:BlueprintGetter = GetterFunctionName()

    BlueprintSetter属性有一个自定义的mutator函数,并用BlueprintReadWrite隐式标记。注意,必须指定mutator函数,用法BlueprintSetter = SetterFunctionName

    public: UFUNCTION(BlueprintGetter)    virtual float GetBlueprintGetterAndSetterParam() const     {        return BlueprintGetterAndSetterParam * 2.f;     }UFUNCTION(BlueprintSetter)    virtual void SetBlueprintGetterAndSetterParam(float InFloat)    {        BlueprintGetterAndSetterParam += 100.f;    }UPROPERTY(EditAnywhere, BlueprintGetter = GetBlueprintGetterAndSetterParam, BlueprintSetter = SetBlueprintGetterAndSetterParam, Category = "Snowing|Blueprint")    float BlueprintGetterAndSetterParam;

    这里写图片描述

    需要注意的是,不能把Setter函数显式声明为 inline ,否则会报错

  • Category = TopCategory|SubCategory|…
    指定在Blueprint编辑工具中显示的属性的类别。使用|定义嵌套层级

    UPROPERTY(VisibleAnywhere, Category = "Snowing|Visible")    FString VisibleAnywhereParam;// 木有毛用UPROPERTY(VisibleInstanceOnly, Category = "Snowing|Visible")    FString VisibleInstanceOnlyParam;UPROPERTY(EditAnywhere, Category = "Snowing|Edit")    float EditAnywhereParam;// 木有毛用UPROPERTY(EditInstanceOnly, Category = "Snowing|Edit")    float EditInstanceOnlyParam;

    这里写图片描述

  • Config
    这个变量将被配置。当前值可以保存到与类关联的.ini文件中,并在创建时加载。无法在默认属性中给出值。意味着ReadOnly

  • Const
    这个变量是常量,应该导出为常量。在编辑器中const属性将是不可修改的

  • DuplicateTransient
    表示变量值应在任意类型的重复过程中(复制/粘贴, 二进制文件复制等)被重置为类默认值

  • EditAntwhere / VisibleAnywhere
    EditAntwhere 表示此属性可以通过属性窗口,原型和实例进行编辑(原型指的是类模板,实例指的是具体的对象实例)

    VisibleAnywhere 指示此属性在所有属性窗口中都可见,但无法编辑。这个标签与“Edit”标签不兼容

    UPROPERTY(VisibleAnywhere, Category = "Snowing|Visible")    FString VisibleAnywhereParam;UPROPERTY(EditAnywhere, Category = "Snowing|Edit")    float EditAnywhereParam;

    这里写图片描述

  • EditDefaultsOnly / VisibleDefaultOnly
    EditDefaultsOnly 表示该属性可以由属性窗口编辑,但只能在原型上编辑。该操作符与“Visible”标签不兼容

    VisibleDefaultOnly 表示此属性仅在原型的属性窗口中可见,并且不能被编辑。这个标签与“Edit”标签不兼容

    UPROPERTY(VisibleDefaultsOnly, Category = "Snowing|Visible")    FText VisibleDefaultOnlyParam;UPROPERTY(EditDefaultsOnly, Category = "Snowing|Edit")    FText EditDefaultsOnlyParam;

    在蓝图类编辑面板中可以显示 DefaultOnly 修饰的属性

    这里写图片描述

    在场景中的实例对象属性面板不会显示 DefaultOnly 修饰的属性

    这里写图片描述

  • EditInstanceOnly / VisibleInstanceOnly
    EditInstanceOnly 表示这个属性可以被属性窗口编辑,但只能在实例上编辑,而不能在原型上编辑。该操作符与“Visible”标签不兼容

    VisibleInstanceOnly 表示此属性仅在实例的属性窗口中可见,而不在原型中显示,且无法编辑。这个标签与“编辑”标签不兼容

    文档是这么写的,本小白是真没试出来毛效果,暂时认为与 Anywhere 类型的修饰属性效果一样

  • EditFixedSize
    只对动态数组有用。这将防止用户通过虚幻编辑器属性窗口更改数组的长度

  • EditInline
    允许用户编辑虚幻编辑器属性检查器中由该变量引用的对象的属性(仅用于对象引用,包括Object引用数组)

  • Export
    仅适用于对象属性 (或对象数组)。指示在复制对象 (用于复制/粘贴) 或导出到 T3D 时, 应将分配给此属性的对象整体导出为对象块, 而不是仅输出对象引用本身

  • GlobleConfig
    像Config一样工作,只是你不能在子类中覆盖它。无法在默认属性中给出值。意味着ReadOnly

  • Instanced
    对象 (UCLASS) 属性。创建此类的实例时, 将为默认情况下分配给该变量的对象提供一个唯一的副本。用于在类默认属性中定义的实例子。类似 EditInline 和 Export 修饰符

  • Interp
    表示该值可由Matinee的浮点或向量属性轨迹来随时间驱动

  • Localized
    此变量的值将定义本地值。最常用于字符串。ReadOnly

  • Native
    C++代码负责对其序列化并显示给GC

  • NoClear
    防止该对象引用在编辑器中被设置为None.隐藏编辑器的清除(以及浏览)按钮

  • NoExport
    仅对native类有效。此变量不应被包含在自动生成的类声明中

  • NonPIEDuplicateTeansient
    在复制过程中,该属性将被重置为默认值,除非复制PIE会话

  • NonTransactional
    表示对此变量值所做的更改将不会包含在编辑器的撤销/重做历史记录中

  • NotReplicated
    跳过复制。这只适用于服务请求函数中的结构成员和参数

  • Ref
    该值在函数调用后被复制出来。仅在函数参数声明中有效

  • Replicated
    变量应通过网络进行复制

  • ReplicatedUsing = FunctionName
    ReplicatedUsing标签指定了一个回调函数,当通过网络更新变量时执行回调函数

  • RepRetry
    仅用于结构体属性。如无法被完全发送,请重试复制此属性(例如,对象引用尚无法通过节点网络来进行序列化)。对于简单引用来说,这是一个默认值,但对结构体来说,由于带宽消耗,很多情况下我们不需要。所以除非此标识被定义,否则其会被禁用

  • SaveGame
    此说明符是一种简单的方法,可以在属性级别为检查点/保存系统显式包含字段。该标志应设置在所有意图成为已保存游戏一部分的字段上,然后可使用代理归档程序对其进行读取/写入

  • SerializeText
    应将Native属性序列化为文本(ImportText,ExportText)

  • SkipSerialization
    该属性不会被序列化,但仍然可以导出为文本格式(例如复制/粘贴)

  • SimpleDisplay
    “Visible”或“Edit”属性显示在“详细信息”面板中,不显示“高级”部分即可见

  • TextExportTransient
    此属性不会被导出为文本格式(例如复制/粘贴)

  • Transient
    属性是暂时的,这意味着它不会被保存或加载。以这种方式标记的属性在加载时将被填满

原创粉丝点击