UE_C++ —— Properties

目录

一,Property Declaration

二,核心数据类型

Integers

Floating Point Types

Boolean Types

Strings

三,Property Specifiers

四,Metadata Specifiers


一,Property Declaration

        Properties 属性使用标准的C++变量语法声明,前面用 UPROPERTY 宏来定义属性变量的说明符和元数据;

UPROPERTY([specifier, specifier, ...], [meta(key = value, key = value, ...)])
Type VariableName;

二,核心数据类型

Integers
  • uint8、uint16、uint32、uint64
  • int8、int16、int32、int64
  • As Bitmasks,元标记可使整数作为下拉列表形式可供编辑;

/*~ BasicBits appears as a list of generic flags in the editor, instead of an integer field. */
UPROPERTY(EditAnywhere, Meta = (Bitmask))
int32 BasicBits;
/*~ You can set MyFunction using a generic list of flags instead of typing in an integer value. */
UFUNCTION(BlueprintCallable)
void MyFunction(UPARAM(meta = (Bitmask)) int32 BasicBitsParam)
//自定义bitflags名称
UENUM(Meta = (Bitflags))
enum class EColorBits
{
	ECB_Red,
	ECB_Green,
	ECB_Blue
};
//将定义好的枚举转化为bitmask
UENUM(Meta = (Bitflags, UseEnumValuesAsMaskValuesInEditor = "true"))
enum class EColorBits
{
	ECB_Red  = 0x01,
	ECB_Green = 0x02,
	ECB_Blue  = 0x04
};

ENUM_CLASS_FLAGS(EColorBits);

//定义好后引用
/*~ This property lists flags matching the names of values from EColorBits. */
UPROPERTY(EditAnywhere, Meta = (Bitmask, BitmaskEnum = "EColorBits"))
int32 ColorFlags;

/*~ MyOtherFunction shows flags named after the values from EColorBits. */
UFUNCTION(BlueprintCallable)
void MyOtherFunction(UPARAM(meta = (Bitmask, BitmaskEnum = "EColorBits")) int32 ColorFlagsParam)

 

Floating Point Types
  • float
  • double
Boolean Types
  • 可使用C++ bool关键字或位域;
uint32 bIsHungry : 1;
bool bIsThirsty;
Strings

支持三种核心类型的字符串:

  • FString 是典型的"动态字符数组"字符串类型;
  • FName 是对全局字符串表中不可变且不区分大小写的字符串的引用;相较于FString,它的大小更小,更能高效的传递,但更难以操控;
  • FText 是指定用于处理本地化的更可靠的字符串表示;
//大多数情况下,使用TCHAR类型来表示字符,TEXT()宏可用于表示TCHAR文字;
MyDogPtr->DogName = FName(TEXT("Samson Aloysius"));

三,Property Specifiers

        声明属性时,可添加属性说明符以控制属性行为;

