Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[unreal]Fix:增加对Class Metadata的修改检查来修复删除元数据不会被检测为更改而不重新编译的问题 #1733

Merged
merged 1 commit into from
May 24, 2024

Conversation

YBYCS
Copy link
Contributor

@YBYCS YBYCS commented May 24, 2024

问题:将@uclass.umeta(uclass.DisplayName="展示名字")中的uclass.DisplayName="展示名字"整个删除,不会触发重新编译蓝图(修改内容和增加没问题)
原因:bool FPEMetaDataUtils::AddMetaData(UField* InField, TMap<FName, FString>& InMetaData) 只对收集到的metadata只做了增加和修改的检查没有处理删除的检查,导致删除metadata不会被识别为发生更改,进而导致没有重新编译
解决方法:按直觉来说应该是在这个函数增加一个检查删除的逻辑,但是该函数使用的蓝图生成类中拥有的元数据可能包含了父类和其他一些定义的元数据,如HideCategories、BlueprintType,如果还是同样的思路来比较蓝图生成类拥有的元数据和收集到的元数据,就需要移除掉这些外来的元数据(即不是在ts文件中定义的元数据),但是这样的话和引擎的耦合比较大,即需要完全查明所有不在ts文件中定义的但是在蓝图生成类中有的(还可能因为版本不同而不同),故采取了另一种方法:
考虑到编译蓝图完全依赖于蓝图类,我们可以只检查puerts本身实现的能够正确配置的元数据是否被删除了即可,即SyncClassToBlueprint这个函数中同步的那些元数据(其他不在该函数赋值的元数据,本身即使编译了也不会正确赋值到蓝图中诸如一些弃用的或者是在编译过程中会被覆盖的元数据)

@chexiongsheng chexiongsheng merged commit e8b8ce0 into Tencent:master May 24, 2024
11 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants