轉載自:https://www.jianshu.com/p/a86d567be8c3
參考:https://blog.csdn.net/claien/article/details/49358697
属性变量使用标准C ++变量语法声明,通过使用UPROPERTY宏来进行属性声明标记。
UPROPERTY([specifier, specifier, ...], [meta(key=value, key=value, ...)])
Type VariableName;
在声明属性时,声明上可添加修饰符以控制引擎和编辑器针对不属性的展现。
定义属性的分类。
UPROPERTY(Category=CategoryName)
Type VariableName;
UPROPERTY(Category="CategoryName|SubCategoryName")
Type VariableName;
UPROPERTY(EditAnywhere, Category = "MyCategory")
int CategoryNum;
UPROPERTY(EditAnywhere, Category = "MyCategory|SubCategory")
int SubCategoryNum;
1
2
Blueprint~辨析
仅能用于Multicast代理。
应显示该属性,以供在蓝图中分配。
UPROPERTY(BlueprintAssignable)
Type VariableName;
仅能用于Multicast代理。
应显示该属性,以在蓝图代码中调用。
UPROPERTY(BlueprintCallable)
Type VariableName;
这个属性可以通过蓝图读取,但不能修改。
这个操作符与BlueprintReadWrite不兼容。
UPROPERTY(BlueprintReadOnly)
Type VariableName;
此属性可以读取或从蓝图写的。
这个操作符与BlueprintReadOnly不兼容。
UPROPERTY(BlueprintReadWrite)
Type VariableName;
[SpecifiersTest.h]
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FStringDelegate, FString, testStr);
...
UPROPERTY(BlueprintAssignable, Category = "Blueprint")
FStringDelegate WriteToLogDelegate;
UFUNCTION(BlueprintCallable, Category = "Blueprint")
void TestAssignable();
// 还是有点不太懂这种方式实际场景怎么用
UPROPERTY(BlueprintCallable, Category = "Blueprint")
FStringDelegate WriteToLogCall;
UPROPERTY(BlueprintReadOnly, Category = "Blueprint")
int OnlyTime;
UPROPERTY(BlueprintReadWrite, Category = "Blueprint")
int WriteTime;
[SpecifiersTest.cpp]
void ASpecifiersTest::TestAssignable()
{
UE_LOG(SpecifiersTest, Log, TEXT("This is AssignableTest"));
if (GEngine)
GEngine->AddOnScreenDebugMessage(-1, 2.0f, FColor::Red, TEXT("This is AssignableTest!"));
}
1
2
event
test event
play - press w
Edit~辨析
表示该属性可从编辑器内的属性窗口编辑,在原型和实例中。
UPROPERTY(EditAnywhere)
Type VariableName;
表示该属性可通过属性窗口来编辑,但仅能对原型编辑。
UPROPERTY(EditDefaultsOnly)
Type VariableName;
仅限于动态数组,这使得用户不能通过UnrealEd属性窗口来变更数组的长度。
UPROPERTY(EditFixedSize)
Type VariableName;
通过此修饰符使得用户可编辑UnrealEd的属性查看器中的变量所引用的对象属性。(仅对对象引用可用,包括对象引用数组)。
UPROPERTY(EditInline)
Type VariableName;
表示该属性可通过属性窗口来编辑,但仅能对实例而非原型进行编辑。
UPROPERTY(EditInline)
Type VariableName;
UPROPERTY(EditAnywhere, Category = "EditCategory")
int EditAnyNum;
UPROPERTY(EditDefaultsOnly, Category = "EditCategory")
int EditDefaultNum;
UPROPERTY(EditAnywhere, Category = "EditCategory")
TArray EditAnyArray;
UPROPERTY(EditAnywhere, EditFixedSize, Category = "EditCategory")
TArray EditFixedArray;
\\ UPROPERTY(EditInline, Category = "EditCategory")
\\ int EditInlineNum;
UPROPERTY(EditInstanceOnly, Category = "EditCategory")
int EditInstanceNum;
原型中
实例中
Visible~
表示该属性在属性窗口中可见,但无法被编辑。
UPROPERTY(VisibleAnywhere)
Type VariableName;
表示该属性仅在原型的属性窗口中可见,且无法被编辑。
UPROPERTY(VisibleDefaultsOnly)
Type VariableName;
表示该属性仅在实例的属性窗口中可见,且无法被编辑。
UPROPERTY(VisibleInstanceOnly)
Type VariableName;
UPROPERTY(VisibleAnywhere, Category = "VisCategory")
int VisAnyNum;
UPROPERTY(VisibleDefaultsOnly, Category = "VisCategory")
int VisDefaultNum;
UPROPERTY(VisibleInstanceOnly, Category = "VisCategory")
int VisInstanceNum;
原型中
实例中
属性被显示在细节面板的高级下拉框中。
UPROPERTY(EditAnywhere, Category = "Adv")
int AdvNum1;
UPROPERTY(EditAnywhere, AdvancedDisplay, Category = "Adv")
int AdvNum2;
1
2
这个变量是常量,应该导出为常量。
常量特性不会在编辑器修改。
该属性为临时属性;不应被保存,在载入时会被填零。
UPROPERTY(Transient)
Type VariableName;
表明此属性及其值将会为任意将其作为成员变量而包含的资源类示例被自动添加到资源注册中。
不可用于结构体属性或参数。
表示该变量将会成为可配置状态。
当前值可被保存到ini文件中,并且将在创建时被载入;无法在默认属性中被赋值;只读。
表示该变量的值应的任何类型的重复(复制/粘贴,二进制复制等)的过程中被重置为类的默认值。
仅对对象属性(或对象数组)有效。表示当对象被复制(复制/粘贴)或导出到T3D时,被分配给该属性的对象应完全作为子对象区块来导出,而不是仅仅输出对象引用本身。
类似于config修饰符,区别是您不能在子类中重载它;无法在默认属性中被赋值; 只读 。
仅能用于对象属性。
当此类的实例被创建时,它会被赋予一个默认分配给此变量的对象的独特拷贝;用于对在类默认属性中定义的子对象进行实例化。
类似EditInline和Export修饰符。
表示该值可由Matinee的浮点或向量属性轨迹来随时间驱动。
此变量的值将定义本地值;最常用于字符串;只读 。
属性为native:C++代码负责对其序列化并显示给GC。
防止该对象引用在编辑器中被设置为None.隐藏编辑器的清除(以及浏览)按钮。
仅对native类有效。此变量不应被包含在自动生成的类声明中。
表示变更为此变量值将不会被包含在编辑器的撤消/重做历史中。
该值在函数调用后被复制出来。仅在函数参数声明中有效。
此变量应通过节点网络进行复制。
此变量应通过节点网络进行复制,在其接受到 Callback 函数后执行。
使用方法: ReplicatedUsing=FunctionName(函数名称)
仅用于结构体属性。如无法被完全发送,请重试复制此属性(例如,对象引用尚无法通过节点网络来进行序列化)。对于简单引用来说,这是一个默认值,但对结构体来说,由于带宽消耗,很多情况下我们不需要。所以除非此标识被定义,否则其会被禁用。
游戏存档说明一个简单的方法,包括明确的领域为检查点/保存系统在性能水平。您可以设定要保存,然后使用代理存档读/写各个领域的标志。
原生属性应序列化为文本(文本导入,导出文本)。
属性默认情况下,在详细信息面板出现肉眼可见的。
总的来说,我是这么理解的,也不知是否准确:
作者:peony007
链接:https://www.jianshu.com/p/a86d567be8c3
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。