关于UE4自定义新建文件模板及在Rider中的使用
UE源码中新建文件模板的位置大致位于:
Engine\Source\Editor\GameProjectGeneration\Private\GameProjectUtils.cpp (maybe 3233 Line)
可参见以下函数:bool GameProjectUtils::GenerateClassHeaderFile( const FString& NewHeaderFileName, const FString UnPrefixedClassName, const FNewClassInfo ParentClassInfo, const TArray<FString>& ClassSpecifierList, const FString& ClassProperties, const FString& ClassFunctionDeclarations, FString& OutSyncLocation, const FModuleContextInfo& ModuleInfo, bool bDeclareConstructor, FText& OutFailReason)bool GameProjectUtils::GenerateClassCPPFile( const FString& NewCPPFileName, const FString UnPrefixedClassName, const FNewClassInfo ParentClassInfo, const TArray<FString>& AdditionalIncludes, const TArray<FString>& PropertyOverrides, const FString& AdditionalMemberDefinitions, FString& OutSyncLocation, const FModuleContextInfo& ModuleInfo, FText& OutFailReason)bool GameProjectUtils::GenerateGameModuleBuildFile( const FString& NewBuildFileName, const FString& ModuleName, const TArray<FString>& PublicDependencyModuleNames, const TArray<FString>& PrivateDependencyModuleNames, FText& OutFailReason)bool GameProjectUtils::GeneratePluginModuleBuildFile( const FString& NewBuildFileName, const FString& ModuleName, const TArray<FString>& PublicDependencyModuleNames, const TArray<FString>& PrivateDependencyModuleNames, FText& OutFailReason, bool bUseExplicitOrSharedPCHs/* = true*/)模板中对应的宏指令表格(欲知后事如何,且听下回分解!):
宏指令
说明
位置
%COPYRIGHT_LINE%
版权信息
.h/.cpp
%UNPREFIXED_CLASS_NAME%
无前缀的类名
.h/.cpp
%PREFIXED_CLASS_NAME%
带前缀的类名
.h/.cpp
%MODULE_NAME%
模块名称
.h/.cpp
%CLASS_MODULE_API_MACRO%
类所在模块的API宏
.h
%UCLASS_SPECIFIER_LIST%
UCLASS()的参数列表
.h
%PREFIXED_BASE_CLASS_NAME%
带前缀的基类名
.h
%EVENTUAL_CONSTRUCTOR_DECLARATION%
.h
%CLASS_PROPERTIES%
.h
%CLASS_FUNCTION_DECLARATIONS%
.h
%BASE_CLASS_INCLUDE_DIRECTIVE%
.h
%PCH_INCLUDE_DIRECTIVE%
.cpp
%MY_HEADER_INCLUDE_DIRECTIVE%
.cpp
%ADDITIONAL_INCLUDE_DIRECTIVES%
.cpp
%EVENTUAL_CONSTRUCTOR_DEFINITION%
.cpp
%ADDITIONAL_MEMBER_DEFINITIONS%
.cpp
关于在Rider中的使用
注意事项: 注意!目前这种方式添加模板会有很大的局限性,请使用以下方式添加模板:
在
D:\UE_4.26\Engine\Content\Editor\Templates
中添加对应的cpp和h文件,然后重新打开项目让rider自动导入模板,建议直接关闭所有rider重新打开一次。如果右键新建看不到的话,检查设置中对应模板的
Add to "New..." menu
是否勾选
目前根据Unreal中的源码审查结果来看:
易知,自定义类型一般会作为一般的UObject处理,即类名前缀已U开头,因此,在模板编辑框中做如下修改,以匹配GameMode类型,同理其他类也可如此处理:
$CLASS_MODULE_API_MACRO$
$PREFIX$$UNPREFIXED_CLASS_NAME$
=>$CLASS_MODULE_API_MACRO$
A$UNPREFIXED_CLASS_NAME$
注意:此时更改完会在项目根目录下生成一个
$PROJECT_NAME$.uproject.DotSettings.user
的文件保存你刚刚更改的内容。如果想要在其他项目中使用可以考虑复制这个文件过去或者使用Rider的Layer层设置将其保存到本机的全局中
参考模板:
GameModeClass.h.template
GameModeClass.cpp.template