UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
NavLinkCustomComponent.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#if UE_ENABLE_INCLUDE_ORDER_DEPRECATED_IN_5_4
6#include "CoreMinimal.h"
7#endif
10#include "Engine/EngineTypes.h"
11#include "NavAreas/NavArea.h"
16#include "NavLinkCustomComponent.generated.h"
17
18
20
30UCLASS(MinimalAPI)
32{
34
35 DECLARE_DELEGATE_ThreeParams(FOnMoveReachedLink, UNavLinkCustomComponent* /*ThisComp*/, UObject* /*PathComp*/, const FVector& /*DestPoint*/);
37
38 // BEGIN INavLinkCustomInterface
39 NAVIGATIONSYSTEM_API virtual void GetLinkData(FVector& LeftPt, FVector& RightPt, ENavLinkDirection::Type& Direction) const override;
40 NAVIGATIONSYSTEM_API virtual void GetSupportedAgents(FNavAgentSelector& OutSupportedAgents) const override;
41 NAVIGATIONSYSTEM_API virtual TSubclassOf<UNavArea> GetLinkAreaClass() const override;
42 NAVIGATIONSYSTEM_API virtual FNavLinkAuxiliaryId GetAuxiliaryId() const override;
43 NAVIGATIONSYSTEM_API virtual FNavLinkId GetId() const override;
44 NAVIGATIONSYSTEM_API virtual void UpdateLinkId(FNavLinkId NewUniqueId) override;
45 NAVIGATIONSYSTEM_API virtual bool IsLinkPathfindingAllowed(const UObject* Querier) const override;
46 NAVIGATIONSYSTEM_API virtual bool OnLinkMoveStarted(UObject* PathComp, const FVector& DestPoint) override;
47 NAVIGATIONSYSTEM_API virtual void OnLinkMoveFinished(UObject* PathComp) override;
48 // END INavLinkCustomInterface
49
50 //~ Begin UNavRelevantComponent Interface
51 NAVIGATIONSYSTEM_API virtual void GetNavigationData(FNavigationRelevantData& Data) const override;
52 NAVIGATIONSYSTEM_API virtual void CalcAndCacheBounds() const override;
53 //~ End UNavRelevantComponent Interface
54
55 //~ Begin UActorComponent Interface
56 NAVIGATIONSYSTEM_API virtual void OnRegister() override;
57 NAVIGATIONSYSTEM_API virtual void OnUnregister() override;
58 NAVIGATIONSYSTEM_API virtual TStructOnScope<FActorComponentInstanceData> GetComponentInstanceData() const override;
59 //~ End UActorComponent Interface
60
61 NAVIGATIONSYSTEM_API void ApplyComponentInstanceData(struct FNavLinkCustomInstanceData* ComponentInstanceData);
62
63 //~ Begin UObject Interface
64 NAVIGATIONSYSTEM_API virtual void Serialize(FArchive& Ar) override;
65 NAVIGATIONSYSTEM_API virtual void PostLoad() override;
66#if WITH_EDITOR
67 NAVIGATIONSYSTEM_API virtual void PostEditImport() override;
68#endif
69 //~ End UObject Interface
70
72 NAVIGATIONSYSTEM_API void SetLinkData(const FVector& RelativeStart, const FVector& RelativeEnd, ENavLinkDirection::Type Direction);
73 NAVIGATIONSYSTEM_API virtual FNavigationLink GetLinkModifier() const;
74
76 NAVIGATIONSYSTEM_API void SetEnabledArea(TSubclassOf<UNavArea> AreaClass);
77 TSubclassOf<UNavArea> GetEnabledArea() const { return EnabledAreaClass; }
78
80 NAVIGATIONSYSTEM_API void SetDisabledArea(TSubclassOf<UNavArea> AreaClass);
81 TSubclassOf<UNavArea> GetDisabledArea() const { return DisabledAreaClass; }
82
83 void SetSupportedAgents(const FNavAgentSelector& InSupportedAgents) { SupportedAgents = InSupportedAgents; }
84 FNavAgentSelector GetSupportedAgents() const { return SupportedAgents; }
85
88 NAVIGATIONSYSTEM_API void AddNavigationObstacle(TSubclassOf<UNavArea> AreaClass, const FVector& BoxExtent, const FVector& BoxOffset = FVector::ZeroVector);
89
91 NAVIGATIONSYSTEM_API void ClearNavigationObstacle();
92
94 NAVIGATIONSYSTEM_API void SetBroadcastData(float Radius, ECollisionChannel TraceChannel = ECC_Pawn, float Interval = 0.0f);
95
96 NAVIGATIONSYSTEM_API void SendBroadcastWhenEnabled(bool bEnabled);
97 NAVIGATIONSYSTEM_API void SendBroadcastWhenDisabled(bool bEnabled);
98
100 NAVIGATIONSYSTEM_API void SetBroadcastFilter(FBroadcastFilter const& InDelegate);
101
103 NAVIGATIONSYSTEM_API void SetEnabled(bool bNewEnabled);
104 bool IsEnabled() const { return bLinkEnabled; }
105
107 NAVIGATIONSYSTEM_API void SetMoveReachedLink(FOnMoveReachedLink const& InDelegate);
108
110 NAVIGATIONSYSTEM_API bool HasMovingAgents() const;
111
113 NAVIGATIONSYSTEM_API FVector GetStartPoint() const;
114
116 NAVIGATIONSYSTEM_API FVector GetEndPoint() const;
117
118 TSubclassOf<UNavArea> GetObstacleAreaClass() const { return ObstacleAreaClass; }
119
121 // helper functions for setting delegates
122
123 template< class UserClass >
124 inline void SetMoveReachedLink(UserClass* TargetOb, typename FOnMoveReachedLink::TMethodPtr< UserClass > InFunc)
125 {
126 SetMoveReachedLink(FOnMoveReachedLink::CreateUObject(TargetOb, InFunc));
127 }
128 template< class UserClass >
129 inline void SetMoveReachedLink(UserClass* TargetOb, typename FOnMoveReachedLink::TConstMethodPtr< UserClass > InFunc)
130 {
131 SetMoveReachedLink(FOnMoveReachedLink::CreateUObject(TargetOb, InFunc));
132 }
133
134 template< class UserClass >
135 inline void SetBroadcastFilter(UserClass* TargetOb, typename FBroadcastFilter::TMethodPtr< UserClass > InFunc)
136 {
137 SetBroadcastFilter(FBroadcastFilter::CreateUObject(TargetOb, InFunc));
138 }
139 template< class UserClass >
140 inline void SetBroadcastFilter(UserClass* TargetOb, typename FBroadcastFilter::TConstMethodPtr< UserClass > InFunc)
141 {
142 SetBroadcastFilter(FBroadcastFilter::CreateUObject(TargetOb, InFunc));
143 }
144
145protected:
146#if WITH_EDITOR
147 NAVIGATIONSYSTEM_API void OnNavAreaRegistered(const UWorld& World, const UClass* NavAreaClass);
148 NAVIGATIONSYSTEM_API void OnNavAreaUnregistered(const UWorld& World, const UClass* NavAreaClass);
149#endif // WITH_EDITOR
150
151protected:
152
153 UE_DEPRECATED(5.3, "LinkIds are now based on FNavLinkId. Use CustomLinkId instead. This Id is no longer used by the engine.")
154 UPROPERTY()
155 uint32 NavLinkUserId;
156
158 UPROPERTY()
159 FNavLinkId CustomLinkId;
160
167 UPROPERTY()
168 FNavLinkAuxiliaryId AuxiliaryCustomLinkId;
169
171 UPROPERTY(EditAnywhere, Category=SmartLink)
172 TSubclassOf<UNavArea> EnabledAreaClass;
173
175 UPROPERTY(EditAnywhere, Category=SmartLink)
176 TSubclassOf<UNavArea> DisabledAreaClass;
177
179 UPROPERTY(EditAnywhere, Category=SmartLink)
180 FNavAgentSelector SupportedAgents;
181
183 UPROPERTY(EditAnywhere, Category=SmartLink)
184 FVector LinkRelativeStart;
185
187 UPROPERTY(EditAnywhere, Category=SmartLink)
188 FVector LinkRelativeEnd;
189
191 UPROPERTY(EditAnywhere, Category=SmartLink)
192 TEnumAsByte<ENavLinkDirection::Type> LinkDirection;
193
195 UPROPERTY(EditAnywhere, Category=SmartLink)
196 uint32 bLinkEnabled : 1;
197
199 UPROPERTY(EditAnywhere, Category=Broadcast)
200 uint32 bNotifyWhenEnabled : 1;
201
203 UPROPERTY(EditAnywhere, Category=Broadcast)
204 uint32 bNotifyWhenDisabled : 1;
205
207 UPROPERTY(EditAnywhere, Category=Obstacle)
208 uint32 bCreateBoxObstacle : 1;
209
211 UPROPERTY(EditAnywhere, Category=Obstacle)
212 FVector ObstacleOffset;
213
215 UPROPERTY(EditAnywhere, Category=Obstacle)
216 FVector ObstacleExtent;
217
219 UPROPERTY(EditAnywhere, Category=Obstacle)
220 TSubclassOf<UNavArea> ObstacleAreaClass;
221
223 UPROPERTY(EditAnywhere, Category=Broadcast)
224 float BroadcastRadius;
225
227 UPROPERTY(EditAnywhere, Category=Broadcast, Meta=(UIMin="0.0", ClampMin="0.0"))
228 float BroadcastInterval;
229
231 UPROPERTY(EditAnywhere, Category=Broadcast)
233
235 FBroadcastFilter OnBroadcastFilter;
236
239
241 FOnMoveReachedLink OnMoveReachedLink;
242
244 FTimerHandle TimerHandle_BroadcastStateChange;
245
247 NAVIGATIONSYSTEM_API void BroadcastStateChange();
248
250 NAVIGATIONSYSTEM_API void CollectNearbyAgents(TArray<UObject*>& NotifyList);
251
252#if WITH_EDITOR
255#endif // WITH_EDITOR
256};
257
259USTRUCT()
261{
263
264public:
267 : FActorComponentInstanceData(SourceComponent)
268 {}
269
270 virtual ~FNavLinkCustomInstanceData() = default;
271
272 virtual bool ContainsData() const override
273 {
274 return true;
275 }
276
278 {
279 Super::ApplyToComponent(Component, CacheApplyPhase);
280
282 {
283 CastChecked<UNavLinkCustomComponent>(Component)->ApplyComponentInstanceData(this);
284 }
285 }
286
287 UPROPERTY()
288 FNavLinkId CustomLinkId;
289
290 UPROPERTY()
291 FNavLinkAuxiliaryId AuxiliaryCustomLinkId;
292};
ECacheApplyPhase
Definition ComponentInstanceDataCache.h:18
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define DECLARE_DELEGATE_TwoParams(DelegateName, Param1Type, Param2Type)
Definition DelegateCombinations.h:57
#define DECLARE_DELEGATE_ThreeParams(DelegateName, Param1Type, Param2Type, Param3Type)
Definition DelegateCombinations.h:66
ECollisionChannel
Definition EngineTypes.h:1088
#define UPROPERTY(...)
UObject definition macros.
Definition ObjectMacros.h:744
#define GENERATED_BODY(...)
Definition ObjectMacros.h:765
#define GENERATED_UCLASS_BODY(...)
Definition ObjectMacros.h:768
#define UCLASS(...)
Definition ObjectMacros.h:776
#define USTRUCT(...)
Definition ObjectMacros.h:746
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition Archive.h:1208
Definition IDelegateInstance.h:14
Definition NavLinkCustomInterface.h:40
Definition Array.h:670
Definition EnumAsByte.h:22
Definition StructOnScope.h:142
Definition SubclassOf.h:30
Definition ActorComponent.h:152
Definition Class.h:3793
Definition NavArea.h:18
Definition NavLinkCustomComponent.h:32
Definition NavRelevantComponent.h:15
Definition Object.h:95
Definition World.h:918
Definition NavLinkDefinition.h:20
Type
Definition NavLinkDefinition.h:22
Definition ComponentInstanceDataCache.h:149
Definition NavAgentSelector.h:9
Definition NavigationTypes.h:107
Definition NavLinkCustomComponent.h:261
FNavLinkCustomInstanceData()=default
virtual ~FNavLinkCustomInstanceData()=default
FNavLinkCustomInstanceData(const UNavLinkCustomComponent *SourceComponent)
Definition NavLinkCustomComponent.h:266
virtual void ApplyToComponent(UActorComponent *Component, const ECacheApplyPhase CacheApplyPhase) override
Definition NavLinkCustomComponent.h:277
virtual bool ContainsData() const override
Definition NavLinkCustomComponent.h:272
Definition NavigationTypes.h:150
Definition NavigationRelevantData.h:40
Definition TimerHandle.h:12
Definition WeakObjectPtrTemplates.h:25
static CORE_API const TVector< double > ZeroVector
Definition Vector.h:79