栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

UE4 C++入门之路6-PostEditChangeProperty以及和PostInitProperties的区别

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

UE4 C++入门之路6-PostEditChangeProperty以及和PostInitProperties的区别

PostEditChangeProperty
  • 前言
    • 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 即会随之改变

结束!如果觉得我写的还不错,不要吝啬一个赞奥,这是对我的最大支持了,谢谢大家,下篇再见!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/444147.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号