AxisConfig

AxisConfig

#Overview

name: AxisConfig

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

It is referenced in 18 C++ source files.

#Summary

#Usage in the C++ source code

The purpose of AxisConfig is to configure and manage axis properties for input handling in Unreal Engine 5. It is primarily used for setting up and controlling input axis behavior, such as sensitivity, dead zones, and other properties related to input axes.

AxisConfig is mainly utilized by the Input System in Unreal Engine 5. Based on the provided callsites, it is referenced in the following subsystems and modules:

  1. Input System (Engine/Source/Runtime/Engine)
  2. Control Rig Editor (Engine/Plugins/Animation/ControlRig)
  3. Skeletal Mesh Editing Tools (Engine/Plugins/Experimental/MeshModelingToolsetExp)
  4. Skeletal Debug Rendering (Engine/Source/Runtime/Engine)

The value of this variable is typically set in the UInputSettings class, which is responsible for storing and managing input-related settings. It can be modified through the project settings in the Unreal Engine editor or programmatically.

AxisConfig interacts with other input-related variables and systems, such as:

  1. ActionMappings and AxisMappings for defining input bindings
  2. InputAxisProperties for storing specific axis properties
  3. PlayerInput class for managing player-specific input settings

Developers should be aware of the following when using AxisConfig:

  1. Changes to AxisConfig may require rebuilding keymaps to take effect
  2. It affects both editor and runtime behavior of input axes
  3. Platform-specific settings may override or complement AxisConfig

Best practices when using AxisConfig include:

  1. Use the UInputSettings class to manage and modify AxisConfig
  2. Ensure consistency between AxisConfig and other input-related settings
  3. Consider platform-specific requirements when configuring axis properties
  4. Use the appropriate editor tools (e.g., Project Settings) to modify AxisConfig when possible
  5. Be mindful of performance implications when frequently modifying axis properties at runtime

#Setting Variables

#References In INI files

<Workspace>/Engine/Config/BaseInput.ini:27, section: [/Script/Engine.InputSettings]
<Workspace>/Engine/Config/BaseInput.ini:28, section: [/Script/Engine.InputSettings]
<Workspace>/Engine/Config/BaseInput.ini:29, section: [/Script/Engine.InputSettings]
<Workspace>/Engine/Config/BaseInput.ini:30, section: [/Script/Engine.InputSettings]
<Workspace>/Engine/Config/BaseInput.ini:31, section: [/Script/Engine.InputSettings]
<Workspace>/Engine/Config/BaseInput.ini:32, section: [/Script/Engine.InputSettings]
<Workspace>/Engine/Config/BaseInput.ini:33, section: [/Script/Engine.InputSettings]
<Workspace>/Projects/Lyra/Config/DefaultInput.ini:13, section: [/Script/Engine.InputSettings]
<Workspace>/Projects/Lyra/Config/DefaultInput.ini:14, section: [/Script/Engine.InputSettings]
<Workspace>/Projects/Lyra/Config/DefaultInput.ini:15, section: [/Script/Engine.InputSettings]
<Workspace>/Projects/Lyra/Config/DefaultInput.ini:16, section: [/Script/Engine.InputSettings]
<Workspace>/Projects/Lyra/Config/DefaultInput.ini:17, section: [/Script/Engine.InputSettings]
<Workspace>/Projects/Lyra/Config/DefaultInput.ini:18, section: [/Script/Engine.InputSettings]
<Workspace>/Projects/Lyra/Config/DefaultInput.ini:19, section: [/Script/Engine.InputSettings]
<Workspace>/Projects/Lyra/Config/DefaultInput.ini:20, section: [/Script/Engine.InputSettings]
<Workspace>/Projects/Lyra/Config/DefaultInput.ini:21, section: [/Script/Engine.InputSettings]
<Workspace>/Projects/Lyra/Config/DefaultInput.ini:22, section: [/Script/Engine.InputSettings]
<Workspace>/Projects/Lyra/Config/DefaultInput.ini:23, section: [/Script/Engine.InputSettings]

#References in C++ code

#Callsites

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

#Loc: <Workspace>/Engine/Plugins/Animation/ControlRig/Source/ControlRigEditor/Private/Editor/ControlRigEditorEditMode.cpp:148

