UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
Collision.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3/*=============================================================================
4 Collision.h: Common collision code.
5=============================================================================*/
6
7#pragma once
8
9#if UE_ENABLE_INCLUDE_ORDER_DEPRECATED_IN_5_4
10#include "CoreMinimal.h"
11#endif // UE_ENABLE_INCLUDE_ORDER_DEPRECATED_IN_5_4
12#include "Math/Vector.h"
13#include "Stats/Stats.h"
14#if UE_ENABLE_INCLUDE_ORDER_DEPRECATED_IN_5_4
15#include "Engine/HitResult.h"
16#endif // UE_ENABLE_INCLUDE_ORDER_DEPRECATED_IN_5_4
17#include "EngineDefines.h"
18
19struct FHitResult;
20
41
43#if (1 && !(UE_BUILD_SHIPPING || UE_BUILD_TEST) && WITH_EDITOR && WITH_UNREAL_DEVELOPER_TOOLS)
44 #define ENABLE_COLLISION_ANALYZER 1
45#else
46 #define ENABLE_COLLISION_ANALYZER 0
47#endif
48
49//
50// FSeparatingAxisPointCheck - Checks for intersection between an AABB and a convex polygon.
51//
52
54{
55public:
58
60 float BestDist;
61
63 bool bHit;
64
75 const FVector& InBoxCenter,
76 const FVector& InBoxExtent,
77 bool bInCalcLeastPenetration = true
78 )
79 : HitNormal(FVector::ZeroVector),
81 PolyVertices(InPolyVertices),
82 BoxCenter(InBoxCenter),
83 BoxExtent(InBoxExtent),
84 bCalcLeastPenetration(bInCalcLeastPenetration)
85 {
86 // Optimization: if the poly is a triangle, use a more optimized code path
87 bHit = (PolyVertices.Num() == 3) ? FindSeparatingAxisTriangle() : FindSeparatingAxisGeneric();
88 }
89
90private:
91
101 ENGINE_API bool TestSeparatingAxisCommon(const FVector& Axis, float ProjectedPolyMin, float ProjectedPolyMax);
102
110 ENGINE_API bool TestSeparatingAxisTriangle(const FVector& Axis);
111
119 ENGINE_API bool TestSeparatingAxisGeneric(const FVector& Axis);
120
126 ENGINE_API bool FindSeparatingAxisTriangle();
127
133 ENGINE_API bool FindSeparatingAxisGeneric();
134
136 const TArray<FVector>& PolyVertices;
137
139 FVector BoxCenter;
140
142 FVector BoxExtent;
143
145 bool bCalcLeastPenetration;
146};
147
153ENGINE_API bool LineCheckWithTriangle(FHitResult& Result,const FVector& V1,const FVector& V2,const FVector& V3,const FVector& Start,const FVector& End,const FVector& Direction);
154
ENGINE_API bool LineCheckWithTriangle(FHitResult &Result, const FVector &V1, const FVector &V2, const FVector &V3, const FVector &Start, const FVector &End, const FVector &Direction)
Definition Collision.cpp:560
#define TEXT(x)
Definition Platform.h:1272
#define DECLARE_CYCLE_STAT_EXTERN(CounterName, StatId, GroupId, API)
Definition Stats.h:679
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
USkinnedMeshComponent float
Definition SkinnedMeshComponent.h:60
Definition Collision.h:54
FVector HitNormal
Definition Collision.h:57
bool bHit
Definition Collision.h:63
float BestDist
Definition Collision.h:60
FSeparatingAxisPointCheck(const TArray< FVector > &InPolyVertices, const FVector &InBoxCenter, const FVector &InBoxExtent, bool bInCalcLeastPenetration=true)
Definition Collision.h:73
Definition Array.h:670
UE_REWRITE SizeType Num() const
Definition Array.h:1144
Definition HitResult.h:21
Definition NumericLimits.h:41