AdvancedDisplay属性将被放置在高级选项下;
AssetRegistrySearchable此属性及其值都将自动添加到资产注册表中;
BlueprintAssignable仅适用于多播代理,公开要在蓝图中分配的属性;
BlueprintAuthorityOnly必须是多播代理,在蓝图中,只接受标记为BlueprintAuthorityOnly的事件;
BlueprintCallable仅限多播代理,应公开属性以在Blueprint代码中调用;
BlueprintGetter=GetterFunctionName指定自定义访问器函数,如也没有标记BlueprintSetter或BlueprintReadWrite,则隐式地为BlueprintReadOnly;
BlueprintSetter=SetterFunctionName具有自定义赋值函数,并隐式标记为BlueprintReadWrite;注意,mutator函数必须命名并属于同一类;
BlueprintReadOnly蓝图只读此属性,与BlueprintReadWrite规范不兼容;
BlueprintReadWrite蓝图可读写此属性,与BlueprintReadOnly规范不兼容;
Category="TopCategory\|SubCategory\|..."指定在蓝图中显示属性类别,使用|运算符定义嵌套类别;
DuplicateTransient在任何类型的复制(复制/粘贴、二进制复制等)过程中,属性的值都应重置为类默认值;
EditAnywhere可通过原型和实例上的属性窗口进行编辑,与"Visible"说明符不兼容;
VisibleAnywhere在所有属性窗口中可见,但无法编辑;与“Edit”规范不兼容;
EditDefaultsOnly只可通过原型的属性窗口进行编辑,与"Visible"说明符不兼容;
EditInstanceOnly只可通过实例上的属性窗口进行编辑,与"Visible"说明符不兼容;
EditFixedSize仅适用于动态数组,将防止用户通过虚幻编辑器属性窗口更改数组的长度;
EditInline允许在属性检查器中编辑此属性引用的对象的属性(仅适用于对象引用,包括对象引用数组);
Export仅适用于对象属性(或对象数组)。指示在复制对象时(例如用于复制/粘贴操作),分配给此属性的对象应作为子对象块整体导出,而不是仅输出对象引用本身;
Config属性将可配置;当前值可以保存到与类关联的.ini文件中,并在创建时加载;在默认属性中不能给值;隐式BlueprintReadOnly;
GlobalConfig与Config相似,只是不能在子类中重写它;在默认属性中不能给值;隐式BlueprintReadOnly;
Instanced仅限于对象(UCLASS)属性;当创建此类的实例时,将获得默认情况下分配给此属性的Object的唯一副本;用于实例化类默认属性中定义的子对象;隐式EditInlineExport
Interp该值可由序列器中的轨迹随时间驱动;
Localized定义一个本地化值,主要用于字符串,隐式ReadOnly;
NativeC++代码负责对其进行序列化并暴露给垃圾回收;
NoClear防止编辑器将此对象引用设置为无,隐藏编辑器中的清除(和浏览)按钮;
NoExport仅对native类有用,不应包含在自动生成的类声明中;
NonPIEDuplicateTransient在复制过程中,将重置为默认值,除非是PIE;
NonTransactional对此属性值的更改不会包含在编辑器的撤消/重做历史记录中;
NotReplicated跳过复制,仅适用于服务请求函数中的结构体成员和参数;
Replicated该属性应通过网络进行复制;
ReplicatedUsing=FunctionName指定了一个回调函数,当属性通过网络更新时执行该函数;
RepRetry仅对结构体属性有用;如此属性未能完全发送(如,对象引用尚无法通过网络序列化),请重试复制;对于简单的引用,这是默认值,但对于结构体,由于带宽成本,这通常是不可取的,因此除非指定此标志,否则它将被禁用;
SaveGame一种在属性级别显式包含检查点/保存系统字段的简单方法;该标志应设置在所有旨在成为已保存游戏一部分的字段上,然后可以使用代理存档器对其进行读/写;
SerializeTextnative属性应序列化为文本(ImportText、ExportText);
SkipSerialization此属性不会被序列化,但仍然可以导出为文本格式(如用于复制/粘贴操作);
SimpleDisplay可见或可编辑的属性显示在“Details”面板中,无需打开“Advanced”部分即可查看;
TextExportTransient此属性不会导出为文本格式(因此不能用于复制/粘贴操作);
Transient属性是瞬态的,意味着不会被保存或加载;以这种方式标记的属性将在加载时填充为零;
VisibleDefaultsOnly此属性仅在原型的属性窗口中可见,不能编辑;与任何“Edit”都不兼容;
VisibleInstanceOnly此属性仅在实例的属性窗口中可见,对原型不可见,且不可编辑;与任何“Edit”都不兼容;

四,Metadata Specifiers

        声明类、接口、结构体、枚举、枚举值、函数,或属性时,可添加 元数据说明符 来控制其与引擎和编辑器各方面的相处方式;每一种类型的数据结构或成员都有自己的元数据说明符列表;

注,Metadata只存在于编辑器中,不要编写能够访问到Metadata的游戏逻辑;