Scope (from outer to inner):

file
function     void FControlRigEditorEditMode::Render

Source code excerpt:


	// get size setting for bone drawing
	FBoneAxisDrawConfig AxisConfig;
	float BoneRadius = 1.0f;
	if (FAnimationViewportClient* AnimViewportClient = static_cast<FAnimationViewportClient*>(Viewport->GetClient()))
	{
		BoneRadius = AnimViewportClient->GetBoneDrawSize();
	}

#Loc: <Workspace>/Engine/Plugins/Animation/ControlRig/Source/ControlRigEditor/Private/Editor/ControlRigEditorEditMode.cpp:178

Scope (from outer to inner):

file
function     void FControlRigEditorEditMode::Render

Source code excerpt:


		// draw the little coordinate frame inside the bone ONLY if selected or affected
		AxisConfig.bDraw = bIsAffected|| bIsSelected;

		// draw cone to each child
		// but use a different color if this bone is NOT selected, but the child IS selected
		ChildPositions.Reset();
		ChildColors.Reset();
		ChildrenIndices = Hierarchy->GetChildren(ElementIndex);

#Loc: <Workspace>/Engine/Plugins/Animation/ControlRig/Source/ControlRigEditor/Private/Editor/ControlRigEditorEditMode.cpp:209

Scope (from outer to inner):

file
function     void FControlRigEditorEditMode::Render

Source code excerpt:

			SDPG_Foreground,
			BoneRadius,
			AxisConfig);
		if (Hierarchy->GetFirstParent(ElementIndex) == INDEX_NONE)
		{
			SkeletalDebugRendering::DrawConeConnection(PDI, BoneTransform.GetLocation(), FVector::Zero(), BoneRadius, FLinearColor::Red);
		}
		PDI->SetHitProxy(nullptr);
	}

#Loc: <Workspace>/Engine/Plugins/Experimental/MeshModelingToolsetExp/Source/MeshModelingToolsEditorOnlyExp/Private/SkeletalMesh/SkeletonEditingTool.cpp:1727

Scope (from outer to inner):

file
function     void USkeletonEditingTool::Render

Source code excerpt:

		DrawConfig.SelectedBoneColor = SelectedBoneColor;
		DrawConfig.ParentOfSelectedBoneColor = ParentOfSelectedBoneColor;
		DrawConfig.AxisConfig.Thickness = Properties->AxisThickness;
		DrawConfig.AxisConfig.Length = Properties->AxisLength;
	
	FPrimitiveDrawInterface* PDI = RenderAPI->GetPrimitiveDrawInterface();

	const IPrimitiveComponentBackedTarget* TargetComponent = Cast<IPrimitiveComponentBackedTarget>(Target);
	const FTransform ComponentTransform = TargetComponent->GetWorldTransform();
	

#Loc: <Workspace>/Engine/Source/Runtime/Engine/Classes/GameFramework/InputSettings.h:26

Scope (from outer to inner):

file
class        class UInputSettings : public UObject

Source code excerpt:

	/** Properties of Axis controls */
	UPROPERTY(config, EditAnywhere, EditFixedSize, Category="Bindings", meta=(ToolTip="List of Axis Properties"), AdvancedDisplay)
	TArray<struct FInputAxisConfigEntry> AxisConfig;

	/**
	 * Platform specific settings for Input.
	 * @see UInputPlatformSettings
	 */
	UPROPERTY(EditAnywhere, Category = "Platforms")

#Loc: <Workspace>/Engine/Source/Runtime/Engine/Classes/GameFramework/PlayerInput.h:437

Scope (from outer to inner):

file
class        class UPlayerInput : public UObject

Source code excerpt:


	/** This player's version of the Axis Properties */
	TArray<struct FInputAxisConfigEntry> AxisConfig;

	/** This player's version of the Action Mappings */
	TArray<struct FInputActionKeyMapping> ActionMappings;

	/** This player's version of Axis Mappings */
	TArray<struct FInputAxisKeyMapping> AxisMappings;

#Loc: <Workspace>/Engine/Source/Runtime/Engine/Classes/GameFramework/PlayerInput.h:449

