[UE4]属性标签(总结)
来源:互联网 发布:知乎日报rss地址 编辑:程序博客网 时间:2024/05/21 14:51
UE4版本:4.14.3
-内容太多,未完待续,会补充-
属性标签
Edit/Visibility标识符
- EditAnywhere
- EditInstanceOnly
- EditDefaultsOnly
- VisibleAnywhere
- VisibleInstanceOnly
- VisibleDefaultsOnly
蓝图相关
- BlueprintReadOnly
- BlueprintReadWrite
- Category
- BlueprintAssignable
- BlueprintCallable
- Instanced
保存和配置文件
- SaveGame
- Config
- GlobalConfig
蓝图编辑控制
- NoClear
- EditFixedSize
- SimpleDisplay
- AdvancedDisplay
- AssetRegistrySearchable
网络
- Replicated
- ReplicatedUsing
- RepRetry
废除
- EditInline
- Localized
- Const
编辑器
- NonTransactional
- Interp(Matinee可改变)
未完成内容
DuplicateTransient
Export
NoExport
Native
Ref
SerializeText
Transient
1. Edit/Visibility标识符
此类标识符指定了属性的修改权限和可见性。
允许修改:EditAnywhere、EditInstanceOnly、EditDefaultsOnly。
不允许修改:VisibleAnywhere、VisibleInstanceOnly、VisibleDefaultsOnly。
这6种标签一个属性只能使用其中之一,使用多个会有如下错误:
Found more than one edit/visibility specifier (EditDefaultsOnly), only one is allowed
接下来,用代码和图的形式,直观的感受他们的区别吧。需要注意的概念是,属性编辑面板可以在2个地方找到,Instance代表在Level中的对象的属性编辑面板,Default代表打开的蓝图编辑器属性编辑面板。
public: UPROPERTY(EditAnywhere) int32 EditAnywhere_Param = 0; UPROPERTY(EditInstanceOnly) int32 EditInstanceOnly_Param = 0; UPROPERTY(EditDefaultsOnly) int32 EditDefaultsOnly_Param = 0; UPROPERTY(VisibleAnywhere) int32 VisibleAnywhere_Param = 0; UPROPERTY(VisibleInstanceOnly) int32 VisibleInstanceOnly_Param = 0; UPROPERTY(VisibleDefaultsOnly) int32 VisibleDefaultsOnly_Param = 0;
2. 蓝图 读/写 标识符
设置此类标签,在使用蓝图时,可以对变量进行Get/Set操作。接下来,关于BlueprintReadOnly和BlueprintReadWrite的使用方法,用代码和图的形式,直观的感受他们的区别吧。
public: UPROPERTY(BlueprintReadOnly) int32 BlueprintReadOnly_Param = 0; UPROPERTY(BlueprintReadWrite) int32 BlueprintReadWrite_Param = 0;
3. Category
对变量设置分类。用法如下。
public: UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AAA") int32 Category_Param = 0;
4. NoClear
防止该对象引用在编辑器中被设置为None。隐藏编辑器的清除(以及浏览)按钮。
需要使用此标签还需要注意以下几点:
- 对指针变量有用,对值类型无用
- 需要在代码中指定非空默认值
public: UPROPERTY(EditAnywhere, NoClear) TSubclassOf<AActor> NoClear_Param;
下面,是指针类型,但不给默认值的情况,可以使用黄色箭头置为空。
下面,是在代码中设置默认值,防止出现None。
APropertyExampleActor::APropertyExampleActor(){ PrimaryActorTick.bCanEverTick = true; NoClear_Param = APropertyExampleActor::StaticClass();}
5. EditFixedSize
此容器变量不能在蓝图中修改长度,即不能增加,减少元素。适用于蓝图的TArray,TSet,TMap。
在4.14.3版本中,蓝图的TSet和TMap还属于试验性功能,可以在EditorPreferences中搜索“tmap”找到对应选项开启。4.15后可以在蓝图中正式使用。
public: UPROPERTY(EditAnywhere, EditFixedSize) TMap<int32,int32> EditFixedSize_Param;
EditFixedSize_Param.Add(1, 2);EditFixedSize_Param.Add(2, 2);EditFixedSize_Param.Add(5, 2);
下面是未使用此标签的情况。
下面是使用标签的情况。
6. SimpleDisplay
使属性在细节面板中默认为可见。各种尝试,不知道有什么用,谁知道告诉我啊。
7. AdvancedDisplay
属性被显示在细节面板的高级下拉框中。如图。
8. NonTransactional
表示变更为此变量值将不会被包含在编辑器的撤消/重做历史中。
9. Config and GlobalConfig
标记了此标识符的属性,可以在配置文件中读写,下面这篇博客文章写得非常详细。
转载内容 - Jerish的博客 - UE4 Config配置文件详解
10. Replicated
此变量应通过节点网络进行复制。
相关文档与博客:
Unreal官方文档 - 属性复制
Unreal官方文档 - 条件属性复制
UE Wiki - Replication
基本够用的简单方法是,如下,使用DOREPLIFETIME宏别忘了包含UnrealNetwork.h头文件哦。
//PropertyExampleActor.h filepublic: virtual void GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const override; UPROPERTY(Replicated) int32 Replicated_Param;
//PropertyExampleActor.cpp fileAPropertyExampleActor::APropertyExampleActor(){ bReplicates = true;}void APropertyExampleActor::GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const{ DOREPLIFETIME(APropertyExampleActor, Replicated_Param);}
11. ReplicatedUsing
此变量应通过节点网络进行复制,在其接受到 Callback 函数后执行、
使用方法: ReplicatedUsing=FunctionName(函数名称)
注意,C++中服务端控制对象的变量在改变时,不会自动调用FunctionName方法。
详细内容可以查看这篇博客。
XIAOZHI0999的专栏 - ue4 RepNotify ReplicatedUsing 区别
例子:
//PropertyExampleActor.hpublic: UPROPERTY(BlueprintReadWrite, ReplicatedUsing = OnRep_ExampleFunc) int32 ReplicatedUsing_Param = 0; UFUNCTION() void OnRep_ExampleFunc();
//PropertyExampleActor.cppvoid APropertyExampleActor::GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const{ DOREPLIFETIME(APropertyExampleActor, ReplicatedUsing_Param);}void APropertyExampleActor::OnRep_ExampleFunc(){ UKismetSystemLibrary::PrintString(GetWorld(), TEXT("OnRep called. Variable is changed."));}
12. RepRetry
仅用于结构体属性。如无法被完全发送,请重试复制此属性(例如,对象引用尚无法通过节点网络来进行序列化)。对于简单引用来说,这是一个默认值,但对结构体来说,由于带宽消耗,很多情况下我们不需要。所以除非此标识被定义,否则其会被禁用。
13. SaveGame
找了蛮多资料,没搞定,不知道怎么用这个,如果谁研究出来了,请您告诉我,多谢。
保存信息功能其实有别的解决方案,根据实际情况进行取舍选择:
- SaveGame类
- Config文件读写
- 序列化与反序列化,文件存储
- 数据库读写
14. 委托方法
蓝图中想要调用C++的委托方法,需要BlueprintCallable,BlueprintAssignable,二者可以结合使用。
BlueprintCallable
标记除了委托类型之外的类型,编译会报:
‘BlueprintCallable’ is only allowed on a property when it is a multicast delegate
正确的用法如下。
// some include file...DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FOneParamDelegate, int32, ParamInt);UCLASS()class TESTSCREEN_API APropertyExampleActor : public AActor{ GENERATED_BODY()public: UPROPERTY(BlueprintCallable) FOneParamDelegate BlueprintCallable_Param;}
在蓝图中是可以发消息到这个委托方法中的。
BlueprintAssignable
这个标识符,使C++的委托可以在蓝图中绑定。用法如下。
public: UPROPERTY(BlueprintAssignable) FOneParamDelegate BlueprintAssignable_Param;
15. Interp
表示该值可由Matinee的浮点或向量属性轨迹来随时间驱动,经过尝试,针对float和FVector类型有效,其他类型无效。
public: UPROPERTY(Interp) int32 InterpInt_Param; // 虽然不会报错,但是没有用 UPROPERTY(Interp) float InterpFloat_Param;
在Matinee中使用
Matinee应该使用的越来越少了,被Sequence代替了。
在Sequence中使用
16. Instanced
官方:仅能用于对象属性。当此类的实例被创建时,它会被赋予一个默认分配给此变量的对象的独特拷贝。用于对在类默认属性中定义的子对象进行实例化。类似EditInline和Export修饰符。
首先这个标识符只能修饰对象指针。
public: UPROPERTY(Instanced, EditAnywhere) AMyInstanceActor* Instanced_Param;
下面这种类型变量是不行的。
public: //error : 'Instanced' cannot be applied to class properties (UClass* or TSubclassOf<>) UPROPERTY(Instanced, EditAnywhere) TSubclassOf<AMyInstanceActor> failed;
在AMyInstanceActor类中增加一个用于测试的变量,InstanceParam_Int。
//MyInstanceActor.hpublic: // 测试instanced标识符 UPROPERTY(EditAnywhere) int32 InstanceParam_Int;
运行后执行SpawnTemp方法,在场景中创建一个AMyInstanceActor实例,赋值给Instanced_Param。
void APropertyExampleActor::SpawnTemp(){ FTransform spawnTransform = FTransform(FVector(1.0f)); FActorSpawnParameters spawnParam; spawnParam.SpawnCollisionHandlingOverride = ESpawnActorCollisionHandlingMethod::AlwaysSpawn; Instanced_Param = GetWorld()->SpawnActor<AMyInstanceActor>(AMyInstanceActor::StaticClass(), spawnTransform, spawnParam);}
从图中可以看到,我可以在属性编辑器面板,编辑类实例的属性。
17. AssetRegistrySearchable
使对象可以在已注册的资源中选择和查找,对值类型无效。
public: UPROPERTY(AssetRegistrySearchable, EditAnywhere) AActor* AssetRegistrySearchable_Param; //AMyInstanceActor AssetRegistrySearchable_Param; //TSubclassOf<AActor> AssetRegistrySearchable_Param;
修饰AActor*时的表现。
修饰AMyInstanceActor*时的表现,仅能查找指定类。
修饰TSubclassOf< AActor >
未完待续
- [UE4]属性标签(总结)
- [UE4]方法标签(总结)
- <!DOCTYPE> 标签属性总结
- 表格标签、标签属性、样式属性总结
- HTML5表单标签及标签属性总结
- HTML5表单标签及标签属性总结
- html <a>标签属性总结
- Android layout布局属性、标签属性总结
- html部分标签总结+属性总结
- C++ UE4属性
- HTML标签总结(常用属性代码)
- html5 总结-新增重要标签及属性
- label 标签属性的总结归纳
- HTML:a标签中href属性总结
- HTML常用的标签及属性总结
- UE4 技巧总结
- 转贴:UE4 代码总结
- UE4 代码总结
- 数据库设计(基于 MySQL)
- 序列化的几种方式
- 子串
- php 反射 依赖注入
- CodeForces 797B Odd sum
- [UE4]属性标签(总结)
- Lua 字符串
- jsp注释与html注释,file,virtual
- ajax的同步与异步
- java中File类的getPath(),getAbsolutePath(),getCanonicalPath()区别
- linux_011之fcntl.h头文件
- matlab与c语言编程之代码互相翻译,正确理解matlab的索引
- Jenkins进阶系列之——05FTP publisher plugin插件
- B1013. 数素数 (20')