AllowAbstract="true/false"用于SubclassSoftClass属性,说明抽象类属性是否应显示在类选取器中;
AllowedClasses="Class1, Class2, .."用于FSoftObjectPath属性,逗号分隔的列表,表明要显示在资源选取器中的资源类类型;
AllowPreserveRatio用于Fvector属性;在细节面板中显示此属性时将添加一个比率锁;
ArrayClamp="ArrayProperty"用于整数属性,将可在UI中输入的有效值锁定在0和命名数组属性的长度之间;
AssetBundles用于SoftObjectPtrSoftObjectPath属性,主数据资源中使用的束列表命名,指定此引用属于哪个束的一部分;
BlueprintBaseOnly用于SubclassSoftClass属性,说明蓝图类是否应显示在类选取器中;
BlueprintCompilerGeneratedDefaults属性默认项由蓝图编译器生成,CopyPropertiesForUnrelatedObjects在编译后调用时将不会被复制;
ClampMin="N"用于浮点和整数属性,指定可在属性中输入的最小值N
ClampMax="N"用于浮点和整数属性。指定可在属性中输入的最大值N
ConfigHierarchyEditable此属性被序列化为一个配置(.ini)文件,可在配置层级中的任意处进行设置;
ContentDirFDirectoryPath属性使用,说明将使用Content文件夹中的Slate风格目录选取器来选取路径;
DisplayAfter="PropertyName"在蓝图编辑器中,名为PropertyName的属性后即刻显示此属性;前提是两个属性属于同一类别,则忽略其在源代码中的顺序进行显示;如多个属性有相同的DisplayAfter值和相同的DisplayPriority值,将在指定属性之后,按照自身在标头文件中声明的顺序显示;
DisplayName="Property Name"此属性显示的命名,不显示代码生成的命名;
DisplayPriority="N"如两个属性有相同的DisplayAfter值,或属于同一类别且无DisplayAfter元标签,则此属性将决定其顺序;最高优先级值为1,表示DisplayPriority值为1的属性将在DisplayProirity值为2的属性之上显示;如多个属性有相同的DisplayAfter值,其将按照在标头文件中声明的顺序显示;
DisplayThumbnail="true"说明属性是一个资源类型,其应显示选中资源的缩略图;
EditCondition="BooleanPropertyName"对一个布尔属性进行命名,此属性用于说明此属性的编辑是否被禁用;将"!"放置在属性命名前可颠倒测试;
EditFixedOrder使排列的元素无法通过拖拽来重新排序;
ExactClass="true"结合AllowedClasses用于FSoftObjectPath属性;说明是否只能使用AllowedClasses中指定的准确类,或子类是否同样有效;
ExposeFunctionCategories="Category1, Category2, .."在蓝图编辑器中编译一个函数列表时,指定其函数应被公开的类目的列表;
ExposeOnSpawn="true"指定此属性是否应在此类类型的一个Spawn Actor节点上公开;
FilePathFilter="FileType"FFilePath属性使用;说明在文件选取器中显示的路径过滤器;常规值包括"uasset"和"umap",但这些并非唯一可能的值;
GetByRef使该属性的"Get"蓝图节点返回对属性的常量引用,而不是其值的副本;只对稀疏类数据生效,只能在不存在NoGetter时使用;
HideAlphaChannel用于FcolorFLinearColor属性;说明详细显示属性控件时Alpha属性应为隐藏状态;
HideViewOptions用于SubclassSoftClass属性;隐藏在类选取器中修改显示选项的功能;
InlineEditConditionToggle表示出布尔属性只内联显示为其他属性中的一个编辑条件切换,不应显示在其自身的行上;
LongPackageNameFDirectoryPath属性使用;将路径转换为一个长的包命名;
MakeEditWidget用于变换或旋转体属性,或变换/旋转体的排列;说明属性应在视口中公开为一个可移动控件;
NoGetter防止蓝图为该属性生成一个"get"节点,只对稀疏类数据生效;
ScriptName="DisplayName"在将此类、属性或函数导出到脚本语言时使用的名称;可以包含以启用的名称作为以分号分隔的额外条目;

### UE5.3 配置和使用 Visual Studio 开发环境设置 #### 安装必要的工具和支持包 为了确保 Unreal Engine 5.3 (UE5.3) 和 Visual Studio 的兼容性,需确认已安装 Visual Studio 2022 版本 17.4 或更高版本,并且编译器版本应为 MSVC 14.34.x 或更新[^1]。 #### 设置Visual Studio作为默认编辑器 在UE5软件中通过`Editor Preferences`-> `Source Code`选项卡内指定Visual Studio作为源码处理工具。这步操作能保证当开发者点击“Open in Visual Studio”按钮时能够顺利启动对应的IDE[^3]。 #### 处理加载失败的问题 对于部分模块显示加载失败的情况,可能是因为未完全安装所需的VS组件所致。建议返回到Visual Studio Installer界面,检查是否选择了"C++ game development"工作负载以及其下的子项——特别是针对Unreal引擎优化过的那一套开发资源包;另外还需验证是否有遗漏任何重要的SDK或是工具链更新[^4]。 #### 修改项目属性以改善引用状况 如果发现无法正常索引到虚幻框架内的类定义或其他成员,则可以尝试调整当前解决方案里的配置参数。具体做法是在Visual Studio内部定位至项目的属性页签(`Properties`) -> `Configuration Properties` -> `VC++ Directories` -> `Include Directories`路径处做临时性的增删变动(哪怕只是简单地添加又立刻移除某条记录),以此触发一次刷新动作从而重建整个依赖关系网络[^5]。 ```cpp // 示例:简单的C++ Hello World程序用于测试构建流程是否通畅 #include "pch.h" int main() { std::cout << "Hello, Unreal Engine with VS!"; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值