Scope: file

Source code excerpt:

	TArray<FName> InvertedAxis;

	/** Gets the axis properties for a given AxisKey.  Returns if true if AxisKey was found in the AxisConfig array. */
	ENGINE_API bool GetAxisProperties(const FKey AxisKey, FInputAxisProperties& AxisProperties);

	/** Gets the axis properties for a given AxisKey.  Returns if true if AxisKey was found in the AxisConfig array. */
	ENGINE_API void SetAxisProperties(const FKey AxisKey, const FInputAxisProperties& AxisProperties);

	/** Exec function to change the mouse sensitivity */
	ENGINE_API void SetMouseSensitivity(const float SensitivityX, const float SensitivityY);

	/** Sets both X and Y axis sensitivity to the supplied value. */

#Loc: <Workspace>/Engine/Source/Runtime/Engine/Private/CheatManager.cpp:1198

Scope (from outer to inner):

file
function     void UCheatManager::SetMouseSensitivityToDefault

Source code excerpt:

	{
		// find default sensitivity restore to that
		for (const FInputAxisConfigEntry& AxisConfigEntry : GetDefault<UInputSettings>()->AxisConfig)
		{
			const FKey AxisKey = AxisConfigEntry.AxisKeyName;
			if (AxisKey == EKeys::MouseX)
			{
				PlayerInput->SetMouseSensitivity(AxisConfigEntry.AxisProperties.Sensitivity,PlayerInput->GetMouseSensitivityY());
			}

#Loc: <Workspace>/Engine/Source/Runtime/Engine/Private/SkeletalDebugRendering.cpp:369

Scope (from outer to inner):

file
namespace    SkeletalDebugRendering
function     void DrawBonesInternal

Source code excerpt:

	}

	FBoneAxisDrawConfig AxisConfig = DrawConfig.AxisConfig;
	
	// spin through all required bones and render them
	const float BoneRadius = DrawConfig.BoneDrawSize;
	for (int32 Index = 0; Index < RequiredBones.Num(); ++Index)
	{
		const int32 BoneIndex = RequiredBones[Index];

#Loc: <Workspace>/Engine/Source/Runtime/Engine/Private/SkeletalDebugRendering.cpp:397

Scope (from outer to inner):

file
namespace    SkeletalDebugRendering
function     void DrawBonesInternal

Source code excerpt:


		// draw the little coordinate frame inside the bone ONLY if selected or affected
		AxisConfig.bDraw = bIsAffected || bIsSelected;

		// draw cone to each child
		// but use a different color if this bone is NOT selected, but the child IS selected
		TArray<FVector> ChildPositions;
		TArray<FLinearColor> ChildColors;
		for (int32 ChildIndex = 0; ChildIndex < NumBones; ++ChildIndex)

#Loc: <Workspace>/Engine/Source/Runtime/Engine/Private/SkeletalDebugRendering.cpp:436

Scope (from outer to inner):

file
namespace    SkeletalDebugRendering
function     void DrawBonesInternal

Source code excerpt:

			SDPG_Foreground,
			BoneRadius,
			AxisConfig);
		
		// special case for root connection to origin
		if (GetParentIndex(BoneIndex) == INDEX_NONE)
		{
			SkeletalDebugRendering::DrawConeConnection(PDI, BoneTransform.GetLocation(), ComponentOrigin, BoneRadius, FLinearColor::Red);
		}

#Loc: <Workspace>/Engine/Source/Runtime/Engine/Private/UserInterface/InputSettings.cpp:104

Scope (from outer to inner):

file
function     void UInputSettings::PopulateAxisConfigs

Source code excerpt:

{
	TMap<FName, int32> UniqueAxisConfigNames;
	for (int32 Index = 0; Index < AxisConfig.Num(); ++Index)
	{
		UniqueAxisConfigNames.Add(AxisConfig[Index].AxisKeyName, Index);
	}

	for (int32 Index = AxisConfig.Num() - 1; Index >= 0; --Index)
	{
		const int32 UniqueAxisIndex = UniqueAxisConfigNames.FindChecked(AxisConfig[Index].AxisKeyName);
		if (UniqueAxisIndex != Index)
		{
			AxisConfig.RemoveAtSwap(Index);
		}
	}

#if WITH_EDITOR
	TArray<FKey> AllKeys;
	EKeys::GetAllKeys(AllKeys);

#Loc: <Workspace>/Engine/Source/Runtime/Engine/Private/UserInterface/InputSettings.cpp:128

Scope (from outer to inner):

file
function     void UInputSettings::PopulateAxisConfigs

Source code excerpt:

			NewAxisConfigEntry.AxisKeyName = Key.GetFName();
			NewAxisConfigEntry.AxisProperties.DeadZone = 0.f; // Override the default so that we keep existing behavior
			AxisConfig.Add(NewAxisConfigEntry);
		}
	}
