bSerializeManageDependencies

bSerializeManageDependencies

#Overview

name: bSerializeManageDependencies

The value of this variable can be defined or overridden in .ini config files. 1 .ini config file referencing this setting variable.

It is referenced in 6 C++ source files.

#Summary

#Usage in the C++ source code

The purpose of bSerializeManageDependencies is to control the serialization of managed dependencies in the Unreal Engine 5 Asset Registry system. This setting variable is primarily used for managing asset dependencies and their serialization process.

The Unreal Engine subsystem that relies on this setting variable is the Asset Registry, which is part of the engine’s core asset management system. This can be seen from the file paths and namespaces in the provided code snippets, such as “AssetRegistry/Private/AssetRegistry.cpp” and “namespace UE::AssetRegistry”.

The value of this variable is typically set in the engine configuration files (INI files). As seen in the InitializeSerializationOptionsFromIni function, it’s read from the “AssetRegistry” section of the engine INI file:

EngineIni->GetBool(TEXT("AssetRegistry"), TEXT("bSerializeManageDependencies"), Options.bSerializeManageDependencies);

This variable interacts with other serialization-related variables in the Asset Registry system, such as bSerializeDependencies, bSerializeSearchableNameDependencies, and bSerializePackageData. These variables collectively control what types of data are serialized in the Asset Registry.

Developers must be aware that this variable affects the serialization of managed dependencies, which are likely related to primary assets in Unreal Engine. When set to true, it includes these dependencies in the serialization process, which can impact performance and file size.

Best practices when using this variable include:

  1. Carefully consider the trade-offs between serialization completeness and performance/file size.
  2. Ensure it’s properly set in the engine configuration files for different build configurations (development, shipping, etc.).
  3. Be consistent in its usage across related Asset Registry serialization options to maintain data integrity.
  4. Test thoroughly with different settings to ensure the desired behavior in asset loading and management.
  5. Consider the impact on build times and runtime performance when enabling or disabling this option.

#Setting Variables

#References In INI files

Location: <Workspace>/Engine/Config/BaseEngine.ini:2738, section: [AssetRegistry]

#References in C++ code

#Callsites

This variable is referenced in the following C++ source code:

#Loc: <Workspace>/Engine/Source/Runtime/AssetRegistry/Private/AssetRegistry.cpp:1311

Scope (from outer to inner):

file
namespace    UE::AssetRegistry
namespace    Utils
function     void InitializeSerializationOptionsFromIni

Source code excerpt:

		EngineIni->GetBool(TEXT("AssetRegistry"), TEXT("bSerializeDependencies"), Options.bSerializeDependencies);
		EngineIni->GetBool(TEXT("AssetRegistry"), TEXT("bSerializeNameDependencies"), Options.bSerializeSearchableNameDependencies);
		EngineIni->GetBool(TEXT("AssetRegistry"), TEXT("bSerializeManageDependencies"), Options.bSerializeManageDependencies);
		EngineIni->GetBool(TEXT("AssetRegistry"), TEXT("bSerializePackageData"), Options.bSerializePackageData);
		EngineIni->GetBool(TEXT("AssetRegistry"), TEXT("bFilterAssetDataWithNoTags"), Options.bFilterAssetDataWithNoTags);
		EngineIni->GetBool(TEXT("AssetRegistry"), TEXT("bFilterDependenciesWithNoTags"), Options.bFilterDependenciesWithNoTags);
		EngineIni->GetBool(TEXT("AssetRegistry"), TEXT("bFilterSearchableNames"), Options.bFilterSearchableNames);
	}

#Loc: <Workspace>/Engine/Source/Runtime/AssetRegistry/Private/AssetRegistryState.cpp:1406

Scope (from outer to inner):

file
function     bool FAssetRegistryState::Save

Source code excerpt:

			if (Node->GetIdentifier().IsPackage() 
				|| (Options.bSerializeSearchableNameDependencies && Node->GetIdentifier().IsValue())
				|| (Options.bSerializeManageDependencies && Node->GetIdentifier().GetPrimaryAssetId().IsValid()))
			{
				Dependencies.Add(Node);
			}
		}
		Algo::Sort(Dependencies, [](FDependsNode* A, FDependsNode* B) { return A->GetIdentifier().LexicalLess(B->GetIdentifier()); });
		int32 NumDependencies = Dependencies.Num();

#Loc: <Workspace>/Engine/Source/Runtime/AssetRegistry/Private/DependsNode.cpp:643

Scope (from outer to inner):

file
function     void FDependsNode::SerializeSave

Source code excerpt:

	WriteDependencies(PackageDependencies, &PackageFlags, PackageFlagSetWidth, false);
	WriteDependencies(Options.bSerializeSearchableNameDependencies ? NameDependencies : FDependsNodeList(), nullptr, 0, false);
	WriteDependencies(Options.bSerializeManageDependencies ? ManageDependencies : FDependsNodeList(), Options.bSerializeManageDependencies ? &ManageFlags : nullptr, ManageFlagSetWidth, false);
	WriteDependencies(Referencers, nullptr, 0, true);
}

void FDependsNode::SerializeLoad(FArchive& Ar, const TUniqueFunction<FDependsNode* (int32)>& GetNodeFromSerializeIndex, FLoadScratch& Scratch)
{
	Ar << Identifier;

#Loc: <Workspace>/Engine/Source/Runtime/AssetRegistry/Private/DependsNodeTest.cpp:1116

Scope (from outer to inner):

file
function     bool FDependsNodeTest::RunTest

Source code excerpt:

				FAssetRegistrySerializationOptions Options(UE::AssetRegistry::ESerializationTarget::ForDevelopment);
				Options.bSerializeSearchableNameDependencies = bKeepNameDependencies;
				Options.bSerializeManageDependencies = bKeepManageDependencies;

				TArray<uint8> Bytes;
				{
					FMemoryWriter Writer(Bytes);
					A.SerializeSave(Writer, GetSerializeIndexFromNode, SaveScratch, Options);
					if (KeepNode2 == EKeepNode2::KeepAlways || KeepNode2 == EKeepNode2::KeepSaveButNotLoad)

#Loc: <Workspace>/Engine/Source/Runtime/AssetRegistry/Public/AssetRegistry/AssetRegistryState.h:59

Scope: file

Source code excerpt:


	/** True rather to load/save dependency info for Manage references,  */
	bool bSerializeManageDependencies = false;

	/** If true will read/write FAssetPackageData */
	bool bSerializePackageData = false;

	/** True if CookFilterlistTagsByClass is an allow list. False if it is a deny list. */
	bool bUseAssetRegistryTagsAllowListInsteadOfDenyList = false;

#Loc: <Workspace>/Engine/Source/Runtime/AssetRegistry/Public/AssetRegistry/AssetRegistryState.h:102

Scope (from outer to inner):

file
function     void InitForDevelopment

Source code excerpt:

	void InitForDevelopment()
	{
		bSerializeAssetRegistry = bSerializeDependencies = bSerializeSearchableNameDependencies = bSerializeManageDependencies = bSerializePackageData = true;
		DisableFilters();
	}
};

struct FAssetRegistryLoadOptions
{