UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
CrowdManager.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CrowdManagerBase.h"
6#include "CoreMinimal.h"
7#include "Stats/Stats.h"
9#include "UObject/Object.h"
11#include "Tickable.h"
12#include "DrawDebugHelpers.h"
13#if UE_ENABLE_INCLUDE_ORDER_DEPRECATED_IN_5_4
15#endif
16#include "CrowdManager.generated.h"
17
18class ANavigationData;
19class dtCrowd;
23class UCrowdManager;
24struct dtCrowdAgent;
27struct FNavMeshPath;
28
29#if WITH_RECAST
32class dtCrowd;
33struct dtCrowdAgent;
36#endif
37
40
71USTRUCT()
73{
75
76 UPROPERTY(EditAnywhere, Category=Crowd)
77 float VelocityBias;
78
79 UPROPERTY(EditAnywhere, Category=Crowd)
80 float DesiredVelocityWeight;
81
82 UPROPERTY(EditAnywhere, Category=Crowd)
83 float CurrentVelocityWeight;
84
85 UPROPERTY(EditAnywhere, Category=Crowd)
86 float SideBiasWeight;
87
88 UPROPERTY(EditAnywhere, Category=Crowd)
89 float ImpactTimeWeight;
90
91 UPROPERTY(EditAnywhere, Category=Crowd)
92 float ImpactTimeRange;
93
94 // index in SamplingPatterns array or 0xff for adaptive sampling
95 UPROPERTY(EditAnywhere, Category=Crowd)
96 uint8 CustomPatternIdx;
97
98 // adaptive sampling: number of divisions per ring
99 UPROPERTY(EditAnywhere, Category=Crowd)
100 uint8 AdaptiveDivisions;
101
102 // adaptive sampling: number of rings
103 UPROPERTY(EditAnywhere, Category=Crowd)
104 uint8 AdaptiveRings;
105
106 // adaptive sampling: number of iterations at best velocity
107 UPROPERTY(EditAnywhere, Category=Crowd)
108 uint8 AdaptiveDepth;
109
111 VelocityBias(0.4f), DesiredVelocityWeight(2.0f), CurrentVelocityWeight(0.75f),
112 SideBiasWeight(0.75f), ImpactTimeWeight(2.5f), ImpactTimeRange(2.5f),
113 CustomPatternIdx(0xff), AdaptiveDivisions(7), AdaptiveRings(2), AdaptiveDepth(5)
114 {}
115};
116
117USTRUCT()
119{
121
122 UPROPERTY(EditAnywhere, Category=Crowd)
123 TArray<float> Angles;
124
125 UPROPERTY(EditAnywhere, Category = Crowd)
126 TArray<float> Radii;
127
128 AIMODULE_API void AddSample(float AngleInDegrees, float NormalizedRadius);
129 AIMODULE_API void AddSampleWithMirror(float AngleInDegrees, float NormalizedRadius);
130};
131
133{
134#if WITH_RECAST
137#endif
138
141
144
147
150
153
154 FCrowdAgentData() : PrevPoly(0), AgentIndex(-1), PathOptRemainingTime(0), bIsSimulated(false), bWantsPathOptimization(false) {}
155
156 bool IsValid() const { return AgentIndex >= 0; }
157 AIMODULE_API void ClearFilter();
158};
159
161{
163
165 virtual void Tick(float DeltaTime);
166 virtual bool IsTickable() const { return Owner.IsValid(); }
167 virtual bool IsTickableInEditor() const { return true; }
168 virtual bool IsTickableWhenPaused() const { return true; }
169 virtual TStatId GetStatId() const;
170};
171
172UCLASS(config = Engine, defaultconfig, MinimalAPI)
174{
176
177public:
179
180 AIMODULE_API virtual void Tick(float DeltaTime) override;
181 AIMODULE_API virtual void BeginDestroy() override;
182
184 AIMODULE_API void RegisterAgent(ICrowdAgentInterface* Agent);
185
187 AIMODULE_API void UnregisterAgent(const ICrowdAgentInterface* Agent);
188
190 AIMODULE_API void UpdateAgentParams(const ICrowdAgentInterface* Agent) const;
191
193 AIMODULE_API void UpdateAgentState(const ICrowdAgentInterface* Agent) const;
194
196 AIMODULE_API void OnAgentFinishedCustomLink(const ICrowdAgentInterface* Agent) const;
197
200
202 AIMODULE_API bool SetAgentMoveDirection(const UCrowdFollowingComponent* AgentComponent, const FVector& MoveDirection) const;
203
206
208 AIMODULE_API void ClearAgentMoveTarget(const UCrowdFollowingComponent* AgentComponent) const;
209
211 AIMODULE_API void PauseAgent(const UCrowdFollowingComponent* AgentComponent) const;
212
214 AIMODULE_API void ResumeAgent(const UCrowdFollowingComponent* AgentComponent, bool bForceReplanPath = true) const;
215
217 AIMODULE_API bool IsAgentValid(const UCrowdFollowingComponent* AgentComponent) const;
218 AIMODULE_API bool IsAgentValid(const ICrowdAgentInterface* Agent) const;
219
221 AIMODULE_API int32 GetNumNearbyAgents(const ICrowdAgentInterface* Agent) const;
222
224 AIMODULE_API int32 GetNearbyAgentLocations(const ICrowdAgentInterface* Agent, TArray<FVector>& OutLocations) const;
225
227 AIMODULE_API bool GetAvoidanceConfig(int32 Idx, FCrowdAvoidanceConfig& Data) const;
228
230 AIMODULE_API bool SetAvoidanceConfig(int32 Idx, const FCrowdAvoidanceConfig& Data);
231
233 AIMODULE_API void SetOffmeshConnectionPruning(bool bRemoveFromCorridor);
234
236 AIMODULE_API void SetSingleAreaVisibilityOptimization(bool bEnable);
237
239 AIMODULE_API void AdjustAgentPathStart(const UCrowdFollowingComponent* AgentComponent, const FNavMeshPath* Path, int32& PathStartIdx) const;
240
241#if WITH_EDITOR
242 AIMODULE_API virtual void PostEditChangeProperty(struct FPropertyChangedEvent& PropertyChangedEvent) override;
243
244 AIMODULE_API void DebugTick() const;
245#endif
246
248 AIMODULE_API void OnNavMeshUpdate();
249
252 AIMODULE_API virtual bool IsSuitableNavData(const ANavigationData& NavData) const;
253
257 AIMODULE_API virtual void OnNavDataRegistered(ANavigationData& NavData) override;
258
262 AIMODULE_API virtual void OnNavDataUnregistered(ANavigationData& NavData) override;
263
264 virtual void CleanUp(float DeltaTime) override {};
265
266 const ANavigationData* GetNavData() const { return MyNavData; }
267
268 AIMODULE_API UWorld* GetWorld() const override;
269
270 static AIMODULE_API UCrowdManager* GetCurrent(UObject* WorldContextObject);
271 static AIMODULE_API UCrowdManager* GetCurrent(UWorld* World);
272
273protected:
274
277
279 UPROPERTY(config, EditAnywhere, Category = Config)
281
283 UPROPERTY(config, EditAnywhere, Category = Config)
285
287 UPROPERTY(config, EditAnywhere, Category = Config)
288 int32 MaxAgents;
289
291 UPROPERTY(config, EditAnywhere, Category = Config)
292 float MaxAgentRadius;
293
295 UPROPERTY(config, EditAnywhere, Category = Config)
296 int32 MaxAvoidedAgents;
297
299 UPROPERTY(config, EditAnywhere, Category = Config)
300 int32 MaxAvoidedWalls;
301
303 UPROPERTY(config, EditAnywhere, Category = Config)
304 float NavmeshCheckInterval;
305
307 UPROPERTY(config, EditAnywhere, Category = Config)
308 float PathOptimizationInterval;
309
311 UPROPERTY(config, EditAnywhere, Category = Config)
312 float SeparationDirClamp;
313
315 UPROPERTY(config, EditAnywhere, Category = Config)
316 float PathOffsetRadiusMultiplier;
317
318 uint32 bPruneStartedOffmeshConnections : 1;
319 uint32 bSingleAreaVisibilityOptimization : 1;
320 uint32 bEarlyReachTestOptimization : 1;
321 uint32 bAllowPathReplan : 1;
322
324 UPROPERTY(config, EditAnywhere, Category = Config)
325 uint32 bResolveCollisions : 1;
326
329
331 TArray<uint8> AgentFlags;
332
333#if WITH_RECAST
336
340#endif
341
342#if WITH_EDITOR
344#endif // WITH_EDITOR
345
347 AIMODULE_API virtual void UpdateNavData();
348
350 AIMODULE_API virtual void UpdateAvoidanceConfig();
351
353 AIMODULE_API virtual void PostProximityUpdate();
354
356 AIMODULE_API virtual void PostMovePointUpdate();
357
361 AIMODULE_API void SetNavData(ANavigationData* NavData, const bool bFindNewNavDataIfNull = true);
362
363#if WITH_RECAST
367
370
373
376
378 AIMODULE_API void UpdateSelectedDebug(const ICrowdAgentInterface* Agent, int32 AgentIndex) const;
379
380 AIMODULE_API void CreateCrowdManager();
382
383#if ENABLE_DRAW_DEBUG
385 AIMODULE_API void DrawDebugCorners(const dtCrowdAgent* CrowdAgent) const;
386 AIMODULE_API void DrawDebugCollisionSegments(const dtCrowdAgent* CrowdAgent) const;
387 AIMODULE_API void DrawDebugPath(const dtCrowdAgent* CrowdAgent) const;
388 AIMODULE_API void DrawDebugVelocityObstacles(const dtCrowdAgent* CrowdAgent) const;
389 AIMODULE_API void DrawDebugPathOptimization(const dtCrowdAgent* CrowdAgent) const;
390 AIMODULE_API void DrawDebugNeighbors(const dtCrowdAgent* CrowdAgent) const;
392#endif // ENABLE_DRAW_DEBUG
393
394#endif
395};
#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
TSharedPtr< const FNavigationQueryFilter, ESPMode::ThreadSafe > FSharedConstNavQueryFilter
Definition CrowdManager.h:39
uint64 NavNodeRef
Definition NavigationTypes.h:34
#define UPROPERTY(...)
UObject definition macros.
Definition ObjectMacros.h:744
#define GENERATED_BODY(...)
Definition ObjectMacros.h:765
#define UCLASS(...)
Definition ObjectMacros.h:776
#define USTRUCT(...)
Definition ObjectMacros.h:746
#define GENERATED_USTRUCT_BODY(...)
Definition ObjectMacros.h:767
USkinnedMeshComponent float
Definition SkinnedMeshComponent.h:60
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition NavigationData.h:547
Definition Engine.Build.cs:7
Definition UObjectGlobals.h:1292
static COREUOBJECT_API FObjectInitializer & Get()
Definition UObjectGlobals.cpp:5001
Definition Tickable.h:135
Definition CrowdAgentInterface.h:18
Definition Array.h:670
Definition UnrealString.h.inl:34
Definition SharedPointer.h:692
Definition CrowdFollowingComponent.h:39
Definition CrowdManagerBase.h:14
Definition CrowdManager.h:174
virtual void CleanUp(float DeltaTime) override
Definition CrowdManager.h:264
const ANavigationData * GetNavData() const
Definition CrowdManager.h:266
Definition Object.h:95
Definition World.h:918
Definition DetourCrowd.h:236
Definition DetourObstacleAvoidance.h:45
@ false
Definition radaudio_common.h:23
Definition CrowdManager.h:133
float PathOptRemainingTime
Definition CrowdManager.h:146
FCrowdAgentData()
Definition CrowdManager.h:154
uint32 bIsSimulated
Definition CrowdManager.h:149
NavNodeRef PrevPoly
Definition CrowdManager.h:140
bool IsValid() const
Definition CrowdManager.h:156
uint32 bWantsPathOptimization
Definition CrowdManager.h:152
int32 AgentIndex
Definition CrowdManager.h:143
Definition CrowdManager.h:73
Definition CrowdManager.h:119
Definition CrowdManager.h:161
virtual bool IsTickableInEditor() const
Definition CrowdManager.h:167
virtual bool IsTickableWhenPaused() const
Definition CrowdManager.h:168
virtual TStatId GetStatId() const
Definition CrowdManager.cpp:113
FCrowdTickHelper()
Definition CrowdManager.h:164
TWeakObjectPtr< UCrowdManager > Owner
Definition CrowdManager.h:162
virtual bool IsTickable() const
Definition CrowdManager.h:166
Definition NavMeshPath.h:39
Definition NavQueryFilter.h:39
Definition UnrealType.h:6865
Definition ObjectPtr.h:488
Definition LightweightStats.h:416
Definition WeakObjectPtrTemplates.h:25
FORCEINLINE bool IsValid(bool bEvenIfPendingKill, bool bThreadsafeTest=false) const
Definition WeakObjectPtrTemplates.h:232
Definition DetourCrowd.h:226
Definition DetourCrowd.h:85
Definition DetourCrowd.h:141
Definition DetourNavMeshQuery.h:50