BoneTimecodeCustomAttributeNameSettings
BoneTimecodeCustomAttributeNameSettings
#Overview
name: BoneTimecodeCustomAttributeNameSettings
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 BoneTimecodeCustomAttributeNameSettings is to define custom attribute names for timecode-related information in animation data, specifically for bone animations. This setting variable is part of the animation system in Unreal Engine 5.
This setting variable is primarily used in the animation subsystem of Unreal Engine, particularly in the Animation Blueprint Library, Movie Scene Tools, and FBX import/export functionality. It’s also defined in the AnimationSettings class, which is part of the Engine module.
The value of this variable is set in the UAnimationSettings class, which inherits from UDeveloperSettings. This means it can be configured through the project settings in the Unreal Engine editor.
BoneTimecodeCustomAttributeNameSettings interacts with several other variables, mainly the individual attribute names for hours, minutes, seconds, frames, subframes, rate, and takename. These are used in various functions to identify and process timecode-related custom attributes in animation data.
Developers must be aware that these settings affect how timecode information is interpreted and processed in bone animations. Changing these settings could impact the import/export of animations, especially when working with external tools or file formats that use timecode data.
Best practices when using this variable include:
- Ensuring consistency across projects and team members to avoid confusion in animation pipelines.
- Documenting any custom naming conventions used for these attributes.
- Considering the impact on existing animations and tools when modifying these settings.
- Using these settings in conjunction with other animation import/export settings for a cohesive workflow.
- Regularly reviewing and updating these settings as needed, especially when integrating with new animation tools or workflows.
#Setting Variables
#References In INI files
Location: <Workspace>/Engine/Config/BaseEngine.ini:3378, section: [/Script/Engine.AnimationSettings]
- INI Section:
/Script/Engine.AnimationSettings
- Raw value:
(HourAttributeName="TCHour",MinuteAttributeName="TCMinute",SecondAttributeName="TCSecond",FrameAttributeName="TCFrame",SubframeAttributeName="TCSubframe",RateAttributeName="TCRate",TakenameAttributeName="Takename")
- Is Array:
False
#References in C++ code
#Callsites
This variable is referenced in the following C++ source code:
#Loc: <Workspace>/Engine/Source/Editor/AnimationBlueprintLibrary/Private/AnimationBlueprintLibrary.cpp:2056
Scope (from outer to inner):
file
function bool UAnimationBlueprintLibrary::EvaluateRootBoneTimecodeAttributesAtTime
Source code excerpt:
if (const UAnimationSettings* AnimationSettings = UAnimationSettings::Get())
{
TCHourAttrName = AnimationSettings->BoneTimecodeCustomAttributeNameSettings.HourAttributeName;
TCMinuteAttrName = AnimationSettings->BoneTimecodeCustomAttributeNameSettings.MinuteAttributeName;
TCSecondAttrName = AnimationSettings->BoneTimecodeCustomAttributeNameSettings.SecondAttributeName;
TCFrameAttrName = AnimationSettings->BoneTimecodeCustomAttributeNameSettings.FrameAttributeName;
TCSubframeAttrName = AnimationSettings->BoneTimecodeCustomAttributeNameSettings.SubframeAttributeName;
TCRateAttrName = AnimationSettings->BoneTimecodeCustomAttributeNameSettings.RateAttributeName;
}
const TArray<FName> TimecodeBoneAttributeNames = { TCHourAttrName, TCMinuteAttrName, TCSecondAttrName, TCFrameAttrName, TCSubframeAttrName, TCRateAttrName };
bool bHasTimecodeBoneAttributes = false;
#Loc: <Workspace>/Engine/Source/Editor/AnimationBlueprintLibrary/Private/AnimationBlueprintLibrary.cpp:2233
Scope (from outer to inner):
file
function bool UAnimationBlueprintLibrary::EvaluateRootBoneTimecodeSubframeAttributeAtTime
Source code excerpt:
if (const UAnimationSettings* AnimationSettings = UAnimationSettings::Get())
{
TCSubframeAttrName = AnimationSettings->BoneTimecodeCustomAttributeNameSettings.SubframeAttributeName;
}
FAnimationAttributeIdentifier SubframeAttributeIdentifier(TCSubframeAttrName, 0, RootBoneName, FFloatAnimationAttribute::StaticStruct());
const FAnimatedBoneAttribute* RootBoneSubframeAttribute = AnimDataModel->FindAttribute(SubframeAttributeIdentifier);
if (!RootBoneSubframeAttribute)
{
#Loc: <Workspace>/Engine/Source/Editor/MovieSceneTools/Private/MovieSceneToolHelpers.cpp:2329
Scope (from outer to inner):
file
function bool MovieSceneToolHelpers::ImportFBXIntoControlRigChannels
Source code excerpt:
if (const UAnimationSettings* AnimationSettings = UAnimationSettings::Get())
{
TCHourAttrName = AnimationSettings->BoneTimecodeCustomAttributeNameSettings.HourAttributeName;
TCMinuteAttrName = AnimationSettings->BoneTimecodeCustomAttributeNameSettings.MinuteAttributeName;
TCSecondAttrName = AnimationSettings->BoneTimecodeCustomAttributeNameSettings.SecondAttributeName;
TCFrameAttrName = AnimationSettings->BoneTimecodeCustomAttributeNameSettings.FrameAttributeName;
}
const TArray<FString> TimecodePropertyNames = {
TCHourAttrName.ToString(),
TCMinuteAttrName.ToString(),
TCSecondAttrName.ToString(),
#Loc: <Workspace>/Engine/Source/Editor/UnrealEd/Private/Fbx/FbxMainExport.cpp:2041
Scope (from outer to inner):
file
namespace UnFbx
function void FFbxExporter::AddTimecodeAttributesAndSetKey
Source code excerpt:
if (const UAnimationSettings* AnimationSettings = UAnimationSettings::Get())
{
TCHourAttrName = AnimationSettings->BoneTimecodeCustomAttributeNameSettings.HourAttributeName;
TCMinuteAttrName = AnimationSettings->BoneTimecodeCustomAttributeNameSettings.MinuteAttributeName;
TCSecondAttrName = AnimationSettings->BoneTimecodeCustomAttributeNameSettings.SecondAttributeName;
TCFrameAttrName = AnimationSettings->BoneTimecodeCustomAttributeNameSettings.FrameAttributeName;
}
const TArray<FString> TimecodePropertyNames = {
TCHourAttrName.ToString(),
TCMinuteAttrName.ToString(),
TCSecondAttrName.ToString(),
#Loc: <Workspace>/Engine/Source/Runtime/Engine/Classes/Animation/AnimationSettings.h:66
Scope (from outer to inner):
file
class class UAnimationSettings : public UDeveloperSettings
Source code excerpt:
These will be included in the list of bone custom attribute names to import. */
UPROPERTY(config, EditAnywhere, Category = AnimationAttributes, meta=(DisplayName="Bone Timecode Animation Attribute name settings"))
FTimecodeCustomAttributeNameSettings BoneTimecodeCustomAttributeNameSettings;
/** List of animation attribute names to import directly on their corresponding bone names. The meaning field allows to contextualize the attribute name and customize tooling for it. */
UPROPERTY(config, EditAnywhere, Category = AnimationAttributes, meta=(DisplayName="Bone Animation Attributes names"))
TArray<FCustomAttributeSetting> BoneCustomAttributesNames;
/** Gets the complete list of bone animation attribute names to consider for import.
#Loc: <Workspace>/Engine/Source/Runtime/Engine/Private/Animation/AnimationSettings.cpp:49
Scope (from outer to inner):
file
function TArray<FString> UAnimationSettings::GetBoneCustomAttributeNamesToImport
Source code excerpt:
{
TArray<FString> AttributeNames = {
BoneTimecodeCustomAttributeNameSettings.HourAttributeName.ToString(),
BoneTimecodeCustomAttributeNameSettings.MinuteAttributeName.ToString(),
BoneTimecodeCustomAttributeNameSettings.SecondAttributeName.ToString(),
BoneTimecodeCustomAttributeNameSettings.FrameAttributeName.ToString(),
BoneTimecodeCustomAttributeNameSettings.SubframeAttributeName.ToString(),
BoneTimecodeCustomAttributeNameSettings.RateAttributeName.ToString(),
BoneTimecodeCustomAttributeNameSettings.TakenameAttributeName.ToString()
};
for (const FCustomAttributeSetting& Setting : BoneCustomAttributesNames)
{
AttributeNames.AddUnique(Setting.Name);
}