UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
HitResult.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreMinimal.h"
9#include "HitResult.generated.h"
10
11class AActor;
12class UPackageMap;
14class UPrimitiveComponent;
15
19USTRUCT(BlueprintType, meta = (HasNativeBreak = "/Script/Engine.GameplayStatics.BreakHitResult", HasNativeMake = "/Script/Engine.GameplayStatics.MakeHitResult"))
21{
23
24
25 UPROPERTY()
27
32 UPROPERTY()
33 float Time;
34
36 UPROPERTY()
37 float Distance;
38
44 UPROPERTY()
46
52 UPROPERTY()
54
60 UPROPERTY()
62
68 UPROPERTY()
70
75 UPROPERTY()
77
82 UPROPERTY()
84
90 UPROPERTY()
91 float PenetrationDepth;
92
94 UPROPERTY(NotReplicated)
95 int32 MyItem;
96
98 UPROPERTY()
99 int32 Item;
100
102 UPROPERTY()
103 uint8 ElementIndex;
104
106 UPROPERTY()
107 uint8 bBlockingHit : 1;
108
115 UPROPERTY()
116 uint8 bStartPenetrating : 1;
117
122 UPROPERTY()
124
126 UPROPERTY()
127 FActorInstanceHandle HitObjectHandle;
128
130 UPROPERTY()
131 TWeakObjectPtr<UPrimitiveComponent> Component;
132
134 TWeakObjectPtr<UObject> PhysicsObjectOwner;
135
137 Chaos::FPhysicsObjectHandle PhysicsObject;
138
140 UPROPERTY()
141 FName BoneName;
142
144 UPROPERTY(NotReplicated)
145 FName MyBoneName;
146
147
149 {
150 Init();
151 }
152
153 explicit FHitResult(float InTime)
154 {
155 Init();
156 Time = InTime;
157 }
158
160 {
161 Init();
162 }
163
165 {
166 }
167
168 explicit FHitResult(FVector Start, FVector End)
169 {
170 Init(Start, End);
171 }
172
174 inline void Init()
175 {
176 FMemory::Memzero(this, sizeof(FHitResult));
177 HitObjectHandle = FActorInstanceHandle();
178 Time = 1.f;
179 MyItem = INDEX_NONE;
180 }
181
183 inline void Init(FVector Start, FVector End)
184 {
185 FMemory::Memzero(this, sizeof(FHitResult));
186 HitObjectHandle = FActorInstanceHandle();
187 Time = 1.f;
188 TraceStart = Start;
189 TraceEnd = End;
190 MyItem = INDEX_NONE;
191 }
192
194 ENGINE_API FHitResult(AActor* InActor, UPrimitiveComponent* InComponent, FVector const& HitLoc, FVector const& HitNorm);
195
197 inline void Reset(float InTime = 1.f, bool bPreserveTraceData = true)
198 {
199 const FVector SavedTraceStart = TraceStart;
200 const FVector SavedTraceEnd = TraceEnd;
201 Init();
202 Time = InTime;
204 {
205 TraceStart = SavedTraceStart;
206 TraceEnd = SavedTraceEnd;
207 }
208 }
209
211 inline AActor* GetActor() const
212 {
213 return HitObjectHandle.FetchActor();
214 }
215
217 {
218 return HitObjectHandle;
219 }
220
221 inline bool HasValidHitObjectHandle() const
222 {
223 return HitObjectHandle.IsValid();
224 }
225
227 inline UPrimitiveComponent* GetComponent() const
228 {
229 return Component.Get();
230 }
231
233 ENGINE_API bool NetSerialize(FArchive& Ar, UPackageMap* Map, bool& bOutSuccess);
234
236 inline bool IsValidBlockingHit() const
237 {
238 return bBlockingHit && !bStartPenetrating;
239 }
240
243 {
244 for(int32 HitIdx=0; HitIdx<InHits.Num(); HitIdx++)
245 {
246 if(InHits[HitIdx].bBlockingHit)
247 {
248 return &InHits[HitIdx];
249 }
250 }
251 return nullptr;
252 }
253
256 {
257 int32 NumBlocks = 0;
258 for(int32 HitIdx=0; HitIdx<InHits.Num(); HitIdx++)
259 {
260 if(InHits[HitIdx].bBlockingHit)
261 {
262 NumBlocks++;
263 }
264 }
265 return NumBlocks;
266 }
267
270 {
271 return (InHits.Num() - GetNumBlockingHits(InHits));
272 }
273
279 {
280 FHitResult Result(Hit);
281 Result.Normal = -Result.Normal;
282 Result.ImpactNormal = -Result.ImpactNormal;
283
284 int32 TempItem = Result.Item;
285 Result.Item = Result.MyItem;
286 Result.MyItem = TempItem;
287
288 FName TempBoneName = Result.BoneName;
289 Result.BoneName = Result.MyBoneName;
290 Result.MyBoneName = TempBoneName;
291 return Result;
292 }
293
294 ENGINE_API FString ToString() const;
295};
296
297// All members of FHitResult are PODs.
298template<> struct TIsPODType<FHitResult> { enum { Value = true }; };
299
300template<>
302{
303 enum
304 {
306 };
307};
@ Normal
Definition AndroidInputInterface.h:116
ENoInit
Definition CoreMiscDefines.h:158
@ NoInit
Definition CoreMiscDefines.h:158
@ INDEX_NONE
Definition CoreMiscDefines.h:150
EForceInit
Definition CoreMiscDefines.h:154
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
void Init()
Definition LockFreeList.h:4
#define UPROPERTY(...)
UObject definition macros.
Definition ObjectMacros.h:744
#define GENERATED_BODY(...)
Definition ObjectMacros.h:765
#define USTRUCT(...)
Definition ObjectMacros.h:746
uint8_t uint8
Definition binka_ue_file_header.h:8
Definition Actor.h:257
Definition Archive.h:1208
Definition NameTypes.h:617
Definition Array.h:670
Definition Object.h:95
Definition CoreNet.h:191
Definition PhysicalMaterial.h:104
Definition SkeletalMeshComponent.h:307
Definition ActorInstanceHandle.h:33
Definition HitResult.h:21
static FHitResult GetReversedHit(const FHitResult &Hit)
Definition HitResult.h:278
bool IsValidBlockingHit() const
Definition HitResult.h:236
void Reset(float InTime=1.f, bool bPreserveTraceData=true)
Definition HitResult.h:197
bool HasValidHitObjectHandle() const
Definition HitResult.h:221
FHitResult(EForceInit InInit)
Definition HitResult.h:159
FHitResult(ENoInit NoInit)
Definition HitResult.h:164
FActorInstanceHandle GetHitObjectHandle() const
Definition HitResult.h:216
AActor * GetActor() const
Definition HitResult.h:211
FHitResult(float InTime)
Definition HitResult.h:153
static FHitResult * GetFirstBlockingHit(TArray< FHitResult > &InHits)
Definition HitResult.h:242
UPrimitiveComponent * GetComponent() const
Definition HitResult.h:227
static int32 GetNumBlockingHits(const TArray< FHitResult > &InHits)
Definition HitResult.h:255
FHitResult(FVector Start, FVector End)
Definition HitResult.h:168
static int32 GetNumOverlapHits(const TArray< FHitResult > &InHits)
Definition HitResult.h:269
void Init()
Definition HitResult.h:174
void Init(FVector Start, FVector End)
Definition HitResult.h:183
static UE_FORCEINLINE_HINT void * Memzero(void *Dest, SIZE_T Count)
Definition UnrealMemory.h:131
Definition NetSerialization.h:541
Definition NetSerialization.h:410
Definition IsPODType.h:12
@ Value
Definition IsPODType.h:13
Definition StructOpsTypeTraits.h:11
@ WithNetSerializer
Definition StructOpsTypeTraits.h:26
Definition StructOpsTypeTraits.h:46
Definition WeakObjectPtrTemplates.h:25