UE4 C++入门之路6-PostEditChangeProperty以及和PostInitProperties的区别
Posted 珞珈大胖强TURBO
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UE4 C++入门之路6-PostEditChangeProperty以及和PostInitProperties的区别相关的知识,希望对你有一定的参考价值。
PostEditChangeProperty
前言
之前讲属性初始化的时候说到,如果某个属性需要在设计师在编辑器界面初始化一些值后,依据这些值来计算得出别的属性,或者说有一个函数是在属性初始化后执行的,介绍了PostInitProperties函数可以做这件事,就比如属性有A,B,C,C要在A,B初始化后通过A/B计算得出,那么写在PostInitProperties函数中即可,那么如果我们需要A已经初始化了,但是A只要在编辑器中改变,C就会重新计算需要怎么做呢?这就引出了今天的主角PostEditChangepROPITY----
PostEditChangeProperty
三个属性
UPROPERTY(EditAnywhere,BlueprintReadOnly,Transient)
int32 TotalDamage1 = 56;
UPROPERTY(EditAnywhere, Category = "Damege")
float TotalDamageWithCategory;
UPROPERTY(EditAnywhere,BlueprintReadWrite, Category = "Damege")
float TotalDamageWithCategoryPublicToBp;
需要在.h中覆盖此虚方法
virtual void PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent) override;
然后cpp中实现
#if WITH_EDITOR
void ABpExpendActor::PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent)
Super::PostEditChangeProperty(PropertyChangedEvent);
TotalDamageWithCategoryPublicToBp = TotalDamage / TotalDamageWithCategory;
#endif
加#if WITH_EDITOR的原因是,此方法只有在编辑器模式下才有用,他是为了适应设计师的数据设计而产生的代码,所以在游戏模式下此代码不需要编译,#if WITH_EDITOR这种代码块包围住的代码就是此意思,非编辑器界面不需要编译。
效果如下
当我们在编辑器模式下改变TotalDamage ,TotalDamageWithCategoryPublicToBp 即会随之改变
结束!如果觉得我写的还不错,不要吝啬一个赞奥,这是对我的最大支持了,谢谢大家,下篇再见!
以上是关于UE4 C++入门之路6-PostEditChangeProperty以及和PostInitProperties的区别的主要内容,如果未能解决你的问题,请参考以下文章
UE4 C++入门之路5-热重载Compile(编译项目的三种方式)
UE4 C++入门之路7-UObject,AActor,UActorComponent,UStruct介绍,生命周期介绍
UE4 C++入门之路7-UObject,AActor,UActorComponent,UStruct介绍,生命周期介绍
UE4 C++入门之路7-UObject,AActor,UActorComponent,UStruct介绍,生命周期介绍