UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
BlackboardData.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2#pragma once
3
4#include "CoreMinimal.h"
6#include "InputCoreTypes.h"
9#include "Engine/DataAsset.h"
10#include "BlackboardData.generated.h"
11
13USTRUCT()
15{
17
18 UPROPERTY(EditAnywhere, Category=Blackboard)
19 FName EntryName;
20
21#if WITH_EDITORONLY_DATA
22 UPROPERTY(EditAnywhere, Category=Blackboard, Meta=(ToolTip="Optional description to explain what this blackboard entry does."))
23 FString EntryDescription;
24
25 UPROPERTY(EditAnywhere, Category=Blackboard)
27#endif // WITH_EDITORONLY_DATA
28
30 UPROPERTY(EditAnywhere, Instanced, Category = Blackboard, meta = (AllowEditInlineCustomization))
32
34 UPROPERTY(EditAnywhere, Category=Blackboard)
35 uint32 bInstanceSynced : 1;
36
38 : KeyType(nullptr), bInstanceSynced(0)
39 {}
40
41 AIMODULE_API bool operator==(const FBlackboardEntry& Other) const;
42};
43
44UCLASS(BlueprintType, AutoExpandCategories=(Blackboard), MinimalAPI)
46{
49
51 UPROPERTY(EditAnywhere, Category=Parent)
53
54#if WITH_EDITORONLY_DATA
56 UPROPERTY(VisibleDefaultsOnly, Transient, Category=Parent)
58#endif
59
61 UPROPERTY(EditAnywhere, Category=Blackboard)
63
64private:
65 UPROPERTY()
66 uint32 bHasSynchronizedKeys : 1;
67
68public:
69
70 inline bool HasSynchronizedKeys() const { return bHasSynchronizedKeys; }
71
73 AIMODULE_API bool IsKeyInstanceSynced(FBlackboard::FKey KeyID) const;
74
76 AIMODULE_API FBlackboard::FKey GetKeyID(const FName& KeyName) const;
77
79 AIMODULE_API FName GetKeyName(FBlackboard::FKey KeyID) const;
80
83
85 AIMODULE_API int32 GetNumKeys() const;
86
87 inline FBlackboard::FKey GetFirstKeyID() const { return FirstKeyID; }
88
89 bool IsValidKey(FBlackboard::FKey KeyID) const { return KeyID != FBlackboard::InvalidKey && (int32)KeyID < GetNumKeys(); }
90
92 AIMODULE_API const FBlackboardEntry* GetKey(FBlackboard::FKey KeyID) const;
93
94 const TArray<FBlackboardEntry>& GetKeys() const { return Keys; }
95
96 AIMODULE_API virtual void PostInitProperties() override;
97 AIMODULE_API virtual void PostLoad() override;
98#if WITH_EDITOR
99 AIMODULE_API virtual void PostEditChangeProperty(struct FPropertyChangedEvent& PropertyChangedEvent) override;
100#endif
101 AIMODULE_API void PropagateKeyChangesToDerivedBlackboardAssets();
102
104 AIMODULE_API bool IsValid() const;
105
109 template<class T>
110 T* UpdatePersistentKey(const FName& KeyName)
111 {
112 T* CreatedKeyType = NULL;
113
114 const FBlackboard::FKey KeyID = InternalGetKeyID(KeyName, DontCheckParentKeys);
115 if (KeyID == FBlackboard::InvalidKey && Parent == NULL)
116 {
117 FBlackboardEntry Entry;
118 Entry.EntryName = KeyName;
119
121 Entry.KeyType = CreatedKeyType;
122
123 Keys.Add(Entry);
124 MarkPackageDirty();
125 PropagateKeyChangesToDerivedBlackboardAssets();
126 }
127 else if (KeyID != FBlackboard::InvalidKey && Parent != NULL)
128 {
129 const FBlackboard::FKey KeyIndex = (int32)KeyID - (int32)FirstKeyID;
130 Keys.RemoveAt(KeyIndex);
131 MarkPackageDirty();
132 PropagateKeyChangesToDerivedBlackboardAssets();
133 }
134
135 return CreatedKeyType;
136 }
137
138#if WITH_EDITOR
142#endif
143
147
149 AIMODULE_API void UpdateParentKeys();
150
152 AIMODULE_API void UpdateKeyIDs();
153
154 AIMODULE_API void UpdateIfHasSynchronizedKeys();
155
157 AIMODULE_API void UpdateDeprecatedKeys();
158
161
164 {
165 return this == &OtherAsset || IsChildOf(OtherAsset) || OtherAsset.IsChildOf(*this)
166 || (Parent && OtherAsset.Parent && Parent->IsRelatedTo(*OtherAsset.Parent));
167 }
168
169protected:
170
176
179
181 AIMODULE_API FBlackboard::FKey InternalGetKeyID(const FName& KeyName, EKeyLookupMode LookupMode) const;
182};
#define NULL
Definition oodle2base.h:134
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define DECLARE_MULTICAST_DELEGATE_OneParam(DelegateName, Param1Type)
Definition DelegateCombinations.h:49
#define UPROPERTY(...)
UObject definition macros.
Definition ObjectMacros.h:744
#define GENERATED_UCLASS_BODY(...)
Definition ObjectMacros.h:768
#define UCLASS(...)
Definition ObjectMacros.h:776
#define USTRUCT(...)
Definition ObjectMacros.h:746
#define GENERATED_USTRUCT_BODY(...)
Definition ObjectMacros.h:767
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition NameTypes.h:617
Definition Array.h:670
void RemoveAt(SizeType Index, EAllowShrinking AllowShrinking=UE::Core::Private::AllowShrinkingByDefault< AllocatorType >())
Definition Array.h:2083
UE_NODEBUG UE_FORCEINLINE_HINT SizeType Add(ElementType &&Item)
Definition Array.h:2696
Definition SubclassOf.h:30
Definition BlackboardData.h:46
T * UpdatePersistentKey(const FName &KeyName)
Definition BlackboardData.h:110
FBlackboard::FKey FirstKeyID
Definition BlackboardData.h:178
bool HasSynchronizedKeys() const
Definition BlackboardData.h:70
static AIMODULE_API FKeyUpdate OnUpdateKeys
Definition BlackboardData.h:146
bool IsRelatedTo(const UBlackboardData &OtherAsset) const
Definition BlackboardData.h:163
EKeyLookupMode
Definition BlackboardData.h:172
@ CheckParentKeys
Definition BlackboardData.h:173
@ DontCheckParentKeys
Definition BlackboardData.h:174
bool IsValidKey(FBlackboard::FKey KeyID) const
Definition BlackboardData.h:89
FBlackboard::FKey GetFirstKeyID() const
Definition BlackboardData.h:87
const TArray< FBlackboardEntry > & GetKeys() const
Definition BlackboardData.h:94
Definition BlackboardKeyType.h:24
Definition DataAsset.h:21
constexpr FKey InvalidKey
Definition BlackboardKey.h:33
Definition BlackboardData.h:15
TObjectPtr< UBlackboardKeyType > KeyType
Definition BlackboardData.h:31
FName EntryName
Definition BlackboardData.h:19
Definition BlackboardKey.h:18
Definition UnrealType.h:6865
Definition ObjectPtr.h:488