#endif
}

void UInputSettings::AddInternationalConsoleKey()

#Loc: <Workspace>/Engine/Source/Runtime/Engine/Private/UserInterface/InputSettings.cpp:198

Scope (from outer to inner):

file
function     void UInputSettings::PostEditChangeChainProperty

Source code excerpt:


	if (MemberPropertyName == GET_MEMBER_NAME_CHECKED(UInputSettings, ActionMappings) || MemberPropertyName == GET_MEMBER_NAME_CHECKED(UInputSettings, AxisMappings) ||
		MemberPropertyName == GET_MEMBER_NAME_CHECKED(UInputSettings, AxisConfig) || MemberPropertyName == GET_MEMBER_NAME_CHECKED(UInputSettings, SpeechMappings))
	{
		ForceRebuildKeymaps();
		FEditorDelegates::OnActionAxisMappingsChanged.Broadcast();
	}
	else if (MemberPropertyName == GET_MEMBER_NAME_CHECKED(UInputSettings, bEnableGestureRecognizer))
	{

#Loc: <Workspace>/Engine/Source/Runtime/Engine/Private/UserInterface/PlayerInput.cpp:554

Scope (from outer to inner):

file
function     void UPlayerInput::SetAxisProperties

Source code excerpt:

void UPlayerInput::SetAxisProperties(const FKey AxisKey, const FInputAxisProperties& InAxisProperties)
{
	for (FInputAxisConfigEntry& AxisConfigEntry : AxisConfig)
	{
		if (AxisConfigEntry.AxisKeyName == AxisKey)
		{
			AxisConfigEntry.AxisProperties = InAxisProperties;
		}
	}

#Loc: <Workspace>/Engine/Source/Runtime/Engine/Private/UserInterface/PlayerInput.cpp:772

Scope (from outer to inner):

file
function     void UPlayerInput::ForceRebuildingKeyMaps

Source code excerpt:

		if (InputSettings)
		{
			AxisConfig = InputSettings->AxisConfig;
			AxisMappings = InputSettings->GetAxisMappings();
			ActionMappings = InputSettings->GetActionMappings();

			//append on speech action mappings
			const TArray<FInputActionSpeechMapping>& SpeechMappings = InputSettings->GetSpeechMappings();
			for (const FInputActionSpeechMapping& SpeechMapping : SpeechMappings)

#Loc: <Workspace>/Engine/Source/Runtime/Engine/Private/UserInterface/PlayerInput.cpp:2132

Scope (from outer to inner):

file
function     void UPlayerInput::ConditionalInitAxisProperties

Source code excerpt:

	{
		// move stuff from config structure to our runtime structure
		for (const FInputAxisConfigEntry& AxisConfigEntry : AxisConfig)
		{
			const FKey AxisKey = AxisConfigEntry.AxisKeyName;
			if (AxisKey.IsValid())
			{
				AxisProperties.Add(AxisKey, AxisConfigEntry.AxisProperties);
			}

#Loc: <Workspace>/Engine/Source/Runtime/Engine/Public/SkeletalDebugRendering.h:44

Scope: file

Source code excerpt:

	FLinearColor SelectedBoneColor;
	FLinearColor ParentOfSelectedBoneColor;
	FBoneAxisDrawConfig AxisConfig;
};

namespace SkeletalDebugRendering
{
	static const int32 NumSphereSides = 10;
	static const int32 NumConeSides = 4;