UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
AnimSubsystem_SharedLinkedAnimLayers.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2#pragma once
3
4#include "CoreMinimal.h"
8#include "AnimSubsystem_SharedLinkedAnimLayers.generated.h"
9
10class UAnimInstance;
11class USkeletalMeshComponent;
12
13// Define to 1 for more extensive runtime validation of linked anim layers data
14#define LINKEDANIMLAYERSDATA_INTEGRITYCHECKS 0
15
16// Linked layer instance info
17USTRUCT()
19{
21
24
25 bool IsPersistent() const { return bIsPersistent; }
26 void SetPersistence(bool bInIsPersistent) { bIsPersistent = bInIsPersistent; }
27
28 // Mark a function as linked
29 void AddLinkedFunction(FName Function, UAnimInstance* AnimInstance);
30 // Unmark a function as linked
31 void RemoveLinkedFunction(FName Function);
32
33 // Return map of currently linked functions
34 const TMap<FName, TWeakObjectPtr<UAnimInstance>>& GetLinkedFunctions() const {return LinkedFunctions;}
35
38
40
42 TMap<FName, TWeakObjectPtr<UAnimInstance>> LinkedFunctions;
43
44 // True if this is a persistent instance that remains alive when unlinked
45 bool bIsPersistent = false;
46};
47
48// Linked layer class info
49USTRUCT()
51{
53
56
57 bool IsPersistent() const { return bIsPersistent; }
58 void SetPersistence(bool bInIsPersistent);
59
60 // Find instance data for given instance if it exists, returns nullptr otherwise
62
63 // Find an existing instance to link given function if one is available, creates one otherwise
64 UAnimInstance* FindOrAddInstanceForLinking(UAnimInstance* OwningInstance, FName Function, bool& IsNewInstance);
65
67 const TArray<FLinkedAnimLayerInstanceData>& GetInstancesData() const {return InstancesData;}
68
69 void RemoveLinkedFunction(UAnimInstance* AnimInstance, FName Function);
70
71private:
72 // Add given instance
74 // Remove given instance
75 void RemoveInstance(UAnimInstance* AnimInstance);
76
78
81
82 // If true, one instance will be kept alive when unlinked so that we don't recreate it from scratch next time it's linked
83 bool bIsPersistent;
84};
85
86// Data for shared linked anim instances module
87USTRUCT()
89{
91
92 // Retrieve subsystem from skeletal mesh component
93 static ENGINE_API FAnimSubsystem_SharedLinkedAnimLayers* GetFromMesh(USkeletalMeshComponent* SkelMesh);
94
95 // Clear all linked layers data
96 ENGINE_API void Reset();
97
98 // Check if a given anim instance is shared
99 bool IsSharedInstance(const UAnimInstance* AnimInstance) { return FindInstanceData(AnimInstance) != nullptr; }
100
101 const TArray<FLinkedAnimLayerClassData>& GetClassesData() const { return ClassesData; }
102
103 // Add a class to the persistent class array, insuring one instance is kept alive even when unlinked
105
106 // Remove a class from the persistent class array.
107 ENGINE_API void RemovePersistentAnimLayerClass(TSubclassOf<UAnimInstance> AnimInstanceClass);
108
109 // Add a linked function to be managed by a shared anim instance. Returns the instance to bind to the function
111
112 // Remove a linked function, cleaning the instance if it's not used anymore and not persistent
113 ENGINE_API void RemoveLinkedFunction(UAnimInstance* AnimInstance, FName Function);
114
115private:
116 // Find instance data for given instance if it exists, returns nullptr otherwise
118
119 // Find class data for given anim class if it exists, returns nullptr otherwise
121
122 // Find or add ClassData for given AnimClass
124
127
128 // Anim instance classes that should be kept alive even when unlinked
130 TArray<TSubclassOf<UAnimInstance>> PersistentClasses;
131};
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define UPROPERTY(...)
UObject definition macros.
Definition ObjectMacros.h:744
#define GENERATED_BODY(...)
Definition ObjectMacros.h:765
#define USTRUCT(...)
Definition ObjectMacros.h:746
#define GENERATED_USTRUCT_BODY(...)
Definition ObjectMacros.h:767
Definition NameTypes.h:617
Definition Array.h:670
Definition UnrealString.h.inl:34
Definition SubclassOf.h:30
Definition AnimInstance.h:353
@ false
Definition radaudio_common.h:23
Definition AnimSubsystemInstance.h:10
Definition AnimSubsystem_SharedLinkedAnimLayers.h:89
void AddPersistentAnimLayerClass(TSubclassOf< UAnimInstance > AnimInstanceClass)
Definition AnimSubsystem_SharedLinkedAnimLayers.h:104
bool IsSharedInstance(const UAnimInstance *AnimInstance)
Definition AnimSubsystem_SharedLinkedAnimLayers.h:99
const TArray< FLinkedAnimLayerClassData > & GetClassesData() const
Definition AnimSubsystem_SharedLinkedAnimLayers.h:101
Definition AnimSubsystem_SharedLinkedAnimLayers.h:51
const TArray< FLinkedAnimLayerInstanceData > & GetInstancesData() const
Definition AnimSubsystem_SharedLinkedAnimLayers.h:67
TSubclassOf< UAnimInstance > GetClass() const
Definition AnimSubsystem_SharedLinkedAnimLayers.h:66
bool IsPersistent() const
Definition AnimSubsystem_SharedLinkedAnimLayers.h:57
FLinkedAnimLayerClassData(TSubclassOf< UAnimInstance > AnimClass, bool bInIsPersistent)
Definition AnimSubsystem_SharedLinkedAnimLayers.h:55
Definition AnimSubsystem_SharedLinkedAnimLayers.h:19
const TMap< FName, TWeakObjectPtr< UAnimInstance > > & GetLinkedFunctions() const
Definition AnimSubsystem_SharedLinkedAnimLayers.h:34
void SetPersistence(bool bInIsPersistent)
Definition AnimSubsystem_SharedLinkedAnimLayers.h:26
bool IsPersistent() const
Definition AnimSubsystem_SharedLinkedAnimLayers.h:25
FLinkedAnimLayerInstanceData(UAnimInstance *AnimInstance, bool bInIsPersistent)
Definition AnimSubsystem_SharedLinkedAnimLayers.h:23
Definition ObjectPtr.h:488
Definition WeakObjectPtrTemplates.h:25