ExcludedProperties
ExcludedProperties
#Overview
name: ExcludedProperties
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 5
C++ source files.
#Summary
#Usage in the C++ source code
The purpose of ExcludedProperties is to specify a list of properties that should be excluded from certain operations or processes within the Unreal Engine, particularly in the context of data synchronization and asset management.
This setting variable is primarily used in two Unreal Engine subsystems:
- Concert Sync Core: A plugin for collaborative work in Unreal Engine.
- Asset Registry: A system for managing and tracking assets in the engine.
The value of this variable is set in the UConcertSyncConfig class, which is likely configured through project settings or configuration files.
In the Concert Sync Core, ExcludedProperties interacts with other variables such as AllowedTransientProperties and ExcludedPropertyTypes. These variables work together to determine which properties should be considered for synchronization in collaborative workflows.
In the Asset Registry, ExcludedProperties is used alongside RequiredProperties to filter dependencies when iterating through dependency lists.
Developers must be aware that:
- ExcludedProperties directly impacts which properties are synchronized in collaborative environments.
- It affects how dependencies are tracked and managed in the Asset Registry.
- Modifying this variable can have significant effects on data synchronization and asset management.
Best practices when using this variable include:
- Carefully consider which properties should be excluded to maintain data integrity and consistency.
- Document any changes to ExcludedProperties to ensure team members understand the implications.
- Test thoroughly after making changes to ensure that excluded properties don’t break functionality or cause unexpected behavior.
- Use in conjunction with other related variables (like AllowedTransientProperties) for more granular control over property handling.
- Regularly review and update the list of excluded properties as project requirements evolve.
#Setting Variables
#References In INI files
Location: <Workspace>/Engine/Plugins/Developer/Concert/ConcertSync/ConcertSyncCore/Config/BaseConcertSyncCore.ini:12, section: [/Script/ConcertSyncCore.ConcertSyncConfig]
- INI Section:
/Script/ConcertSyncCore.ConcertSyncConfig
- Raw value:
"/Script/Engine.InstanceCacheDataBase:UniqueTransientPackage"
- Is Array:
True
#References in C++ code
#Callsites
This variable is referenced in the following C++ source code:
#Loc: <Workspace>/Engine/Plugins/Developer/Concert/ConcertSync/ConcertSyncCore/Source/ConcertSyncCore/Private/ConcertSyncArchives.cpp:43
Scope (from outer to inner):
file
namespace ConcertSyncUtil
function bool CanExportProperty
Source code excerpt:
&& (!Property->HasAnyPropertyFlags(CPF_NonTransactional))
&& (!Property->HasAnyPropertyFlags(CPF_Transient) || PropertyPathIsInList(SyncConfig->AllowedTransientProperties))
&& (!PropertyPathIsInList(SyncConfig->ExcludedProperties))
&& (!PropertyTypeIsInList(SyncConfig->ExcludedPropertyTypes));
}
void GatherDefaultSubobjectPaths(const UObject* Obj, TSet<FSoftObjectPath>& OutSubobjects)
{
ForEachObjectWithOuter(Obj, [&OutSubobjects](UObject* InnerObj)
#Loc: <Workspace>/Engine/Plugins/Developer/Concert/ConcertSync/ConcertSyncCore/Source/ConcertSyncCore/Public/ConcertSyncSettings.h:107
Scope (from outer to inner):
file
class class UConcertSyncConfig : public UObject
Source code excerpt:
*/
UPROPERTY(config, EditAnywhere, Category="Transaction Settings", meta=(AllowedClasses="/Script/CoreUObject.Property"))
TArray<TFieldPath<FProperty>> ExcludedProperties;
/**
* Array of property types that we should filtered out.
*/
UPROPERTY(config, EditAnywhere, Category="Transaction Settings")
TArray<FName> ExcludedPropertyTypes;
#Loc: <Workspace>/Engine/Source/Runtime/AssetRegistry/Private/DependsNode.cpp:49
Scope (from outer to inner):
file
function void IterateDependencyList
Source code excerpt:
{
EDependencyProperty RequiredProperties = SearchFlags.Required & CategoryMask;
EDependencyProperty ExcludedProperties = SearchFlags.Excluded & CategoryMask;
typedef TPropertyCombinationSet<FlagWidth> FCombinationSet;
constexpr uint32 FlagSetWidth = FCombinationSet::StorageBitCount;
for (int32 ListIndex = 0; ListIndex < Dependencies.Num(); ++ListIndex)
{
FDependsNode* DependsNode = Dependencies[ListIndex];
FCombinationSet DependsNodeFlagsSet(*FlagBits, ListIndex * FlagSetWidth);
#Loc: <Workspace>/Engine/Source/Runtime/AssetRegistry/Private/DependsNode.cpp:60
Scope (from outer to inner):
file
function void IterateDependencyList
Source code excerpt:
{
EDependencyProperty DependencyProperties = ByteToProperties(static_cast<uint8>(DependencyFlagBits));
if (((DependencyProperties & RequiredProperties) == RequiredProperties) && ((DependencyProperties & ExcludedProperties) == EDependencyProperty::None))
{
InCallback(DependsNode, ListCategory, DependencyProperties, bDuplicate);
}
bDuplicate = true;
}
}
#Loc: <Workspace>/Engine/Source/Runtime/AssetRegistry/Private/DependsNode.cpp:90
Scope (from outer to inner):
file
function void IterateDependencyList
lambda-function
Source code excerpt:
{
EDependencyProperty RequiredProperties = SearchFlags.Required & CategoryMask;
EDependencyProperty ExcludedProperties = SearchFlags.Excluded & CategoryMask;
typedef TPropertyCombinationSet<FlagWidth> FCombinationSet;
constexpr uint32 FlagSetWidth = FCombinationSet::StorageBitCount;
FDependsNode* DependsNode = Dependencies[ListIndex];
FCombinationSet DependsNodeFlagsSet(*FlagBits, ListIndex * FlagSetWidth);
bool bDuplicate = false;
for (uint32 DependencyFlagBits : DependsNodeFlagsSet)
{
EDependencyProperty DependencyProperties = ByteToProperties(static_cast<uint8>(DependencyFlagBits));
if (((DependencyProperties & RequiredProperties) == RequiredProperties) && ((DependencyProperties & ExcludedProperties) == EDependencyProperty::None))
{
InCallback(DependsNode, ListCategory, DependencyProperties, bDuplicate);
}
bDuplicate = true;
}
}