Init
This commit is contained in:
@@ -0,0 +1,393 @@
|
||||
---
|
||||
title: Ue4 c++ UProperty反射 PostEditChangeProperty
|
||||
date: 2022-12-09 13:40:28
|
||||
excerpt:
|
||||
tags: UObject
|
||||
rating: ⭐⭐⭐
|
||||
---
|
||||
## 反射系统
|
||||
https://ikrima.dev/ue4guide/engine-programming/uobject-reflection/uobject-reflection/
|
||||
|
||||
## Property类型判断
|
||||
- UStructProperty:结构体
|
||||
- UMapProperty:TMap
|
||||
- UArrayProperty:TArray
|
||||
属性判断是否是数组或是Map
|
||||
```c++
|
||||
FProperty* PropertyThatChanged = PropertyChangedEvent.Property;
|
||||
if ( PropertyThatChanged != nullptr )
|
||||
{
|
||||
if (PropertyThatChanged->IsA(FArrayProperty::StaticClass()))
|
||||
{
|
||||
FArrayProperty* ArrayProp = CastField<FArrayProperty>(PropertyThatChanged);
|
||||
FProperty* InnerProp = ArrayProp->Inner;
|
||||
if (InnerProp->IsA(FStructProperty::StaticClass()))
|
||||
{
|
||||
const FToonRampData* ToonRampData = ArrayProp->ContainerPtrToValuePtr<FToonRampData>(InnerProp, 0);
|
||||
if(ToonRampData)
|
||||
{
|
||||
}
|
||||
}
|
||||
}else if(PropertyThatChanged->IsA(FMapProperty::StaticClass()))
|
||||
{
|
||||
FArrayProperty* ArrayProp = CastField<FArrayProperty>(PropertyThatChanged);
|
||||
FProperty* InnerProp = ArrayProp->Inner;
|
||||
if (InnerProp->IsA(FStructProperty::StaticClass()))
|
||||
{
|
||||
const FToonRampData* ToonRampData = ArrayProp->ContainerPtrToValuePtr<FToonRampData>(InnerProp, 0);
|
||||
if(ToonRampData)
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
## 属性变化回调函数
|
||||
```c#
|
||||
virtual void EditorApplyTranslation(const FVector& DeltaTranslation, bool bAltDown, bool bShiftDown, bool bCtrlDown) override;
|
||||
virtual void EditorApplyRotation(const FRotator& DeltaRotation, bool bAltDown, bool bShiftDown, bool bCtrlDown) override;
|
||||
virtual void EditorApplyScale(const FVector& DeltaScale, const FVector* PivotLocation, bool bAltDown, bool bShiftDown, bool bCtrlDown) override;
|
||||
virtual void PostEditMove(bool bFinished) override;
|
||||
virtual void PostEditComponentMove(bool bFinished) override;
|
||||
```
|
||||
|
||||
# 没有Struct()却可以在蓝图找到类型问题笔记
|
||||
## Traits
|
||||
大概率是这个
|
||||
```c++
|
||||
template<>
|
||||
struct TStructOpsTypeTraits<FBox2D> : public TStructOpsTypeTraitsBase2<FBox2D>
|
||||
{
|
||||
enum
|
||||
{
|
||||
WithIdenticalViaEquality = true,
|
||||
WithNoInitConstructor = true,
|
||||
WithZeroConstructor = true,
|
||||
};
|
||||
};
|
||||
IMPLEMENT_STRUCT(Box2D);
|
||||
```
|
||||
## BlueprintCompilerCppBackendValueHelper.cpp
|
||||
```c++
|
||||
bool FEmitDefaultValueHelper::SpecialStructureConstructor(const UStruct* Struct, const uint8* ValuePtr, /*out*/ FString* OutResult)
|
||||
{
|
||||
...
|
||||
if (TBaseStructure<FBox2D>::Get() == Struct)
|
||||
{
|
||||
if (OutResult)
|
||||
{
|
||||
const FBox2D* Box2D = reinterpret_cast<const FBox2D*>(ValuePtr);
|
||||
*OutResult = FString::Printf(TEXT("CreateFBox2D(FVector2D(%s, %s), FVector2D(%s, %s), %s)")
|
||||
, *FEmitHelper::FloatToString(Box2D->Min.X)
|
||||
, *FEmitHelper::FloatToString(Box2D->Min.Y)
|
||||
, *FEmitHelper::FloatToString(Box2D->Max.X)
|
||||
, *FEmitHelper::FloatToString(Box2D->Max.Y)
|
||||
, Box2D->bIsValid ? TEXT("true") : TEXT("false"));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
...
|
||||
}
|
||||
struct FStructAccessHelper_StaticData
|
||||
{
|
||||
TMap<const UScriptStruct*, FString> BaseStructureAccessorsMap;
|
||||
TMap<const UScriptStruct*, bool> SupportsDirectNativeAccessMap;
|
||||
TArray<FSoftClassPath> NoExportTypesWithDirectNativeFieldAccess;
|
||||
static FStructAccessHelper_StaticData& Get()
|
||||
{
|
||||
static FStructAccessHelper_StaticData StaticInstance;
|
||||
return StaticInstance;
|
||||
}
|
||||
private:
|
||||
FStructAccessHelper_StaticData()
|
||||
{
|
||||
// These are declared in Class.h; it's more efficient to access these native struct types at runtime using the specialized template functions, so we list them here.
|
||||
MAP_BASE_STRUCTURE_ACCESS(TBaseStructure<FRotator>::Get());
|
||||
MAP_BASE_STRUCTURE_ACCESS(TBaseStructure<FTransform>::Get());
|
||||
MAP_BASE_STRUCTURE_ACCESS(TBaseStructure<FLinearColor>::Get());
|
||||
MAP_BASE_STRUCTURE_ACCESS(TBaseStructure<FColor>::Get());
|
||||
MAP_BASE_STRUCTURE_ACCESS(TBaseStructure<FVector>::Get());
|
||||
MAP_BASE_STRUCTURE_ACCESS(TBaseStructure<FVector2D>::Get());
|
||||
MAP_BASE_STRUCTURE_ACCESS(TBaseStructure<FRandomStream>::Get());
|
||||
MAP_BASE_STRUCTURE_ACCESS(TBaseStructure<FGuid>::Get());
|
||||
MAP_BASE_STRUCTURE_ACCESS(TBaseStructure<FTransform>::Get());
|
||||
MAP_BASE_STRUCTURE_ACCESS(TBaseStructure<FBox2D>::Get());
|
||||
MAP_BASE_STRUCTURE_ACCESS(TBaseStructure<FFallbackStruct>::Get());
|
||||
MAP_BASE_STRUCTURE_ACCESS(TBaseStructure<FFloatRangeBound>::Get());
|
||||
MAP_BASE_STRUCTURE_ACCESS(TBaseStructure<FFloatRange>::Get());
|
||||
MAP_BASE_STRUCTURE_ACCESS(TBaseStructure<FInt32RangeBound>::Get());
|
||||
MAP_BASE_STRUCTURE_ACCESS(TBaseStructure<FInt32Range>::Get());
|
||||
MAP_BASE_STRUCTURE_ACCESS(TBaseStructure<FFloatInterval>::Get());
|
||||
MAP_BASE_STRUCTURE_ACCESS(TBaseStructure<FInt32Interval>::Get());
|
||||
MAP_BASE_STRUCTURE_ACCESS(TBaseStructure<FFrameNumber>::Get());
|
||||
MAP_BASE_STRUCTURE_ACCESS(TBaseStructure<FFrameTime>::Get());
|
||||
{
|
||||
// Cache the known set of noexport types that are known to be compatible with emitting native code to access fields directly.
|
||||
TArray<FString> Paths;
|
||||
GConfig->GetArray(TEXT("BlueprintNativizationSettings"), TEXT("NoExportTypesWithDirectNativeFieldAccess"), Paths, GEditorIni);
|
||||
for (FString& Path : Paths)
|
||||
{
|
||||
NoExportTypesWithDirectNativeFieldAccess.Add(FSoftClassPath(Path));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 大钊的文章中有相似的代码
|
||||
https://zhuanlan.zhihu.com/p/26019216
|
||||
|
||||
Struct的收集
|
||||
对于Struct,我们先来看上篇里生成的代码:
|
||||
```c++
|
||||
static FCompiledInDeferStruct Z_CompiledInDeferStruct_UScriptStruct_FMyStruct(FMyStruct::StaticStruct, TEXT("/Script/Hello"), TEXT("MyStruct"), false, nullptr, nullptr); //延迟注册
|
||||
static struct FScriptStruct_Hello_StaticRegisterNativesFMyStruct
|
||||
{
|
||||
FScriptStruct_Hello_StaticRegisterNativesFMyStruct()
|
||||
{
|
||||
UScriptStruct::DeferCppStructOps(FName(TEXT("MyStruct")),new UScriptStruct::TCppStructOps<FMyStruct>);
|
||||
}
|
||||
} ScriptStruct_Hello_StaticRegisterNativesFMyStruct;
|
||||
```
|
||||
https://zhuanlan.zhihu.com/p/59553490
|
||||
|
||||
ICppStructOps的作用
|
||||
很多朋友在看源码的时候,可能会对UScriptStruct里定义的ICppStructOps类以及模板子类`TCppStructOps<CPPSTRUCT>`感到疑惑。其实它们是C++的一种常见的架构模式,用一个虚函数基类定义一些公共操作,再用一个具体模板子类来实现,从而既可以保存类型,又可以有公共操作接口。
|
||||
针对于UE4这里来说,ICppStructOps就定义了这个结构的一些公共操作。而探测这个C++结构的一些特性就交给了`TCppStructOps<CPPSTRUCT>`类里的`TStructOpsTypeTraits<CPPSTRUCT>`。一些C++结构的信息不能通过模板探测出来的,就需要我们手动标记提供了,所以具体的代码是:
|
||||
|
||||
```c++
|
||||
template <class CPPSTRUCT>
|
||||
struct TStructOpsTypeTraitsBase2
|
||||
{
|
||||
enum
|
||||
{
|
||||
WithZeroConstructor = false, // 0构造,内存清零后就可以了,说明这个结构的默认值就是0
|
||||
WithNoInitConstructor = false, // 有个ForceInit的参数的构造,用来专门构造出0值结构来
|
||||
WithNoDestructor = false, // 是否没有结构有自定义的析构函数, 如果没有析构的话,DestroyStruct里面就可以省略调用析构函数了。默认是有的。结构如果是pod类型,则肯定没有析构。
|
||||
WithCopy = !TIsPODType<CPPSTRUCT>::Value, // 是否结构有自定义的=赋值函数。如果没有的话,在CopyScriptStruct的时候就只需要拷贝内存就可以了
|
||||
WithIdenticalViaEquality = false, // 用==来比较结构
|
||||
WithIdentical = false, // 有一个自定义的Identical函数来专门用来比较,和WithIdenticalViaEquality互斥
|
||||
WithExportTextItem = false, // 有一个ExportTextItem函数来把结构值导出为字符串
|
||||
WithImportTextItem = false, // 有一个ImportTextItem函数把字符串导进结构值
|
||||
WithAddStructReferencedObjects = false, // 有一个AddStructReferencedObjects函数用来添加结构额外的引用对象
|
||||
WithSerializer = false, // 有一个Serialize函数用来序列化
|
||||
WithStructuredSerializer = false, // 有一个结构结构Serialize函数用来序列化
|
||||
WithPostSerialize = false, // 有一个PostSerialize回调用来在序列化后调用
|
||||
WithNetSerializer = false, // 有一个NetSerialize函数用来在网络复制中序列化
|
||||
WithNetDeltaSerializer = false, // 有一个NetDeltaSerialize函数用来在之前NetSerialize的基础上只序列化出差异来,一般用在TArray属性上进行优化
|
||||
WithSerializeFromMismatchedTag = false, // 有一个SerializeFromMismatchedTag函数用来处理属性tag未匹配到的属性值,一般是在结构进行升级后,但值还是原来的值,这个时候用来把旧值升级到新结构时使用
|
||||
WithStructuredSerializeFromMismatchedTag = false, // SerializeFromMismatchedTag的结构版本
|
||||
WithPostScriptConstruct = false,// 有一个PostScriptConstruct函数用在蓝图构造脚本后调用
|
||||
WithNetSharedSerialization = false, // 指明结构的NetSerialize函数不需要用到UPackageMap
|
||||
};
|
||||
};
|
||||
template<class CPPSTRUCT>
|
||||
struct TStructOpsTypeTraits : public TStructOpsTypeTraitsBase2<CPPSTRUCT>
|
||||
{
|
||||
};
|
||||
```
|
||||
|
||||
举个小例子,假如你看到编辑器里某个属性,想在C++里去修改它的值,结果发现它不是public的,甚至有可能连头文件都是private的,这个时候如果对类型系统结构理解不深的人可能就放弃了,但懂的人就知道可以通过这个对象遍历UProperty来查找到这个属性从而修改它。
|
||||
还有一个例子是如果你做了一个插件,调用了引擎编辑器本身的Details面板属性,但又想隐藏其中的一些字段,这个时候如果不修改引擎往往是难以办到的,但是如果知道了属性面板里的属性其实也都是一个个UProperty来的,这样你就可以通过对象路径获得这个属性,然后开启关闭它的某些Flags来达成效果。这也算是一种常规的Hack方式。
|
||||
|
||||
## 《InsideUE4》UObject(十三)类型系统-反射实战
|
||||
https://zhuanlan.zhihu.com/p/61042237
|
||||
|
||||
#### 获取类型对象
|
||||
如果想获取到程序里定义的所有的class,方便的方法是:
|
||||
```c++
|
||||
TArray<UObject*> result;
|
||||
GetObjectsOfClass(UClass::StaticClass(), result); //获取所有的class和interface
|
||||
GetObjectsOfClass(UEnum::StaticClass(), result); //获取所有的enum
|
||||
GetObjectsOfClass(UScriptStruct::StaticClass(), result); //获取所有的struct
|
||||
```
|
||||
GetObjectsOfClass是UE4已经写好的一个很方便的方法,可以获取到属于某个UClass*下面的所有对象。因此如果用UClass::StaticClass()本身,就可以获得程序里定义的所有class。值得注意的是,UE4里的接口是有一个配套的UInterface对象来存储元数据信息,它的类型也是用UClass*表示的,所以也会获得interface。根据前文,enum会生成UEnum,struct会生成UScriptStruct,所以把参数换成UEnum::StaticClass()就可以获得所有的UEnum*对象了,UScriptStruct::StaticClass()就是所有的UScriptStruct*了,最后就可以根据这些类型对象来反射获取类型信息了。
|
||||
而如果要精确的根据一个名字来查找某个类型对象,就可以用UE4里另一个方法:
|
||||
```c++
|
||||
template< class T >
|
||||
inline T* FindObject( UObject* Outer, const TCHAR* Name, bool ExactClass=false )
|
||||
{
|
||||
return (T*)StaticFindObject( T::StaticClass(), Outer, Name, ExactClass );
|
||||
}
|
||||
UClass* classObj=FindObject<UClass>(ANY_PACKAGE,"MyClass"); //获得表示MyClass的UClass*
|
||||
```
|
||||
#### 遍历字段
|
||||
在获取到了一个类型对象后,就可以用各种方式去遍历查找内部的字段了。为此,UE4提供了一个方便的迭代器`TFieldIterator<T>`,可以通过它筛选遍历字段。
|
||||
```c++
|
||||
const UStruct* structClass; //任何复合类型都可以
|
||||
//遍历属性
|
||||
for (TFieldIterator<UProperty> i(structClass); i; ++i)
|
||||
{
|
||||
UProperty* prop=*i;
|
||||
}
|
||||
//遍历函数
|
||||
for (TFieldIterator<UFunction> i(structClass); i; ++i)
|
||||
{
|
||||
UFunction* func=*i;
|
||||
//遍历函数的参数
|
||||
for (TFieldIterator<UProperty> i(func); i; ++i)
|
||||
{
|
||||
UProperty* param=*i;
|
||||
if( param->PropertyFlags & CPF_ReturnParm ) //这是返回值
|
||||
{
|
||||
}
|
||||
}
|
||||
}
|
||||
//遍历接口
|
||||
const UClass* classObj; //只有UClass才有接口
|
||||
for (const FImplementedInterface& ii : classObj->Interfaces)
|
||||
{
|
||||
UClass* interfaceClass = ii.Class;
|
||||
}
|
||||
//遍历枚举
|
||||
const UEnum* enumClass;
|
||||
for (int i = 0; i < enumClass->NumEnums(); ++i)
|
||||
{
|
||||
FName name = enumClass->GetNameByIndex(i);
|
||||
int value = enumClass->GetValueByIndex(i);
|
||||
}
|
||||
//遍历元数据
|
||||
#if WITH_METADATA
|
||||
const UObject* obj;//可以是任何对象,但一般是UField才有值
|
||||
UMetaData* metaData = obj->GetOutermost()->GetMetaData();
|
||||
TMap<FName, FString>* keyValues = metaData->GetMapForObject(obj);
|
||||
if (keyValues != nullptr&&keyValues->Num() > 0)
|
||||
{
|
||||
for (const auto& i : *keyValues)
|
||||
{
|
||||
FName key=i.Key;
|
||||
FString value=i.Value;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
//查找属性
|
||||
UProperty* UStruct::FindPropertyByName(FName InName) const
|
||||
{
|
||||
for (UProperty* Property = PropertyLink; Property != NULL; Property = Property->PropertyLinkNext)
|
||||
{
|
||||
if (Property->GetFName() == InName)
|
||||
{
|
||||
return Property;
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
//查找函数
|
||||
UFunction* UClass::FindFunctionByName(FName InName, EIncludeSuperFlag::Type IncludeSuper) const;
|
||||
```
|
||||
|
||||
#### 查看继承
|
||||
```c++
|
||||
//得到类型对象后,也可以遍历查看它的继承关系。 遍历继承链条:
|
||||
const UStruct* structClass; //结构和类
|
||||
TArray<FString> classNames;
|
||||
classNames.Add(structClass->GetName());
|
||||
UStruct* superClass = structClass->GetSuperStruct();
|
||||
while (superClass)
|
||||
{
|
||||
classNames.Add(superClass->GetName());
|
||||
superClass = superClass->GetSuperStruct();
|
||||
}
|
||||
FString str= FString::Join(classNames, TEXT("->")); //会输出MyClass->UObject
|
||||
//那反过来,如果想获得一个类下面的所有子类,可以这样:
|
||||
const UClass* classObj; //结构和类
|
||||
TArray<UClass*> result;
|
||||
GetDerivedClasses(classObj, result, false);
|
||||
//函数原型是
|
||||
void GetDerivedClasses(UClass* ClassToLookFor, TArray<UClass *>& Results, bool bRecursive);
|
||||
//那么怎么获取实现了某个接口的所有子类呢?
|
||||
TArray<UObject*> result;
|
||||
GetObjectsOfClass(UClass::StaticClass(), result);
|
||||
TArray<UClass*> classes;
|
||||
for (UObject* obj : result)
|
||||
{
|
||||
UClass* classObj = Cast<UClass>(obj);
|
||||
if (classObj->ImplementsInterface(interfaceClass))//判断实现了某个接口
|
||||
{
|
||||
classes.Add(classObj);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
#### 获取设置属性值
|
||||
```c++
|
||||
template<typename ValueType>
|
||||
ValueType* UProperty::ContainerPtrToValuePtr(void* ContainerPtr, int32 ArrayIndex = 0) const
|
||||
{
|
||||
return (ValueType*)ContainerVoidPtrToValuePtrInternal(ContainerPtr, ArrayIndex);
|
||||
}
|
||||
template<typename ValueType>
|
||||
ValueType* UProperty::ContainerPtrToValuePtr(UObject* ContainerPtr, int32 ArrayIndex = 0) const
|
||||
{
|
||||
return (ValueType*)ContainerVoidPtrToValuePtrInternal(ContainerPtr, ArrayIndex);
|
||||
}
|
||||
void* UProperty::ContainerVoidPtrToValuePtrInternal(void* ContainerPtr, int32 ArrayIndex) const
|
||||
{
|
||||
//check...
|
||||
return (uint8*)ContainerPtr + Offset_Internal + ElementSize * ArrayIndex;
|
||||
}
|
||||
void* UProperty::ContainerUObjectPtrToValuePtrInternal(UObject* ContainerPtr, int32 ArrayIndex) const
|
||||
{
|
||||
//check...
|
||||
return (uint8*)ContainerPtr + Offset_Internal + ElementSize * ArrayIndex;
|
||||
}
|
||||
//获取对象或结构里的属性值地址,需要自己转换成具体类型
|
||||
void* propertyValuePtr = property->ContainerPtrToValuePtr<void*>(object);
|
||||
//包含对象引用的属性可以获得对象
|
||||
UObject* subObject = objectProperty->GetObjectPropertyValue_InContainer(object);
|
||||
//也因为获取到的是存放属性值的指针地址,所以其实也就可以*propertyValuePtr=xxx;方便的设置值了。当然如果是从字符串导入设置进去,UE4也提供了两个方法来导出导入:
|
||||
//导出值
|
||||
virtual void ExportTextItem( FString& ValueStr, const void* PropertyValue, const void* DefaultValue, UObject* Parent, int32 PortFlags, UObject* ExportRootScope = NULL ) const;
|
||||
//使用
|
||||
FString outPropertyValueString;
|
||||
property->ExportTextItem(outPropertyValueString, property->ContainerPtrToValuePtr<void*>(object), nullptr, (UObject*)object, PPF_None);
|
||||
//导入值
|
||||
const TCHAR* UProperty::ImportText( const TCHAR* Buffer, void* Data, int32 PortFlags, UObject* OwnerObject, FOutputDevice* ErrorText = (FOutputDevice*)GWarn ) const;
|
||||
//使用
|
||||
FString valueStr;
|
||||
prop->ImportText(*valueStr, prop->ContainerPtrToValuePtr<void*>(obj), PPF_None, obj);
|
||||
```
|
||||
|
||||
#### 反射调用函数
|
||||
```c++
|
||||
//方法原型
|
||||
int32 UMyClass::Func(float param1);
|
||||
UFUNCTION(BlueprintCallable)
|
||||
int32 InvokeFunction(UObject* obj, FName functionName,float param1)
|
||||
{
|
||||
struct MyClass_Func_Parms //定义一个结构用来包装参数和返回值,就像在gen.cpp里那样
|
||||
{
|
||||
float param1;
|
||||
int32 ReturnValue;
|
||||
};
|
||||
UFunction* func = obj->FindFunctionChecked(functionName);
|
||||
MyClass_Func_Parms params;
|
||||
params.param1=param1;
|
||||
obj->ProcessEvent(func, ¶ms);
|
||||
return params.ReturnValue;
|
||||
}
|
||||
//使用
|
||||
int r=InvokeFunction(obj,"Func",123.f);
|
||||
```
|
||||
ProcessEvent也是UE4里事先定义好的非常方便的函数,内部会自动的处理蓝图VM的问题。当然,更底层的方法也可以是:
|
||||
```c++
|
||||
//调用1
|
||||
obj->ProcessEvent(func, ¶ms);
|
||||
//调用2
|
||||
FFrame frame(nullptr, func, ¶ms, nullptr, func->Children);
|
||||
obj->CallFunction(frame, ¶ms + func->ReturnValueOffset, func);
|
||||
//调用3
|
||||
FFrame frame(nullptr, func, ¶ms, nullptr, func->Children);
|
||||
func->Invoke(obj, frame, ¶ms + func->ReturnValueOffset);
|
||||
```
|
||||
|
||||
#### 运行时修改类型
|
||||
让我们继续扩宽一下思路,之前已经详细讲解过了各大类型对象的构造过程,最后常常都是到UE4CodeGen_Private里的调用。既然我们已经知道了它运行的逻辑,那我们也可以仿照着来啊!我们也可以在常规的类型系统注册流程执行完之后,在游戏运行的半途过程中,动态的去修改类型甚至注册类型,因为说到底UE4编辑器也就是一个特殊点的游戏而已啊!这种方式有点类似C#的emit的方式,用代码去生成代码然后再编译。这些方式理论上都是可以通的,我来提供一些思路用法,有兴趣的朋友可以自己去实现下,代码贴出来就太长了。
|
||||
1. 修改UField的MetaData信息,其实可以改变字段在编辑器中的显示信息。MetaData里有哪些字段,可以在ObjectMacros.h中自己查看。
|
||||
2. 动态修改UField的相应的各种Flags数据,比如PropertyFlags,StructFlags,ClassFlags等,可以达成在编辑器里动态改变其显示行为的效果。
|
||||
3. 动态添加删除UEnum对象里面的Names字段,就可以动态给enum添加删除枚举项了。
|
||||
4. 动态地给结构或类添加反射属性字段,就可以在蓝图内创建具有不定字段的结构了。当然前提是在结构里预留好属性存放的内存,这样UProperty的Offset才有值可指向。这么做现在想来好像也不知道能用来干嘛。
|
||||
5. 同属性一样,其实参照对了流程,也可以动态的给蓝图里暴露函数。有时候这可以达成某种加密保护的奇效。
|
||||
6. 可以动态的注册新结构,动态的构造出来相应的UScriptStruct其实就可以了。
|
||||
7. 动态注册新类其实也是可以的,只不过UClass的构造稍微要麻烦点,不过也没麻烦到哪去,有需求了就自然能照着源码里的流程自己实现一个流程出来。
|
||||
8. 再甚至,其实某种程度上的用代码动态创建蓝图节点,填充蓝图VM指令其实也是可行的。只不过想了想好像一般用不着上这种大手术。
|
BIN
03-UnrealEngine/Gameplay/UObject/Ue4Object生命周期.jpg
(Stored with Git LFS)
Normal file
BIN
03-UnrealEngine/Gameplay/UObject/Ue4Object生命周期.jpg
(Stored with Git LFS)
Normal file
Binary file not shown.
@@ -0,0 +1,40 @@
|
||||
# ClassFlags :
|
||||
|
||||
|Name |Feature |Trait |Value|Description |UCLASS |Related to UPROPERTY|
|
||||
|------------------------------------|--------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------|--------------------|
|
||||
|CLASS_Abstract |Blueprint | |0x00000001|指定这个类是抽象基类,不可实例化 |[Abstract](../Specifier/UCLASS/Blueprint/Abstract/Abstract.md) | |
|
||||
|CLASS_Const |Blueprint |Inherit |0x00010000|该类的所有属性和函数都是const的,也应该被暴露为const |[Const](../Specifier/UCLASS/Blueprint/Const/Const.md) | |
|
||||
|CLASS_CompiledFromBlueprint |Blueprint | |0x00040000u|指定该类从蓝图的编译中创建 | | |
|
||||
|CLASS_NewerVersionExists |Blueprint | |0x80000000u| | | |
|
||||
|CLASS_NoExport |UHT | |0x00000100u|不暴露到C++头文件,不生成注册代码 |[NoExport](../Specifier/UCLASS/UHT/NoExport.md) | |
|
||||
|CLASS_CustomConstructor |UHT | |0x00008000u|不创建一个默认构造函数,只在C++环境下使用 |[CustomConstructor](../Specifier/UCLASS/UHT/CustomConstructor.md) | |
|
||||
|CLASS_Deprecated |Editor |Inherit |0x02000000u|显示废弃警告 |[Deprecated](../Specifier/UCLASS/Development/Deprecated/Deprecated.md) | |
|
||||
|CLASS_HideDropDown |Editor | |0x04000000u|类不在右键选择框中显示 |[HideDropDown](../Specifier/UCLASS/TypePicker/HideDropDown/HideDropDown.md) | |
|
||||
|CLASS_EditInlineNew |Editor | |0x00001000u|对象可以通过EditinlineNew按钮构造 |[EditInlineNew](../Specifier/UCLASS/Instance/EditInlineNew/EditInlineNew.md), [NotEditInlineNew](../Specifier/UCLASS/Instance/NotEditInlineNew.md) | |
|
||||
|CLASS_Hidden |Editor | |0x01000000u|不在编辑器的类浏览器和edit inline new中显示 | | |
|
||||
|CLASS_CollapseCategories |Editor | |0x00002000u|属性在展示时不分目录 |[CollapseCategories](../Specifier/UCLASS/Category/CollapseCategories/CollapseCategories.md), [DontCollapseCategories](../Specifier/UCLASS/Category/DontCollapseCategories.md) | |
|
||||
|CLASS_NotPlaceable |Behavior |Inherit |0x00000200u|不能被放置在场景中 |[Deprecated](../Specifier/UCLASS/Development/Deprecated/Deprecated.md), [NotPlaceable](../Specifier/UCLASS/Scene/NotPlaceable/NotPlaceable.md), [Placeable](../Specifier/UCLASS/Scene/Placeable/Placeable.md)| |
|
||||
|CLASS_ReplicationDataIsSetUp |Behavior | |0x00000800u|是否在该类仍然需要调用SetUpRuntimeReplicationData | | |
|
||||
|CLASS_MinimalAPI |DllExport | |0x00080000u|指定该类的最小导出,只导出获得类指针的函数 |[MinimalAPI](../Specifier/UCLASS/UHT/MinimalAPI/MinimalAPI.md) | |
|
||||
|CLASS_RequiredAPI |DllExport |DefaultC++, Internal |0x00100000u|指定该类必须具有DLL导出,导出所有函数和属性 |[UCLASS()](../Specifier/UCLASS/UHT/UCLASS().md) | |
|
||||
| |DllExport | | | | | |
|
||||
|CLASS_DefaultToInstanced |LoadConstruct |Inherit |0x00200000u|指定引用到该类的所有引用都默认创建个实例对象 |[DefaultToInstanced](../Specifier/UCLASS/Instance/DefaultToInstanced/DefaultToInstanced.md) | |
|
||||
|CLASS_HasInstancedReference |LoadConstruct |Inherit |0x00800000u|类拥有组件属性 | | |
|
||||
|CLASS_Parsed |LoadConstruct | |0x00000010u|成功解析完成 | | |
|
||||
|CLASS_TokenStreamAssembled |LoadConstruct |DefaultC++ |0x00400000u|指定父类的TokenStream已经被成功合并到自身类上 |[UCLASS()](../Specifier/UCLASS/UHT/UCLASS().md) | |
|
||||
|CLASS_LayoutChanging |LoadConstruct | | |指定该类的内存布局已经被改变,因此目前还不能创建CDO | | |
|
||||
|CLASS_Constructed |LoadConstruct |DefaultC++ |0x20000000u|类已经被构造完成 |[UCLASS()](../Specifier/UCLASS/UHT/UCLASS().md) | |
|
||||
|CLASS_NeedsDeferredDependencyLoading|LoadConstruct |Inherit | |指定该类需要延迟依赖加载 |[NeedsDeferredDependencyLoading](../Specifier/UCLASS/Blueprint/NeedsDeferredDependencyLoading.md) | |
|
||||
|CLASS_Transient |LoadConstruct |Inherit |0x00000008u|透明的,在序列化的时候被跳过 |[Transient](../Specifier/UCLASS/Serialization/Transient/Transient.md), [NonTransient](../Specifier/UCLASS/Serialization/NonTransient.md) | |
|
||||
|CLASS_MatchedSerializers |LoadConstruct |DefaultC++, Internal |0x00000020u| |[UCLASS()](../Specifier/UCLASS/UHT/UCLASS().md), [MatchedSerializers](../Specifier/UCLASS/Serialization/MatchedSerializers/MatchedSerializers.md) | |
|
||||
|CLASS_Native |Traits |DefaultC++ |0x00000080u|指定为原生类,C++里创建的类 |[UCLASS()](../Specifier/UCLASS/UHT/UCLASS().md) | |
|
||||
|CLASS_Intrinsic |Traits |DefaultC++ |0x10000000u|类在C++中定义,且没有UHT生成的代码 |[Intrinsic](../Specifier/UCLASS/UHT/Intrinsic.md), [UCLASS()](../Specifier/UCLASS/UHT/UCLASS().md) | |
|
||||
|CLASS_Interface |Traits | |0x00004000u|该类是一个接口 |[Interface](../Specifier/UCLASS/UHT/Interface.md) | |
|
||||
|CLASS_Optional |Traits |Inherit |0x00000010u|This object type may not be available in certain context. (i.e. game runtime or in certain configuration). Optional class data is saved separately to other object types. (i.e. might use sidecar files) |[Optional](../Specifier/UCLASS/Serialization/Optional/Optional.md) | |
|
||||
|CLASS_Config |Config |Inherit |0x00000004u|在构造的时候载入对象的config配置 | | |
|
||||
|CLASS_DefaultConfig |Config |Inherit |0x00000002u|保存对象配置到DefaultXXX.ini,而不是Local,必须和CLASS_Config连用 |[DefaultConfig](../Specifier/UCLASS/Config/DefaultConfig/DefaultConfig.md) | |
|
||||
|CLASS_ProjectUserConfig |Config |Inherit |0x00000040u|指定settings的config文件保存在Project/User*.ini 和CLASS_GlobalUserConfig类似 |[ProjectUserConfig](../Specifier/UCLASS/Config/ProjectUserConfig/ProjectUserConfig.md) | |
|
||||
|CLASS_PerObjectConfig |Config |Inherit |0x00000400u|对每个对象进行配置,而不是在类级别 |[PerObjectConfig](../Specifier/UCLASS/Config/PerObjectConfig.md) | |
|
||||
|CLASS_GlobalUserConfig |Config |Inherit |0x08000000u|类Setttings被保存到<AppData>/..../Blah.ini |[GlobalUserConfig](../Specifier/UCLASS/Config/GlobalUserConfig/GlobalUserConfig.md) | |
|
||||
|CLASS_ConfigDoNotCheckDefaults |Config |Inherit |0x40000000u|指定对象配置将不会检查base/defaults ini |[ConfigDoNotCheckDefaults](../Specifier/UCLASS/Config/ConfigDoNotCheckDefaults.md) | |
|
||||
|HasCustomFieldNotify | | | | |[CustomFieldNotify](../Specifier/UCLASS/UHT/CustomFieldNotify.md) | |
|
@@ -0,0 +1,7 @@
|
||||
# CLASS_Abstract
|
||||
|
||||
Value: 0x00000001
|
||||
Description: 指定这个类是抽象基类,不可实例化
|
||||
Feature: Blueprint
|
||||
Status: Not started
|
||||
UCLASS: Abstract (../../Specifier/UCLASS/Abstract.md)
|
@@ -0,0 +1,7 @@
|
||||
# CLASS_CollapseCategories
|
||||
|
||||
Value: 0x00002000u
|
||||
Description: 属性在展示时不分目录
|
||||
Feature: Editor
|
||||
Status: Not started
|
||||
UCLASS: CollapseCategories (../../Specifier/UCLASS/CollapseCategories.md), DontCollapseCategories (../../Specifier/UCLASS/DontCollapseCategories.md)
|
@@ -0,0 +1,6 @@
|
||||
# CLASS_CompiledFromBlueprint
|
||||
|
||||
Value: 0x00040000u
|
||||
Description: 指定该类从蓝图的编译中创建
|
||||
Feature: Blueprint
|
||||
Status: Not started
|
@@ -0,0 +1,7 @@
|
||||
# CLASS_Config
|
||||
|
||||
Value: 0x00000004u
|
||||
Description: 在构造的时候载入对象的config配置
|
||||
Feature: Config
|
||||
Status: Not started
|
||||
Trait: Inherit
|
@@ -0,0 +1,8 @@
|
||||
# CLASS_ConfigDoNotCheckDefaults
|
||||
|
||||
Value: 0x40000000u
|
||||
Description: 指定对象配置将不会检查base/defaults ini
|
||||
Feature: Config
|
||||
Status: Not started
|
||||
Trait: Inherit
|
||||
UCLASS: ConfigDoNotCheckDefaults (../../Specifier/UCLASS/ConfigDoNotCheckDefaults.md)
|
@@ -0,0 +1,8 @@
|
||||
# CLASS_Const
|
||||
|
||||
Value: 0x00010000
|
||||
Description: 该类的所有属性和函数都是const的,也应该被暴露为const
|
||||
Feature: Blueprint
|
||||
Status: Not started
|
||||
Trait: Inherit
|
||||
UCLASS: Const (../../Specifier/UCLASS/Const.md)
|
@@ -0,0 +1,8 @@
|
||||
# CLASS_Constructed
|
||||
|
||||
Value: 0x20000000u
|
||||
Description: 类已经被构造完成
|
||||
Feature: LoadConstruct
|
||||
Status: Not started
|
||||
Trait: DefaultC++
|
||||
UCLASS: UCLASS() (../../Specifier/UCLASS/UCLASS().md)
|
@@ -0,0 +1,7 @@
|
||||
# CLASS_CustomConstructor
|
||||
|
||||
Value: 0x00008000u
|
||||
Description: 不创建一个默认构造函数,只在C++环境下使用
|
||||
Feature: UHT
|
||||
Status: Desprecated
|
||||
UCLASS: CustomConstructor (../../Specifier/UCLASS/CustomConstructor.md)
|
@@ -0,0 +1,8 @@
|
||||
# CLASS_DefaultConfig
|
||||
|
||||
Value: 0x00000002u
|
||||
Description: 保存对象配置到DefaultXXX.ini,而不是Local,必须和CLASS_Config连用
|
||||
Feature: Config
|
||||
Status: Not started
|
||||
Trait: Inherit
|
||||
UCLASS: DefaultConfig (../../Specifier/UCLASS/DefaultConfig.md)
|
@@ -0,0 +1,8 @@
|
||||
# CLASS_DefaultToInstanced
|
||||
|
||||
Value: 0x00200000u
|
||||
Description: 指定引用到该类的所有引用都默认创建个实例对象
|
||||
Feature: LoadConstruct
|
||||
Status: Not started
|
||||
Trait: Inherit
|
||||
UCLASS: DefaultToInstanced (../../Specifier/UCLASS/DefaultToInstanced.md)
|
@@ -0,0 +1,8 @@
|
||||
# CLASS_Deprecated
|
||||
|
||||
Value: 0x02000000u
|
||||
Description: 显示废弃警告
|
||||
Feature: Editor
|
||||
Status: Not started
|
||||
Trait: Inherit
|
||||
UCLASS: Deprecated (../../Specifier/UCLASS/Deprecated.md)
|
@@ -0,0 +1,7 @@
|
||||
# CLASS_EditInlineNew
|
||||
|
||||
Value: 0x00001000u
|
||||
Description: 对象可以通过EditinlineNew按钮构造
|
||||
Feature: Editor
|
||||
Status: Not started
|
||||
UCLASS: EditInlineNew (../../Specifier/UCLASS/EditInlineNew.md), NotEditInlineNew (../../Specifier/UCLASS/NotEditInlineNew.md)
|
@@ -0,0 +1,8 @@
|
||||
# CLASS_GlobalUserConfig
|
||||
|
||||
Value: 0x08000000u
|
||||
Description: 类Setttings被保存到<AppData>/..../Blah.ini
|
||||
Feature: Config
|
||||
Status: Not started
|
||||
Trait: Inherit
|
||||
UCLASS: GlobalUserConfig (../../Specifier/UCLASS/GlobalUserConfig.md)
|
@@ -0,0 +1,7 @@
|
||||
# CLASS_HasInstancedReference
|
||||
|
||||
Value: 0x00800000u
|
||||
Description: 类拥有组件属性
|
||||
Feature: LoadConstruct
|
||||
Status: Not started
|
||||
Trait: Inherit
|
@@ -0,0 +1,6 @@
|
||||
# CLASS_Hidden
|
||||
|
||||
Value: 0x01000000u
|
||||
Description: 不在编辑器的类浏览器和edit inline new中显示
|
||||
Feature: Editor
|
||||
Status: Not started
|
@@ -0,0 +1,7 @@
|
||||
# CLASS_HideDropDown
|
||||
|
||||
Value: 0x04000000u
|
||||
Description: 类不在右键选择框中显示
|
||||
Feature: Editor
|
||||
Status: Not started
|
||||
UCLASS: HideDropDown (../../Specifier/UCLASS/HideDropDown.md)
|
@@ -0,0 +1,7 @@
|
||||
# CLASS_Interface
|
||||
|
||||
Value: 0x00004000u
|
||||
Description: 该类是一个接口
|
||||
Feature: Traits
|
||||
Status: Not started
|
||||
UCLASS: Interface (../../Specifier/UCLASS/Interface.md)
|
@@ -0,0 +1,8 @@
|
||||
# CLASS_Intrinsic
|
||||
|
||||
Value: 0x10000000u
|
||||
Description: 类在C++中定义,且没有UHT生成的代码
|
||||
Feature: Traits
|
||||
Status: Not started
|
||||
Trait: DefaultC++
|
||||
UCLASS: Intrinsic (../../Specifier/UCLASS/Intrinsic.md), UCLASS() (../../Specifier/UCLASS/UCLASS().md)
|
@@ -0,0 +1,5 @@
|
||||
# CLASS_LayoutChanging
|
||||
|
||||
Description: 指定该类的内存布局已经被改变,因此目前还不能创建CDO
|
||||
Feature: LoadConstruct
|
||||
Status: Desprecated
|
@@ -0,0 +1,9 @@
|
||||
# CLASS_MatchedSerializers
|
||||
|
||||
Value: 0x00000020u
|
||||
Feature: LoadConstruct
|
||||
Status: Done
|
||||
Trait: DefaultC++, Internal
|
||||
UCLASS: UCLASS() (../../Specifier/UCLASS/UCLASS().md), MatchedSerializers (../../Specifier/UCLASS/MatchedSerializers.md)
|
||||
|
||||
在UClass::IsSafeToSerializeToStructuredArchives中被使用,只在NoExportTypes.h中使用,标明采用结构序列化器。是否支持文本导入导出,只在编辑器情况下使用。
|
@@ -0,0 +1,7 @@
|
||||
# CLASS_MinimalAPI
|
||||
|
||||
Value: 0x00080000u
|
||||
Description: 指定该类的最小导出,只导出获得类指针的函数
|
||||
Feature: DllExport
|
||||
Status: Not started
|
||||
UCLASS: MinimalAPI (../../Specifier/UCLASS/MinimalAPI.md)
|
@@ -0,0 +1,8 @@
|
||||
# CLASS_Native
|
||||
|
||||
Value: 0x00000080u
|
||||
Description: 指定为原生类,C++里创建的类
|
||||
Feature: Traits
|
||||
Status: Not started
|
||||
Trait: DefaultC++
|
||||
UCLASS: UCLASS() (../../Specifier/UCLASS/UCLASS().md)
|
@@ -0,0 +1,7 @@
|
||||
# CLASS_NeedsDeferredDependencyLoading
|
||||
|
||||
Description: 指定该类需要延迟依赖加载
|
||||
Feature: LoadConstruct
|
||||
Status: Not started
|
||||
Trait: Inherit
|
||||
UCLASS: NeedsDeferredDependencyLoading (../../Specifier/UCLASS/NeedsDeferredDependencyLoading.md)
|
@@ -0,0 +1,5 @@
|
||||
# CLASS_NewerVersionExists
|
||||
|
||||
Value: 0x80000000u
|
||||
Feature: Blueprint
|
||||
Status: Not started
|
@@ -0,0 +1,7 @@
|
||||
# CLASS_NoExport
|
||||
|
||||
Value: 0x00000100u
|
||||
Description: 不暴露到C++头文件,不生成注册代码
|
||||
Feature: UHT
|
||||
Status: Desprecated
|
||||
UCLASS: NoExport (../../Specifier/UCLASS/NoExport.md)
|
@@ -0,0 +1,8 @@
|
||||
# CLASS_NotPlaceable
|
||||
|
||||
Value: 0x00000200u
|
||||
Description: 不能被放置在场景中
|
||||
Feature: Behavior
|
||||
Status: Not started
|
||||
Trait: Inherit
|
||||
UCLASS: Deprecated (../../Specifier/UCLASS/Deprecated.md), NotPlaceable (../../Specifier/UCLASS/NotPlaceable.md), Placeable (../../Specifier/UCLASS/Placeable.md)
|
@@ -0,0 +1,8 @@
|
||||
# CLASS_Optional
|
||||
|
||||
Value: 0x00000010u
|
||||
Description: This object type may not be available in certain context. (i.e. game runtime or in certain configuration). Optional class data is saved separately to other object types. (i.e. might use sidecar files)
|
||||
Feature: Traits
|
||||
Status: Not started
|
||||
Trait: Inherit
|
||||
UCLASS: Optional (../../Specifier/UCLASS/Optional.md)
|
@@ -0,0 +1,6 @@
|
||||
# CLASS_Parsed
|
||||
|
||||
Value: 0x00000010u
|
||||
Description: 成功解析完成
|
||||
Feature: LoadConstruct
|
||||
Status: Desprecated
|
@@ -0,0 +1,8 @@
|
||||
# CLASS_PerObjectConfig
|
||||
|
||||
Value: 0x00000400u
|
||||
Description: 对每个对象进行配置,而不是在类级别
|
||||
Feature: Config
|
||||
Status: Not started
|
||||
Trait: Inherit
|
||||
UCLASS: PerObjectConfig (../../Specifier/UCLASS/PerObjectConfig.md)
|
@@ -0,0 +1,9 @@
|
||||
# CLASS_ProjectUserConfig
|
||||
|
||||
Value: 0x00000040u
|
||||
Description: 指定settings的config文件保存在Project/User*.ini
|
||||
和CLASS_GlobalUserConfig类似
|
||||
Feature: Config
|
||||
Status: Not started
|
||||
Trait: Inherit
|
||||
UCLASS: ProjectUserConfig (../../Specifier/UCLASS/ProjectUserConfig.md)
|
@@ -0,0 +1,6 @@
|
||||
# CLASS_ReplicationDataIsSetUp
|
||||
|
||||
Value: 0x00000800u
|
||||
Description: 是否在该类仍然需要调用SetUpRuntimeReplicationData
|
||||
Feature: Behavior
|
||||
Status: Not started
|
@@ -0,0 +1,10 @@
|
||||
# CLASS_RequiredAPI
|
||||
|
||||
Value: 0x00100000u
|
||||
Description: 指定该类必须具有DLL导出,导出所有函数和属性
|
||||
Feature: DllExport
|
||||
Status: Not started
|
||||
Trait: DefaultC++, Internal
|
||||
UCLASS: UCLASS() (../../Specifier/UCLASS/UCLASS().md)
|
||||
|
||||
内部标记。标明这个类有用MODULENAME_API修饰,会导出函数和属性。如果不写,就不会有这个标记。
|
@@ -0,0 +1,8 @@
|
||||
# CLASS_TokenStreamAssembled
|
||||
|
||||
Value: 0x00400000u
|
||||
Description: 指定父类的TokenStream已经被成功合并到自身类上
|
||||
Feature: LoadConstruct
|
||||
Status: Not started
|
||||
Trait: DefaultC++
|
||||
UCLASS: UCLASS() (../../Specifier/UCLASS/UCLASS().md)
|
@@ -0,0 +1,8 @@
|
||||
# CLASS_Transient
|
||||
|
||||
Value: 0x00000008u
|
||||
Description: 透明的,在序列化的时候被跳过
|
||||
Feature: LoadConstruct
|
||||
Status: Not started
|
||||
Trait: Inherit
|
||||
UCLASS: Transient (../../Specifier/UCLASS/Transient.md), NonTransient (../../Specifier/UCLASS/NonTransient.md)
|
@@ -0,0 +1,4 @@
|
||||
# HasCustomFieldNotify
|
||||
|
||||
Status: Not started
|
||||
UCLASS: CustomFieldNotify (../../Specifier/UCLASS/CustomFieldNotify.md)
|
@@ -0,0 +1,6 @@
|
||||
# EnumFlags :
|
||||
|
||||
| Name | Feature | Value | Description | UENUM | UENUM 1 |
|
||||
| ------------------ | ------- | ---------- | ------------------------------------------------------- | ----- | ------------------------------------------ |
|
||||
| Flags | Trait | 0x00000001 | Whether the UEnum represents a set of flags | | [Flags](../Specifier/UENUM/Flags/Flags.md) |
|
||||
| NewerVersionExists | Trait | 0x00000002 | If set, this UEnum has been replaced by a newer version | | |
|
@@ -0,0 +1,6 @@
|
||||
# Flags
|
||||
|
||||
Value: 0x00000001
|
||||
Description: Whether the UEnum represents a set of flags
|
||||
Feature: Trait
|
||||
UENUM 1: Flags (../../Specifier/UENUM/Flags.md)
|
@@ -0,0 +1,5 @@
|
||||
# NewerVersionExists
|
||||
|
||||
Value: 0x00000002
|
||||
Description: If set, this UEnum has been replaced by a newer version
|
||||
Feature: Trait
|
@@ -0,0 +1,33 @@
|
||||
# FunctionFlags :
|
||||
|Name |Feature |Value |Description|UFUNCTION/UDELEGATE |UFUNCTION/UDELEGATE 1 |USTRUCT |
|
||||
|------------------------------------|--------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------|
|
||||
|FUNC_Final |Trait |0x00000001 |Function is final (prebindable, non-overridable function).|[SealedEvent](../Specifier/UFUNCTION/Blueprint/SealedEvent/SealedEvent.md) | | |
|
||||
|FUNC_RequiredAPI |Dll |0x00000002 |Indicates this function is DLL exported/imported.| | | |
|
||||
|FUNC_BlueprintAuthorityOnly |Network |0x00000004 |Function will only run if the object has network authority|[BlueprintAuthorityOnly](../Specifier/UFUNCTION/Network/BlueprintAuthorityOnly/BlueprintAuthorityOnly.md) | | |
|
||||
|FUNC_BlueprintCosmetic |Network |0x00000008 |Function is cosmetic in nature and should not be invoked on dedicated servers|[BlueprintCosmetic](../Specifier/UFUNCTION/Network/BlueprintCosmetic/BlueprintCosmetic.md) | | |
|
||||
|FUNC_Net |Network |0x00000040 |Function is network-replicated.|[Client](../Specifier/UFUNCTION/Network/Client/Client.md), [NetMulticast](../Specifier/UFUNCTION/Network/NetMulticast/NetMulticast.md), [Server](../Specifier/UFUNCTION/Network/Server/Server.md), [ServiceRequest](../Specifier/UFUNCTION/Network/ServiceRequest.md), [ServiceResponse](../Specifier/UFUNCTION/Network/ServiceResponse.md)| | |
|
||||
|FUNC_NetReliable |Network |0x00000080 |Function should be sent reliably on the network.|[Reliable](../Specifier/UFUNCTION/Network/Reliable.md), [ServiceRequest](../Specifier/UFUNCTION/Network/ServiceRequest.md), [ServiceResponse](../Specifier/UFUNCTION/Network/ServiceResponse.md) | | |
|
||||
|FUNC_NetRequest |Network |0x00000100 |Function is sent to a net service|[ServiceRequest](../Specifier/UFUNCTION/Network/ServiceRequest.md) | | |
|
||||
|FUNC_Exec |Trait |0x00000200 |Executable from command line.|[Exec](../Specifier/UFUNCTION/Exec/Exec.md) | | |
|
||||
|FUNC_Native |Trait |0x00000400 |Native function.|[BlueprintImplementableEvent](../Specifier/UFUNCTION/Blueprint/BlueprintImplementableEvent/BlueprintImplementableEvent.md) | | |
|
||||
|FUNC_Event |Trait |0x00000800 |Event function.|[BlueprintImplementableEvent](../Specifier/UFUNCTION/Blueprint/BlueprintImplementableEvent/BlueprintImplementableEvent.md), [BlueprintNativeEvent](../Specifier/UFUNCTION/Blueprint/BlueprintNativeEvent/BlueprintNativeEvent.md), [ServiceRequest](../Specifier/UFUNCTION/Network/ServiceRequest.md), [ServiceResponse](../Specifier/UFUNCTION/Network/ServiceResponse.md)| | |
|
||||
|FUNC_NetResponse |Network |0x00001000 |Function response from a net service|[ServiceResponse](../Specifier/UFUNCTION/Network/ServiceResponse.md) | | |
|
||||
|FUNC_Static | |0x00002000 |Static function.| | | |
|
||||
|FUNC_NetMulticast |Network |0x00004000 |Function is networked multicast Server -> All Clients|[NetMulticast](../Specifier/UFUNCTION/Network/NetMulticast/NetMulticast.md) | | |
|
||||
|FUNC_UbergraphFunction |Blueprint |0x00008000 |Function is used as the merge 'ubergraph' for a blueprint, only assigned when using the persistent 'ubergraph' frame| | | |
|
||||
|FUNC_MulticastDelegate |Trait |0x00010000 |Function is a multi-cast delegate signature (also requires FUNC_Delegate to be set!)| | | |
|
||||
|FUNC_Public |Trait |0x00020000 |Function is accessible in all classes (if overridden, parameters must remain unchanged).| | | |
|
||||
|FUNC_Private |Trait |0x00040000 |Function is accessible only in the class it is defined in (cannot be overridden, but function name may be reused in subclasses. IOW: if overridden, parameters don't need to match, and Super.Func() cannot be accessed since it's private.)| | | |
|
||||
|FUNC_Protected |Trait |0x00080000 |Function is accessible only in the class it is defined in and subclasses (if overridden, parameters much remain unchanged).| | | |
|
||||
|FUNC_Delegate |Trait |0x00100000 |Function is delegate signature (either single-cast or multi-cast, depending on whether FUNC_MulticastDelegate is set.)| | | |
|
||||
|FUNC_NetServer |Network |0x00200000 |Function is executed on servers (set by replication code if passes check)|[Server](../Specifier/UFUNCTION/Network/Server/Server.md) | | |
|
||||
|FUNC_HasOutParms |Trait |0x00400000 |function has out (pass by reference) parameters| | | |
|
||||
|FUNC_HasDefaults |Trait |0x00800000 |function has structs that contain defaults| | |[HasDefaults](../Specifier/USTRUCT/UHT/HasDefaults.md)|
|
||||
|FUNC_NetClient |Network |0x01000000 |function is executed on clients|[Client](../Specifier/UFUNCTION/Network/Client/Client.md) | | |
|
||||
|FUNC_DLLImport |Dll |0x02000000 |function is imported from a DLL| | | |
|
||||
|FUNC_BlueprintCallable |Blueprint |0x04000000 |function can be called from blueprint code|[BlueprintGetter](../Specifier/UFUNCTION/Blueprint/BlueprintGetter.md), [BlueprintPure](../Specifier/UFUNCTION/Blueprint/BlueprintPure/BlueprintPure.md), [BlueprintSetter](../Specifier/UFUNCTION/Blueprint/BlueprintSetter.md), [BlueprintCallable](../Specifier/UFUNCTION/Blueprint/BlueprintCallable/BlueprintCallable.md)| | |
|
||||
|FUNC_BlueprintEvent |Blueprint |0x08000000 |function can be overridden/implemented from a blueprint|[BlueprintImplementableEvent](../Specifier/UFUNCTION/Blueprint/BlueprintImplementableEvent/BlueprintImplementableEvent.md), [BlueprintNativeEvent](../Specifier/UFUNCTION/Blueprint/BlueprintNativeEvent/BlueprintNativeEvent.md) | | |
|
||||
|FUNC_BlueprintPure |Blueprint |0x10000000 |function can be called from blueprint code, and is also pure (produces no side effects). If you set this, you should set FUNC_BlueprintCallable as well.|[BlueprintGetter](../Specifier/UFUNCTION/Blueprint/BlueprintGetter.md), [BlueprintPure](../Specifier/UFUNCTION/Blueprint/BlueprintPure/BlueprintPure.md) | | |
|
||||
|FUNC_EditorOnly |Trait |0x20000000 |function can only be called from an editor scrippt.| | | |
|
||||
|FUNC_Const |Trait |0x40000000 |function can be called from blueprint code, and only reads state (never writes state)| | | |
|
||||
|FUNC_NetValidate |Network |0x80000000 |function must supply a _Validate implementation|[WithValidation](../Specifier/UFUNCTION/Network/WithValidation.md) | | |
|
@@ -0,0 +1,6 @@
|
||||
# FUNC_BlueprintAuthorityOnly
|
||||
|
||||
Value: 0x00000004
|
||||
Description: Function will only run if the object has network authority
|
||||
Feature: Network
|
||||
UFUNCTION/UDELEGATE: BlueprintAuthorityOnly (../../Specifier/UFUNCTION/BlueprintAuthorityOnly.md)
|
@@ -0,0 +1,6 @@
|
||||
# FUNC_BlueprintCallable
|
||||
|
||||
Value: 0x04000000
|
||||
Description: function can be called from blueprint code
|
||||
Feature: Blueprint
|
||||
UFUNCTION/UDELEGATE: BlueprintGetter (../../Specifier/UFUNCTION/BlueprintGetter.md), BlueprintPure (../../Specifier/UFUNCTION/BlueprintPure.md), BlueprintSetter (../../Specifier/UFUNCTION/BlueprintSetter.md), BlueprintCallable (../../Specifier/UFUNCTION/BlueprintCallable.md)
|
@@ -0,0 +1,6 @@
|
||||
# FUNC_BlueprintCosmetic
|
||||
|
||||
Value: 0x00000008
|
||||
Description: Function is cosmetic in nature and should not be invoked on dedicated servers
|
||||
Feature: Network
|
||||
UFUNCTION/UDELEGATE: BlueprintCosmetic (../../Specifier/UFUNCTION/BlueprintCosmetic.md)
|
@@ -0,0 +1,6 @@
|
||||
# FUNC_BlueprintEvent
|
||||
|
||||
Value: 0x08000000
|
||||
Description: function can be overridden/implemented from a blueprint
|
||||
Feature: Blueprint
|
||||
UFUNCTION/UDELEGATE: BlueprintImplementableEvent (../../Specifier/UFUNCTION/BlueprintImplementableEvent.md), BlueprintNativeEvent (../../Specifier/UFUNCTION/BlueprintNativeEvent.md)
|
@@ -0,0 +1,6 @@
|
||||
# FUNC_BlueprintPure
|
||||
|
||||
Value: 0x10000000
|
||||
Description: function can be called from blueprint code, and is also pure (produces no side effects). If you set this, you should set FUNC_BlueprintCallable as well.
|
||||
Feature: Blueprint
|
||||
UFUNCTION/UDELEGATE: BlueprintGetter (../../Specifier/UFUNCTION/BlueprintGetter.md), BlueprintPure (../../Specifier/UFUNCTION/BlueprintPure.md)
|
@@ -0,0 +1,5 @@
|
||||
# FUNC_Const
|
||||
|
||||
Value: 0x40000000
|
||||
Description: function can be called from blueprint code, and only reads state (never writes state)
|
||||
Feature: Trait
|
@@ -0,0 +1,5 @@
|
||||
# FUNC_DLLImport
|
||||
|
||||
Value: 0x02000000
|
||||
Description: function is imported from a DLL
|
||||
Feature: Dll
|
@@ -0,0 +1,5 @@
|
||||
# FUNC_Delegate
|
||||
|
||||
Value: 0x00100000
|
||||
Description: Function is delegate signature (either single-cast or multi-cast, depending on whether FUNC_MulticastDelegate is set.)
|
||||
Feature: Trait
|
@@ -0,0 +1,5 @@
|
||||
# FUNC_EditorOnly
|
||||
|
||||
Value: 0x20000000
|
||||
Description: function can only be called from an editor scrippt.
|
||||
Feature: Trait
|
@@ -0,0 +1,6 @@
|
||||
# FUNC_Event
|
||||
|
||||
Value: 0x00000800
|
||||
Description: Event function.
|
||||
Feature: Trait
|
||||
UFUNCTION/UDELEGATE: BlueprintImplementableEvent (../../Specifier/UFUNCTION/BlueprintImplementableEvent.md), BlueprintNativeEvent (../../Specifier/UFUNCTION/BlueprintNativeEvent.md), ServiceRequest (../../Specifier/UFUNCTION/ServiceRequest.md), ServiceResponse (../../Specifier/UFUNCTION/ServiceResponse.md)
|
@@ -0,0 +1,6 @@
|
||||
# FUNC_Exec
|
||||
|
||||
Value: 0x00000200
|
||||
Description: Executable from command line.
|
||||
Feature: Trait
|
||||
UFUNCTION/UDELEGATE: Exec (../../Specifier/UFUNCTION/Exec.md)
|
@@ -0,0 +1,6 @@
|
||||
# FUNC_Final
|
||||
|
||||
Value: 0x00000001
|
||||
Description: Function is final (prebindable, non-overridable function).
|
||||
Feature: Trait
|
||||
UFUNCTION/UDELEGATE: SealedEvent (../../Specifier/UFUNCTION/SealedEvent.md)
|
@@ -0,0 +1,6 @@
|
||||
# FUNC_HasDefaults
|
||||
|
||||
Value: 0x00800000
|
||||
Description: function has structs that contain defaults
|
||||
Feature: Trait
|
||||
USTRUCT: HasDefaults (../../Specifier/USTRUCT/HasDefaults.md)
|
@@ -0,0 +1,5 @@
|
||||
# FUNC_HasOutParms
|
||||
|
||||
Value: 0x00400000
|
||||
Description: function has out (pass by reference) parameters
|
||||
Feature: Trait
|
@@ -0,0 +1,5 @@
|
||||
# FUNC_MulticastDelegate
|
||||
|
||||
Value: 0x00010000
|
||||
Description: Function is a multi-cast delegate signature (also requires FUNC_Delegate to be set!)
|
||||
Feature: Trait
|
@@ -0,0 +1,6 @@
|
||||
# FUNC_Native
|
||||
|
||||
Value: 0x00000400
|
||||
Description: Native function.
|
||||
Feature: Trait
|
||||
UFUNCTION/UDELEGATE: BlueprintImplementableEvent (../../Specifier/UFUNCTION/BlueprintImplementableEvent.md)
|
@@ -0,0 +1,6 @@
|
||||
# FUNC_Net
|
||||
|
||||
Value: 0x00000040
|
||||
Description: Function is network-replicated.
|
||||
Feature: Network
|
||||
UFUNCTION/UDELEGATE: Client (../../Specifier/UFUNCTION/Client.md), NetMulticast (../../Specifier/UFUNCTION/NetMulticast.md), Server (../../Specifier/UFUNCTION/Server.md), ServiceRequest (../../Specifier/UFUNCTION/ServiceRequest.md), ServiceResponse (../../Specifier/UFUNCTION/ServiceResponse.md)
|
@@ -0,0 +1,6 @@
|
||||
# FUNC_NetClient
|
||||
|
||||
Value: 0x01000000
|
||||
Description: function is executed on clients
|
||||
Feature: Network
|
||||
UFUNCTION/UDELEGATE: Client (../../Specifier/UFUNCTION/Client.md)
|
@@ -0,0 +1,6 @@
|
||||
# FUNC_NetMulticast
|
||||
|
||||
Value: 0x00004000
|
||||
Description: Function is networked multicast Server -> All Clients
|
||||
Feature: Network
|
||||
UFUNCTION/UDELEGATE: NetMulticast (../../Specifier/UFUNCTION/NetMulticast.md)
|
@@ -0,0 +1,6 @@
|
||||
# FUNC_NetReliable
|
||||
|
||||
Value: 0x00000080
|
||||
Description: Function should be sent reliably on the network.
|
||||
Feature: Network
|
||||
UFUNCTION/UDELEGATE: Reliable (../../Specifier/UFUNCTION/Reliable.md), ServiceRequest (../../Specifier/UFUNCTION/ServiceRequest.md), ServiceResponse (../../Specifier/UFUNCTION/ServiceResponse.md)
|
@@ -0,0 +1,6 @@
|
||||
# FUNC_NetRequest
|
||||
|
||||
Value: 0x00000100
|
||||
Description: Function is sent to a net service
|
||||
Feature: Network
|
||||
UFUNCTION/UDELEGATE: ServiceRequest (../../Specifier/UFUNCTION/ServiceRequest.md)
|
@@ -0,0 +1,6 @@
|
||||
# FUNC_NetResponse
|
||||
|
||||
Value: 0x00001000
|
||||
Description: Function response from a net service
|
||||
Feature: Network
|
||||
UFUNCTION/UDELEGATE: ServiceResponse (../../Specifier/UFUNCTION/ServiceResponse.md)
|
@@ -0,0 +1,6 @@
|
||||
# FUNC_NetServer
|
||||
|
||||
Value: 0x00200000
|
||||
Description: Function is executed on servers (set by replication code if passes check)
|
||||
Feature: Network
|
||||
UFUNCTION/UDELEGATE: Server (../../Specifier/UFUNCTION/Server.md)
|
@@ -0,0 +1,6 @@
|
||||
# FUNC_NetValidate
|
||||
|
||||
Value: 0x80000000
|
||||
Description: function must supply a _Validate implementation
|
||||
Feature: Network
|
||||
UFUNCTION/UDELEGATE: WithValidation (../../Specifier/UFUNCTION/WithValidation.md)
|
@@ -0,0 +1,5 @@
|
||||
# FUNC_Private
|
||||
|
||||
Value: 0x00040000
|
||||
Description: Function is accessible only in the class it is defined in (cannot be overridden, but function name may be reused in subclasses. IOW: if overridden, parameters don't need to match, and Super.Func() cannot be accessed since it's private.)
|
||||
Feature: Trait
|
@@ -0,0 +1,5 @@
|
||||
# FUNC_Protected
|
||||
|
||||
Value: 0x00080000
|
||||
Description: Function is accessible only in the class it is defined in and subclasses (if overridden, parameters much remain unchanged).
|
||||
Feature: Trait
|
@@ -0,0 +1,5 @@
|
||||
# FUNC_Public
|
||||
|
||||
Value: 0x00020000
|
||||
Description: Function is accessible in all classes (if overridden, parameters must remain unchanged).
|
||||
Feature: Trait
|
@@ -0,0 +1,5 @@
|
||||
# FUNC_RequiredAPI
|
||||
|
||||
Value: 0x00000002
|
||||
Description: Indicates this function is DLL exported/imported.
|
||||
Feature: Dll
|
@@ -0,0 +1,4 @@
|
||||
# FUNC_Static
|
||||
|
||||
Value: 0x00002000
|
||||
Description: Static function.
|
@@ -0,0 +1,5 @@
|
||||
# FUNC_UbergraphFunction
|
||||
|
||||
Value: 0x00008000
|
||||
Description: Function is used as the merge 'ubergraph' for a blueprint, only assigned when using the persistent 'ubergraph' frame
|
||||
Feature: Blueprint
|
@@ -0,0 +1,12 @@
|
||||
# ObjectMark :
|
||||
|Name |Value |Description |
|
||||
|------------------------------------|--------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
|OBJECTMARK_NOMARK |0x00000000 |Zero, nothing |
|
||||
|OBJECTMARK_Saved |0x00000004 |Object has been saved via SavePackage. Temporary. |
|
||||
|OBJECTMARK_TagImp |0x00000008 |Temporary import tag in load/save. |
|
||||
|OBJECTMARK_TagExp |0x00000010 |Temporary export tag in load/save. |
|
||||
|OBJECTMARK_NotForClient |0x00000020 |Temporary save tag for client load flag. |
|
||||
|OBJECTMARK_NotForServer |0x00000040 |Temporary save tag for server load flag. |
|
||||
|OBJECTMARK_NotAlwaysLoadedForEditorGame|0x00000080 |Temporary save tag for editorgame load flag. |
|
||||
|OBJECTMARK_EditorOnly |0x00000100 |Temporary editor only flag |
|
||||
|OBJECTMARK_NotForTargetPlatform |0x00000200 |Temporary save tag for stripping objets based on TargetPlatform |
|
@@ -0,0 +1,4 @@
|
||||
# OBJECTMARK_EditorOnly
|
||||
|
||||
Value: 0x00000100
|
||||
Description: Temporary editor only flag
|
@@ -0,0 +1,4 @@
|
||||
# OBJECTMARK_NOMARK
|
||||
|
||||
Value: 0x00000000
|
||||
Description: Zero, nothing
|
@@ -0,0 +1,4 @@
|
||||
# OBJECTMARK_NotAlwaysLoadedForEditorGame
|
||||
|
||||
Value: 0x00000080
|
||||
Description: Temporary save tag for editorgame load flag.
|
@@ -0,0 +1,4 @@
|
||||
# OBJECTMARK_NotForClient
|
||||
|
||||
Value: 0x00000020
|
||||
Description: Temporary save tag for client load flag.
|
@@ -0,0 +1,4 @@
|
||||
# OBJECTMARK_NotForServer
|
||||
|
||||
Value: 0x00000040
|
||||
Description: Temporary save tag for server load flag.
|
@@ -0,0 +1,4 @@
|
||||
# OBJECTMARK_NotForTargetPlatform
|
||||
|
||||
Value: 0x00000200
|
||||
Description: Temporary save tag for stripping objets based on TargetPlatform
|
@@ -0,0 +1,4 @@
|
||||
# OBJECTMARK_Saved
|
||||
|
||||
Value: 0x00000004
|
||||
Description: Object has been saved via SavePackage. Temporary.
|
@@ -0,0 +1,4 @@
|
||||
# OBJECTMARK_TagExp
|
||||
|
||||
Value: 0x00000010
|
||||
Description: Temporary export tag in load/save.
|
@@ -0,0 +1,4 @@
|
||||
# OBJECTMARK_TagImp
|
||||
|
||||
Value: 0x00000008
|
||||
Description: Temporary import tag in load/save.
|
@@ -0,0 +1,54 @@
|
||||
# PropertyFlags :
|
||||
| Name | Feature | Value | Description | UPARAM | UPROPERTY |
|
||||
| ---------------------------------- | ------------- | ------------------ | ------------------------------------------------------------ | ------------------------------------------------- | ------------------------------------------------------------ |
|
||||
| CPF_Edit | Editor | 0x0000000000000001 | Property is user-settable in the editor. | | [EditAnywhere](../Specifier/UPROPERTY/DetaisPanel/EditAnywhere/EditAnywhere.md), [EditDefaultsOnly](../Specifier/UPROPERTY/DetaisPanel/EditDefaultsOnly.md), [EditInstanceOnly](../Specifier/UPROPERTY/DetaisPanel/EditInstanceOnly.md), [VisibleAnywhere](../Specifier/UPROPERTY/DetaisPanel/VisibleAnywhere.md), [VisibleDefaultsOnly](../Specifier/UPROPERTY/DetaisPanel/VisibleDefaultsOnly.md), [VisibleInstanceOnly](../Specifier/UPROPERTY/DetaisPanel/VisibleInstanceOnly.md), [Interp](../Specifier/UPROPERTY/DetaisPanel/Interp/Interp.md) |
|
||||
| CPF_ConstParm | Trait | 0x0000000000000002 | This is a constant function parameter | Const (Specifier/UPARAM/Const.md) | |
|
||||
| CPF_BlueprintVisible | Blueprint | 0x0000000000000004 | This property can be read by blueprint code | | [BlueprintReadWrite](../Specifier/UPROPERTY/Blueprint/BlueprintReadWrite/BlueprintReadWrite.md), [BlueprintReadOnly](../Specifier/UPROPERTY/Blueprint/BlueprintReadOnly/BlueprintReadOnly.md), [BlueprintSetter](../Specifier/UPROPERTY/Blueprint/BlueprintSetter.md), [BlueprintGetter](../Specifier/UPROPERTY/Blueprint/BlueprintGetter/BlueprintGetter.md), [Interp](../Specifier/UPROPERTY/DetaisPanel/Interp/Interp.md) |
|
||||
| CPF_ExportObject | Serialization | 0x0000000000000008 | Object can be exported with actor. | | [Instanced](../Specifier/UPROPERTY/Instance/Instanced/Instanced.md), [Export](../Specifier/UPROPERTY/Serialization/Export/Export.md) |
|
||||
| CPF_BlueprintReadOnly | Blueprint | 0x0000000000000010 | This property cannot be modified by blueprint code | | [BlueprintReadOnly](../Specifier/UPROPERTY/Blueprint/BlueprintReadOnly/BlueprintReadOnly.md), [BlueprintGetter](../Specifier/UPROPERTY/Blueprint/BlueprintGetter/BlueprintGetter.md) |
|
||||
| CPF_Net | Network | 0x0000000000000020 | Property is relevant to network replication. | | [Replicated](../Specifier/UPROPERTY/Network/Replicated.md), [ReplicatedUsing](../Specifier/UPROPERTY/Network/ReplicatedUsing/ReplicatedUsing.md) |
|
||||
| CPF_EditFixedSize | Editor | 0x0000000000000040 | Indicates that elements of an array can be modified, but its size cannot be changed. | | [EditFixedSize](../Specifier/UPROPERTY/DetaisPanel/EditFixedSize/EditFixedSize.md) |
|
||||
| CPF_Parm | Function | 0x0000000000000080 | Function/When call parameter. | | |
|
||||
| CPF_OutParm | Function | 0x0000000000000100 | Value is copied out after function call. | | |
|
||||
| CPF_ZeroConstructor | Trait | 0x0000000000000200 | memset is fine for construction | | |
|
||||
| CPF_ReturnParm | Function | 0x0000000000000400 | Return value. | | |
|
||||
| CPF_DisableEditOnTemplate | Editor | 0x0000000000000800 | Disable editing of this property on an archetype/sub-blueprint | | [EditInstanceOnly](../Specifier/UPROPERTY/DetaisPanel/EditInstanceOnly.md), [VisibleInstanceOnly](../Specifier/UPROPERTY/DetaisPanel/VisibleInstanceOnly.md) |
|
||||
| CPF_NonNullable | Trait | 0x0000000000001000 | Object property can never be null | | |
|
||||
| CPF_Transient | Serialization | 0x0000000000002000 | Property is transient: shouldn't be saved or loaded, except for Blueprint CDOs. | | [Transient](../Specifier/UPROPERTY/Serialization/Transient/Transient.md) |
|
||||
| CPF_Config | Config | 0x0000000000004000 | Property should be loaded/saved as permanent profile. | | [Config](../Specifier/UPROPERTY/Config/Config.md) |
|
||||
| CPF_RequiredParm | Editor | 0x0000000000008000 | Parameter must be linked explicitly in blueprint. Leaving the parameter out results in a compile error. | Required (Specifier/UPARAM/Required.md) | |
|
||||
| CPF_DisableEditOnInstance | Editor | 0x0000000000010000 | Disable editing on an instance of this class | | [EditDefaultsOnly](../Specifier/UPROPERTY/DetaisPanel/EditDefaultsOnly.md), [VisibleDefaultsOnly](../Specifier/UPROPERTY/DetaisPanel/VisibleDefaultsOnly.md) |
|
||||
| CPF_EditConst | Editor | 0x0000000000020000 | Property is uneditable in the editor. | | [VisibleAnywhere](../Specifier/UPROPERTY/DetaisPanel/VisibleAnywhere.md) |
|
||||
| CPF_GlobalConfig | Config | 0x0000000000040000 | Load config from base class, not subclass. | | [GlobalConfig](../Specifier/UPROPERTY/Config/GlobalConfig/GlobalConfig.md) |
|
||||
| CPF_InstancedReference | Trait | 0x0000000000080000 | Property is a component references. | | [Instanced](../Specifier/UPROPERTY/Instance/Instanced/Instanced.md) |
|
||||
| CPF_DuplicateTransient | Serialization | 0x0000000000200000 | Property should always be reset to the default value during any type of duplication (copy/paste, binary duplication, etc.) | | [DuplicateTransient](../Specifier/UPROPERTY/Serialization/DuplicateTransient/DuplicateTransient.md) |
|
||||
| CPF_SaveGame | Serialization | 0x0000000001000000 | Property should be serialized for save games, this is only checked for game-specific archives with ArIsSaveGame | | |
|
||||
| CPF_NoClear | Editor | 0x0000000002000000 | Hide clear button. | | [NoClear](../Specifier/UPROPERTY/DetaisPanel/NoClear/NoClear.md) |
|
||||
| CPF_ReferenceParm | Function | 0x0000000008000000 | Value is passed by reference; CPF_OutParam and CPF_Param should also be set. | ref (Specifier/UPARAM/ref.md) | |
|
||||
| CPF_BlueprintAssignable | Blueprint | 0x0000000010000000 | MC Delegates only. Property should be exposed for assigning in blueprint code | | [BlueprintAssignable](../Specifier/UPROPERTY/Blueprint/BlueprintAssignable/BlueprintAssignable.md) |
|
||||
| CPF_Deprecated | Trait | 0x0000000020000000 | Property is deprecated. Read it from an archive, but don't save it. | | |
|
||||
| CPF_IsPlainOldData | Trait | 0x0000000040000000 | If this is set, then the property can be memcopied instead of CopyCompleteValue / CopySingleValue | | |
|
||||
| CPF_RepSkip | Network | 0x0000000080000000 | Not replicated. For non replicated properties in replicated structs | NotReplicated (Specifier/UPARAM/NotReplicated.md) | [NotReplicated](../Specifier/UPROPERTY/Network/NotReplicated.md) |
|
||||
| CPF_RepNotify | Network | 0x0000000100000000 | Notify actors when a property is replicated | | [ReplicatedUsing](../Specifier/UPROPERTY/Network/ReplicatedUsing/ReplicatedUsing.md) |
|
||||
| CPF_Interp | Editor | 0x0000000200000000 | interpolatable property for use with cinematics | | [Interp](../Specifier/UPROPERTY/DetaisPanel/Interp/Interp.md) |
|
||||
| CPF_NonTransactional | Editor | 0x0000000400000000 | Property isn't transacted | | [NonTransactional](../Specifier/UPROPERTY/DetaisPanel/NonTransactional/NonTransactional.md) |
|
||||
| CPF_EditorOnly | Editor | 0x0000000800000000 | Property should only be loaded in the editor | | |
|
||||
| CPF_NoDestructor | Trait | 0x0000001000000000 | No destructor | | |
|
||||
| CPF_AutoWeak | Trait | 0x0000004000000000 | Only used for weak pointers, means the export type is autoweak | | |
|
||||
| CPF_ContainsInstancedReference | Trait | 0x0000008000000000 | Property contains component references. | | |
|
||||
| CPF_AssetRegistrySearchable | Editor | 0x0000010000000000 | asset instances will add properties with this flag to the asset registry automatically | | [AssetRegistrySearchable](../Specifier/UPROPERTY/Asset/AssetRegistrySearchable/AssetRegistrySearchable.md) |
|
||||
| CPF_SimpleDisplay | Editor | 0x0000020000000000 | The property is visible by default in the editor details view | | [SimpleDisplay](../Specifier/UPROPERTY/DetaisPanel/SimpleDisplay/SimpleDisplay.md) |
|
||||
| CPF_AdvancedDisplay | Editor | 0x0000040000000000 | The property is advanced and not visible by default in the editor details view | | [AdvancedDisplay](../Specifier/UPROPERTY/DetaisPanel/AdvancedDisplay/AdvancedDisplay.md) |
|
||||
| CPF_Protected | Editor | 0x0000080000000000 | property is protected from the perspective of script | | |
|
||||
| CPF_BlueprintCallable | Blueprint | 0x0000100000000000 | MC Delegates only. Property should be exposed for calling in blueprint code | | [BlueprintCallable](../Specifier/UPROPERTY/Blueprint/BlueprintCallable/BlueprintCallable.md) |
|
||||
| CPF_BlueprintAuthorityOnly | Network | 0x0000200000000000 | MC Delegates only. This delegate accepts (only in blueprint) only events with BlueprintAuthorityOnly. | | [BlueprintAuthorityOnly](../Specifier/UPROPERTY/Blueprint/BlueprintAuthorityOnly/BlueprintAuthorityOnly.md) |
|
||||
| CPF_TextExportTransient | Serialization | 0x0000400000000000 | Property shouldn't be exported to text format (e.g. copy/paste) | | [TextExportTransient](../Specifier/UPROPERTY/Serialization/TextExportTransient.md) |
|
||||
| CPF_NonPIEDuplicateTransient | Serialization | 0x0000800000000000 | Property should only be copied in PIE | | [NonPIEDuplicateTransient](../Specifier/UPROPERTY/Serialization/NonPIEDuplicateTransient/NonPIEDuplicateTransient.md) |
|
||||
| CPF_ExposeOnSpawn | Trait | 0x0001000000000000 | Property is exposed on spawn | | |
|
||||
| CPF_PersistentInstance | Serialization | 0x0002000000000000 | A object referenced by the property is duplicated like a component. (Each actor should have an own instance.) | | [Instanced](../Specifier/UPROPERTY/Instance/Instanced/Instanced.md) |
|
||||
| CPF_UObjectWrapper | Trait | 0x0004000000000000 | Property was parsed as a wrapper class like TSubclassOf<T>, FScriptInterface etc., rather than a USomething* | | |
|
||||
| CPF_HasGetValueTypeHash | Trait | 0x0008000000000000 | This property can generate a meaningful hash value. | | |
|
||||
| CPF_NativeAccessSpecifierPublic | Trait | 0x0010000000000000 | Public native access specifier | | |
|
||||
| CPF_NativeAccessSpecifierProtected | Trait | 0x0020000000000000 | Protected native access specifier | | |
|
||||
| CPF_NativeAccessSpecifierPrivate | Trait | 0x0040000000000000 | Private native access specifier | | |
|
||||
| CPF_SkipSerialization | Serialization | 0x0080000000000000 | Property shouldn't be serialized, can still be exported to text | | [SkipSerialization](../Specifier/UPROPERTY/Serialization/SkipSerialization/SkipSerialization.md) |
|
@@ -0,0 +1,6 @@
|
||||
# CPF_AdvancedDisplay
|
||||
|
||||
Value: 0x0000040000000000
|
||||
Description: The property is advanced and not visible by default in the editor details view
|
||||
Feature: Editor
|
||||
UPROPERTY: AdvancedDisplay (../../Specifier/UPROPERTY/AdvancedDisplay.md)
|
@@ -0,0 +1,6 @@
|
||||
# CPF_AssetRegistrySearchable
|
||||
|
||||
Value: 0x0000010000000000
|
||||
Description: asset instances will add properties with this flag to the asset registry automatically
|
||||
Feature: Editor
|
||||
UPROPERTY: AssetRegistrySearchable (../../Specifier/UPROPERTY/AssetRegistrySearchable.md)
|
@@ -0,0 +1,5 @@
|
||||
# CPF_AutoWeak
|
||||
|
||||
Value: 0x0000004000000000
|
||||
Description: Only used for weak pointers, means the export type is autoweak
|
||||
Feature: Trait
|
@@ -0,0 +1,6 @@
|
||||
# CPF_BlueprintAssignable
|
||||
|
||||
Value: 0x0000000010000000
|
||||
Description: MC Delegates only. Property should be exposed for assigning in blueprint code
|
||||
Feature: Blueprint
|
||||
UPROPERTY: BlueprintAssignable (../../Specifier/UPROPERTY/BlueprintAssignable.md)
|
@@ -0,0 +1,6 @@
|
||||
# CPF_BlueprintAuthorityOnly
|
||||
|
||||
Value: 0x0000200000000000
|
||||
Description: MC Delegates only. This delegate accepts (only in blueprint) only events with BlueprintAuthorityOnly.
|
||||
Feature: Network
|
||||
UPROPERTY: BlueprintAuthorityOnly (../../Specifier/UPROPERTY/BlueprintAuthorityOnly.md)
|
@@ -0,0 +1,6 @@
|
||||
# CPF_BlueprintCallable
|
||||
|
||||
Value: 0x0000100000000000
|
||||
Description: MC Delegates only. Property should be exposed for calling in blueprint code
|
||||
Feature: Blueprint
|
||||
UPROPERTY: BlueprintCallable (../../Specifier/UPROPERTY/BlueprintCallable.md)
|
@@ -0,0 +1,6 @@
|
||||
# CPF_BlueprintReadOnly
|
||||
|
||||
Value: 0x0000000000000010
|
||||
Description: This property cannot be modified by blueprint code
|
||||
Feature: Blueprint
|
||||
UPROPERTY: BlueprintReadOnly (../../Specifier/UPROPERTY/BlueprintReadOnly.md), BlueprintGetter (../../Specifier/UPROPERTY/BlueprintGetter.md)
|
@@ -0,0 +1,6 @@
|
||||
# CPF_BlueprintVisible
|
||||
|
||||
Value: 0x0000000000000004
|
||||
Description: This property can be read by blueprint code
|
||||
Feature: Blueprint
|
||||
UPROPERTY: BlueprintReadWrite (../../Specifier/UPROPERTY/BlueprintReadWrite.md), BlueprintReadOnly (../../Specifier/UPROPERTY/BlueprintReadOnly.md), BlueprintSetter (../../Specifier/UPROPERTY/BlueprintSetter.md), BlueprintGetter (../../Specifier/UPROPERTY/BlueprintGetter.md), Interp (../../Specifier/UPROPERTY/Interp.md)
|
@@ -0,0 +1,6 @@
|
||||
# CPF_Config
|
||||
|
||||
Value: 0x0000000000004000
|
||||
Description: Property should be loaded/saved as permanent profile.
|
||||
Feature: Config
|
||||
UPROPERTY: Config (../../Specifier/UPROPERTY/Config.md)
|
@@ -0,0 +1,6 @@
|
||||
# CPF_ConstParm
|
||||
|
||||
Value: 0x0000000000000002
|
||||
Description: This is a constant function parameter
|
||||
Feature: Trait
|
||||
UPARAM: Const (../../Specifier/UPARAM/Const.md)
|
@@ -0,0 +1,5 @@
|
||||
# CPF_ContainsInstancedReference
|
||||
|
||||
Value: 0x0000008000000000
|
||||
Description: Property contains component references.
|
||||
Feature: Trait
|
@@ -0,0 +1,5 @@
|
||||
# CPF_Deprecated
|
||||
|
||||
Value: 0x0000000020000000
|
||||
Description: Property is deprecated. Read it from an archive, but don't save it.
|
||||
Feature: Trait
|
@@ -0,0 +1,6 @@
|
||||
# CPF_DisableEditOnInstance
|
||||
|
||||
Value: 0x0000000000010000
|
||||
Description: Disable editing on an instance of this class
|
||||
Feature: Editor
|
||||
UPROPERTY: EditDefaultsOnly (../../Specifier/UPROPERTY/EditDefaultsOnly.md), VisibleDefaultsOnly (../../Specifier/UPROPERTY/VisibleDefaultsOnly.md)
|
@@ -0,0 +1,6 @@
|
||||
# CPF_DisableEditOnTemplate
|
||||
|
||||
Value: 0x0000000000000800
|
||||
Description: Disable editing of this property on an archetype/sub-blueprint
|
||||
Feature: Editor
|
||||
UPROPERTY: EditInstanceOnly (../../Specifier/UPROPERTY/EditInstanceOnly.md), VisibleInstanceOnly (../../Specifier/UPROPERTY/VisibleInstanceOnly.md)
|
@@ -0,0 +1,6 @@
|
||||
# CPF_DuplicateTransient
|
||||
|
||||
Value: 0x0000000000200000
|
||||
Description: Property should always be reset to the default value during any type of duplication (copy/paste, binary duplication, etc.)
|
||||
Feature: Serialization
|
||||
UPROPERTY: DuplicateTransient (../../Specifier/UPROPERTY/DuplicateTransient.md)
|
@@ -0,0 +1,6 @@
|
||||
# CPF_Edit
|
||||
|
||||
Value: 0x0000000000000001
|
||||
Description: Property is user-settable in the editor.
|
||||
Feature: Editor
|
||||
UPROPERTY: EditAnywhere (../../Specifier/UPROPERTY/EditAnywhere.md), EditDefaultsOnly (../../Specifier/UPROPERTY/EditDefaultsOnly.md), EditInstanceOnly (../../Specifier/UPROPERTY/EditInstanceOnly.md), VisibleAnywhere (../../Specifier/UPROPERTY/VisibleAnywhere.md), VisibleDefaultsOnly (../../Specifier/UPROPERTY/VisibleDefaultsOnly.md), VisibleInstanceOnly (../../Specifier/UPROPERTY/VisibleInstanceOnly.md), Interp (../../Specifier/UPROPERTY/Interp.md)
|
@@ -0,0 +1,6 @@
|
||||
# CPF_EditConst
|
||||
|
||||
Value: 0x0000000000020000
|
||||
Description: Property is uneditable in the editor.
|
||||
Feature: Editor
|
||||
UPROPERTY: VisibleAnywhere (../../Specifier/UPROPERTY/VisibleAnywhere.md)
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user