StructRedirects
StructRedirects
#Overview
name: StructRedirects
The value of this variable can be defined or overridden in .ini config files. 699
.ini config files referencing this setting variable.
It is referenced in 3
C++ source files.
#Summary
#Usage in the C++ source code
The purpose of StructRedirects is to manage redirections for struct types in Unreal Engine 5. It is primarily used for handling changes in struct names or locations, allowing the engine to maintain compatibility with older code or assets that reference structures under their previous names or paths.
This setting variable is utilized by multiple Unreal Engine subsystems:
- The RigVM system, specifically within the RigVMDeveloper module, uses StructRedirects for converting reroute nodes to dispatch nodes in the animation rigging system.
- The Core Object system employs StructRedirects as part of its core redirection mechanism, which is crucial for maintaining backwards compatibility across engine versions.
The value of this variable is typically set in configuration files or through code initialization. In the CoreRedirects system, it’s initialized as part of the FCoreRedirects::Initialize function.
StructRedirects interacts with other redirection variables such as ObjectRedirects, ClassRedirects, EnumRedirects, FunctionRedirects, PropertyRedirects, and PackageRedirects. These collectively form a comprehensive redirection system in Unreal Engine.
Developers should be aware that:
- Changes to struct names or paths should be reflected in StructRedirects to ensure proper functionality of existing content.
- Incorrect or missing redirects can lead to broken references in projects, potentially causing compilation errors or runtime issues.
Best practices when using this variable include:
- Always update StructRedirects when renaming or moving struct definitions.
- Test thoroughly after adding new redirects to ensure all references are properly resolved.
- Document any changes to struct names or paths, including the corresponding redirects, for future reference.
- Be cautious when removing old redirects, as they may still be necessary for loading older content or projects.
#Setting Variables
#References In INI files
<Workspace>/Engine/Config/BaseEngine.ini:355, section: [CoreRedirects]
<Workspace>/Engine/Config/BaseEngine.ini:356, section: [CoreRedirects]
<Workspace>/Engine/Config/BaseEngine.ini:357, section: [CoreRedirects]
<Workspace>/Engine/Config/BaseEngine.ini:358, section: [CoreRedirects]
<Workspace>/Engine/Config/BaseEngine.ini:359, section: [CoreRedirects]
<Workspace>/Engine/Config/BaseEngine.ini:360, section: [CoreRedirects]
<Workspace>/Engine/Config/BaseEngine.ini:361, section: [CoreRedirects]
<Workspace>/Engine/Config/BaseEngine.ini:362, section: [CoreRedirects]
<Workspace>/Engine/Config/BaseEngine.ini:363, section: [CoreRedirects]
<Workspace>/Engine/Config/BaseEngine.ini:364, section: [CoreRedirects]
<Workspace>/Engine/Config/BaseEngine.ini:365, section: [CoreRedirects]
<Workspace>/Engine/Config/BaseEngine.ini:366, section: [CoreRedirects]
<Workspace>/Engine/Config/BaseEngine.ini:367, section: [CoreRedirects]
<Workspace>/Engine/Config/BaseEngine.ini:368, section: [CoreRedirects]
<Workspace>/Engine/Config/BaseEngine.ini:369, section: [CoreRedirects]
<Workspace>/Engine/Config/BaseEngine.ini:370, section: [CoreRedirects]
<Workspace>/Engine/Config/BaseEngine.ini:372, section: [CoreRedirects]
<Workspace>/Engine/Config/BaseEngine.ini:373, section: [CoreRedirects]
<Workspace>/Engine/Config/BaseEngine.ini:374, section: [CoreRedirects]
<Workspace>/Engine/Config/BaseEngine.ini:436, section: [CoreRedirects]
<Workspace>/Engine/Config/BaseEngine.ini:437, section: [CoreRedirects]
<Workspace>/Engine/Config/BaseEngine.ini:457, section: [CoreRedirects]
<Workspace>/Engine/Config/BaseEngine.ini:477, section: [CoreRedirects]
<Workspace>/Engine/Config/BaseEngine.ini:478, section: [CoreRedirects]
<Workspace>/Engine/Config/BaseEngine.ini:479, section: [CoreRedirects]
<Workspace>/Engine/Config/BaseEngine.ini:513, section: [CoreRedirects]
<Workspace>/Engine/Config/BaseEngine.ini:514, section: [CoreRedirects]
<Workspace>/Engine/Config/BaseEngine.ini:517, section: [CoreRedirects]
<Workspace>/Engine/Config/BaseEngine.ini:544, section: [CoreRedirects]
<Workspace>/Engine/Config/BaseEngine.ini:547, section: [CoreRedirects]
<Workspace>/Engine/Config/BaseEngine.ini:548, section: [CoreRedirects]
... omitting 669 locations ...
#References in C++ code
#Callsites
This variable is referenced in the following C++ source code:
#Loc: <Workspace>/Engine/Plugins/Runtime/RigVM/Source/RigVMDeveloper/Private/RigVMModel/RigVMController.cpp:18824
Scope (from outer to inner):
file
function URigVMNode* URigVMController::ConvertRerouteNodeToDispatch
Source code excerpt:
static const TMap<FString, FString> EmptyRedirects = {};
static const TMap<FString, FString> StructRedirects = {
{
URigVMRerouteNode::ValueName,
FRigVMDispatch_MakeStruct::StructName.ToString(),
}};
static const TMap<FString, FString> ElementsRedirects = {
#Loc: <Workspace>/Engine/Plugins/Runtime/RigVM/Source/RigVMDeveloper/Private/RigVMModel/RigVMController.cpp:18862
Scope (from outer to inner):
file
function URigVMNode* URigVMController::ConvertRerouteNodeToDispatch
Source code excerpt:
{
InputRedirects = &ElementsRedirects;
OutputRedirects = &StructRedirects;
PinToResolveName = FRigVMDispatch_MakeStruct::StructName.ToString();
NewNodeNameSuffix = TEXT("MakeStruct");
}
else if(InTemplateNotation == FRigVMDispatch_BreakStruct().GetTemplateNotation())
{
InputRedirects = &StructRedirects;
OutputRedirects = &ElementsRedirects;
PinToResolveName = FRigVMDispatch_MakeStruct::StructName.ToString();
NewNodeNameSuffix = TEXT("BreakStruct");
}
else if(InTemplateNotation == FRigVMDispatch_ArrayMake().GetTemplateNotation())
{
#Loc: <Workspace>/Engine/Source/Runtime/CoreUObject/Private/UObject/CoreRedirects.cpp:574
Scope (from outer to inner):
file
function void FCoreRedirects::Initialize
Source code excerpt:
ConfigKeyMap.Add(TEXT("ObjectRedirects"), ECoreRedirectFlags::Type_Object);
ConfigKeyMap.Add(TEXT("ClassRedirects"), ECoreRedirectFlags::Type_Class);
ConfigKeyMap.Add(TEXT("StructRedirects"), ECoreRedirectFlags::Type_Struct);
ConfigKeyMap.Add(TEXT("EnumRedirects"), ECoreRedirectFlags::Type_Enum);
ConfigKeyMap.Add(TEXT("FunctionRedirects"), ECoreRedirectFlags::Type_Function);
ConfigKeyMap.Add(TEXT("PropertyRedirects"), ECoreRedirectFlags::Type_Property);
ConfigKeyMap.Add(TEXT("PackageRedirects"), ECoreRedirectFlags::Type_Package);
RegisterNativeRedirects();