UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
CameraShakeBase.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"
8#include "UObject/Object.h"
10#include "Camera/CameraTypes.h"
11#include "Engine/Scene.h"
12
13#include "CameraShakeBase.generated.h"
14
17
21USTRUCT(BlueprintType)
23{
25
26
27 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=CameraShake)
28 bool bIsRestarting = false;
29
31 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=CameraShake)
32 bool bOverrideDuration = false;
33
35 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=CameraShake, meta=(EditCondition="bOverrideDuration"))
36 float DurationOverride = 0.f;
37};
38
42USTRUCT(BlueprintType)
44{
46
49
53
55 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=CameraShake)
56 float DeltaTime = 0.f;
57
59 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=CameraShake)
60 float ShakeScale = 1.f;
62 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=CameraShake)
63 float DynamicScale = 1.f;
64
66 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=CameraShake)
68
70 float GetTotalScale() const
71 {
72 return FMath::Max(ShakeScale * DynamicScale, 0.f);
73 }
74};
75
79USTRUCT(BlueprintType)
81{
83
86
90
92 ENGINE_API FCameraShakePatternUpdateParams ToUpdateParams() const;
93
95 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=CameraShake)
96 float AbsoluteTime = 0.f;
97
99 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=CameraShake)
100 float ShakeScale = 1.f;
102 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=CameraShake)
103 float DynamicScale = 1.f;
104
106 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=CameraShake)
108
110 float GetTotalScale() const
111 {
112 return FMath::Max(ShakeScale * DynamicScale, 0.f);
113 }
114};
115
119UENUM()
121{
123 ApplyAsAbsolute = 1 << 0,
125 SkipAutoScale = 1 << 1,
127 SkipAutoPlaySpace = 1 << 2,
128
130 Default = 0
131};
133
137USTRUCT(BlueprintType)
168
172USTRUCT(BlueprintType)
174{
176
177 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=CameraShake)
178 bool bImmediately = false;
179};
180
181// Redirections from old names.
182#if !defined(UE_LEGACY_CAMERA_SHAKE_PATTERN_TYPES)
183#define UE_LEGACY_CAMERA_SHAKE_PATTERN_TYPES 0
184#endif
185
186#if UE_LEGACY_CAMERA_SHAKE_PATTERN_TYPES
193#endif // UE_LEGACY_CAMERA_SHAKE_PATTERN_TYPES
194
198UENUM()
200{
202 Fixed,
204 Infinite,
206 Custom
207};
208
212USTRUCT(BlueprintType)
250
254USTRUCT(BlueprintType)
256{
258
259
260 UPROPERTY()
262
264 UPROPERTY()
265 float BlendIn = 0.f;
266
268 UPROPERTY()
269 float BlendOut = 0.f;
270};
271
287
292{
297
302
307
312
317
330 ENGINE_API float Update(float DeltaTime);
331
344 ENGINE_API float Scrub(float AbsoluteTime);
345
354 ENGINE_API void Stop(bool bImmediately);
355
357 bool IsPlaying() const { return bIsPlaying; }
358
360 bool IsBlendingIn() const { return bIsBlendingIn; }
361
363 bool IsBlendingOut() const { return bIsBlendingOut; }
364
366 float GetElapsedTime() const { return ElapsedTime; }
367
369 float GetCurrentBlendInTime() const { return CurrentBlendInTime; }
370
372 float GetCurrentBlendOutTime() const { return CurrentBlendOutTime; }
373
375 const FCameraShakeInfo& GetShakeInfo() const { return ShakeInfo; }
376
378 bool HasDuration() const { return ShakeInfo.Duration.IsFixed(); }
379
381 float GetDuration() const { return ShakeInfo.Duration.Get(); }
382
384 bool IsInfinite() const { return ShakeInfo.Duration.IsInfinite(); }
385
386private:
387
388 ENGINE_API void InitializePlaying();
389
390private:
391
392 // Information about the shake/shake pattern we're managing
393 FCameraShakeInfo ShakeInfo;
394
395 // Running state
396 float ElapsedTime;
397
398 float CurrentBlendInTime;
399 float CurrentBlendOutTime;
400
401 bool bIsBlendingIn : 1;
402 bool bIsBlendingOut : 1;
403
404 bool bIsPlaying : 1;
405
406 // Cached values for blending information
407 bool bHasBlendIn : 1;
408 bool bHasBlendOut : 1;
409};
410
431
438UCLASS(Abstract, Blueprintable, EditInlineNew, MinimalAPI)
440{
442
443public:
444
447
448public:
449
456 ENGINE_API FCameraShakeDuration GetCameraShakeDuration() const;
457
463 ENGINE_API void GetCameraShakeBlendTimes(float& OutBlendIn, float& OutBlendOut) const;
464
473 {
475 {
476 if (const UCameraShakeBase* CDO = CameraShakeClass->GetDefaultObject<UCameraShakeBase>())
477 {
478 OutDuration = CDO->GetCameraShakeDuration();
479 return true;
480 }
481 }
482 return false;
483 }
484
494 {
496 {
497 if (const UCameraShakeBase* CDO = CameraShakeClass->GetDefaultObject<UCameraShakeBase>())
498 {
499 CDO->GetCameraShakeBlendTimes(OutBlendIn, OutBlendOut);
500 return true;
501 }
502 }
503 return false;
504 }
505
508
511
513 static ENGINE_API void ApplyScale(float Scale, FCameraShakePatternUpdateResult& InOutResult);
514
517
523 static ENGINE_API void ApplyPlaySpace(ECameraShakePlaySpace PlaySpace, FMatrix UserPlaySpaceMatrix, const FMinimalViewInfo& InPOV, FCameraShakePatternUpdateResult& InOutResult);
524
525public:
526
531 UPROPERTY(EditAnywhere, Category=CameraShake)
532 bool bSingleInstance;
533
535 UPROPERTY(transient, BlueprintReadWrite, Category=CameraShake)
536 float ShakeScale;
537
539 UFUNCTION(BlueprintPure, Category="CameraShake")
540 UCameraShakePattern* GetRootShakePattern() const { return RootShakePattern; }
541
543 UFUNCTION(BlueprintCallable, Category="CameraShake")
544 ENGINE_API void SetRootShakePattern(UCameraShakePattern* InPattern);
545
548 ShakePatternType* ChangeRootShakePattern()
549 {
551 SetRootShakePattern(ShakePattern);
552 return ShakePattern;
553 }
554
555public:
556
558 ENGINE_API void GetShakeInfo(FCameraShakeInfo& OutInfo) const;
559
565 bool IsActive() const { return bIsActive; }
566
569
571 ENGINE_API void StartShake(const FCameraShakeBaseStartParams& Params);
572
574 ENGINE_API bool IsFinished() const;
575
577 ENGINE_API void UpdateAndApplyCameraShake(float DeltaTime, float Alpha, FMinimalViewInfo& InOutPOV);
578
580 ENGINE_API void ScrubAndApplyCameraShake(float AbsoluteTime, float Alpha, FMinimalViewInfo& InOutPOV);
581
583 ENGINE_API void StopShake(bool bImmediately = true);
584
586 ENGINE_API void TeardownShake();
587
588public:
589
591 APlayerCameraManager* GetCameraManager() const { return CameraManager; }
592
594 ECameraShakePlaySpace GetPlaySpace() const { return PlaySpace; }
596 const FMatrix& GetUserPlaySpaceMatrix() const { return UserPlaySpaceMatrix; }
598 void SetUserPlaySpaceMatrix(const FMatrix& InMatrix) { UserPlaySpaceMatrix = InMatrix; }
599
600protected:
601
608
609private:
610
612 UPROPERTY(EditAnywhere, Instanced, Category=CameraShakePattern)
613 TObjectPtr<UCameraShakePattern> RootShakePattern;
614
618
620 ECameraShakePlaySpace PlaySpace;
621
623 FMatrix UserPlaySpaceMatrix;
624
626 bool bIsActive;
627};
628
634UCLASS(Abstract, EditInlineNew, MinimalAPI)
636{
638
639public:
640
643
645 ENGINE_API void GetShakePatternInfo(FCameraShakeInfo& OutInfo) const;
647 ENGINE_API void StartShakePattern(const FCameraShakePatternStartParams& Params);
653 ENGINE_API bool IsFinished() const;
655 ENGINE_API void StopShakePattern(const FCameraShakePatternStopParams& Params);
657 ENGINE_API void TeardownShakePattern();
658
659protected:
660
662 ENGINE_API UCameraShakeBase* GetShakeInstance() const;
663
665 template<typename InstanceType>
666 InstanceType* GetShakeInstance() const { return Cast<InstanceType>(GetShakeInstance()); }
667
668private:
669
670 // UCameraShakePattern interface
671 virtual void GetShakePatternInfoImpl(FCameraShakeInfo& OutInfo) const {}
672 virtual void StartShakePatternImpl(const FCameraShakePatternStartParams& Params) {}
673 virtual void UpdateShakePatternImpl(const FCameraShakePatternUpdateParams& Params, FCameraShakePatternUpdateResult& OutResult) {}
674 virtual void ScrubShakePatternImpl(const FCameraShakePatternScrubParams& Params, FCameraShakePatternUpdateResult& OutResult) {}
675 virtual bool IsFinishedImpl() const { return true; }
676 virtual void StopShakePatternImpl(const FCameraShakePatternStopParams& Params) {}
677 virtual void TeardownShakePatternImpl() {}
678};
679
#define check(expr)
Definition AssertionMacros.h:314
ECameraShakePatternUpdateResultFlags
Definition CameraShakeBase.h:121
ECameraShakeDurationType
Definition CameraShakeBase.h:200
ECameraShakePlaySpace
Definition CameraTypes.h:26
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define ENUM_CLASS_FLAGS(Enum)
Definition EnumClassFlags.h:6
const bool
Definition NetworkReplayStreaming.h:178
#define UPROPERTY(...)
UObject definition macros.
Definition ObjectMacros.h:744
#define GENERATED_BODY(...)
Definition ObjectMacros.h:765
#define UFUNCTION(...)
Definition ObjectMacros.h:745
#define UCLASS(...)
Definition ObjectMacros.h:776
#define UENUM(...)
Definition ObjectMacros.h:749
#define USTRUCT(...)
Definition ObjectMacros.h:746
@ Stop
Definition PrecomputedVolumetricLightmapStreaming.cpp:26
USkinnedMeshComponent float
Definition SkinnedMeshComponent.h:60
uint8_t uint8
Definition binka_ue_file_header.h:8
Definition PlayerCameraManager.h:189
Definition UObjectGlobals.h:1292
Definition SubclassOf.h:30
Definition CameraShakeBase.h:440
static bool GetCameraShakeDuration(TSubclassOf< UCameraShakeBase > CameraShakeClass, FCameraShakeDuration &OutDuration)
Definition CameraShakeBase.h:472
ECameraShakePlaySpace GetPlaySpace() const
Definition CameraShakeBase.h:594
APlayerCameraManager * GetCameraManager() const
Definition CameraShakeBase.h:591
bool IsActive() const
Definition CameraShakeBase.h:565
void SetUserPlaySpaceMatrix(const FMatrix &InMatrix)
Definition CameraShakeBase.h:598
const FMatrix & GetUserPlaySpaceMatrix() const
Definition CameraShakeBase.h:596
static bool GetCameraShakeBlendTimes(TSubclassOf< UCameraShakeBase > CameraShakeClass, float &OutBlendIn, float &OutBlendOut)
Definition CameraShakeBase.h:493
Definition CameraShakeBase.h:636
InstanceType * GetShakeInstance() const
Definition CameraShakeBase.h:666
Definition Object.h:95
@ false
Definition radaudio_common.h:23
Definition CameraShakeBase.h:276
FMatrix UserPlaySpaceMatrix
Definition CameraShakeBase.h:282
TWeakObjectPtr< APlayerCameraManager > CameraManager
Definition CameraShakeBase.h:285
Definition CameraShakeBase.h:415
ECameraShakePlaySpace PlaySpace
Definition CameraShakeBase.h:423
TObjectPtr< APlayerCameraManager > CameraManager
Definition CameraShakeBase.h:417
TOptional< float > DurationOverride
Definition CameraShakeBase.h:429
float Scale
Definition CameraShakeBase.h:420
FRotator UserPlaySpaceRot
Definition CameraShakeBase.h:426
Definition CameraShakeBase.h:214
bool IsCustom() const
Definition CameraShakeBase.h:236
ECameraShakeDurationType GetDurationType() const
Definition CameraShakeBase.h:230
bool IsCustomWithHint() const
Definition CameraShakeBase.h:238
FCameraShakeDuration()
Definition CameraShakeBase.h:225
float Get() const
Definition CameraShakeBase.h:241
static FCameraShakeDuration Custom(float DurationHint)
Definition CameraShakeBase.h:222
bool IsInfinite() const
Definition CameraShakeBase.h:234
FCameraShakeDuration(float InDuration, ECameraShakeDurationType InType=ECameraShakeDurationType::Fixed)
Definition CameraShakeBase.h:227
static FCameraShakeDuration Custom()
Definition CameraShakeBase.h:220
bool IsFixed() const
Definition CameraShakeBase.h:232
Definition CameraShakeBase.h:256
FCameraShakeDuration Duration
Definition CameraShakeBase.h:261
Definition CameraShakeBase.h:81
FCameraShakePatternScrubParams(const FMinimalViewInfo &InPOV)
Definition CameraShakeBase.h:87
Definition CameraShakeBase.h:23
Definition CameraShakeBase.h:174
Definition CameraShakeBase.h:44
FCameraShakePatternUpdateParams(const FMinimalViewInfo &InPOV)
Definition CameraShakeBase.h:50
Definition CameraShakeBase.h:139
float PostProcessBlendWeight
Definition CameraShakeBase.h:160
FRotator Rotation
Definition CameraShakeBase.h:153
ECameraShakePatternUpdateResultFlags Flags
Definition CameraShakeBase.h:163
FVector Location
Definition CameraShakeBase.h:151
float FOV
Definition CameraShakeBase.h:155
FPostProcessSettings PostProcessSettings
Definition CameraShakeBase.h:158
Definition CameraShakeBase.h:292
ENGINE_API void Start(const FCameraShakeInfo &InShakeInfo)
Definition CameraShakeBase.cpp:59
ENGINE_API FCameraShakeState()
Definition CameraShakeBase.cpp:47
float GetCurrentBlendOutTime() const
Definition CameraShakeBase.h:372
float GetCurrentBlendInTime() const
Definition CameraShakeBase.h:369
bool IsBlendingIn() const
Definition CameraShakeBase.h:360
float GetDuration() const
Definition CameraShakeBase.h:381
bool HasDuration() const
Definition CameraShakeBase.h:378
bool IsBlendingOut() const
Definition CameraShakeBase.h:363
bool IsInfinite() const
Definition CameraShakeBase.h:384
float GetElapsedTime() const
Definition CameraShakeBase.h:366
bool IsPlaying() const
Definition CameraShakeBase.h:357
const FCameraShakeInfo & GetShakeInfo() const
Definition CameraShakeBase.h:375
Definition CameraTypes.h:37
Definition Scene.h:693
Definition ObjectPtr.h:488
Definition Optional.h:131
Definition WeakObjectPtrTemplates.h:25
static CORE_API const TRotator< double > ZeroRotator
Definition Rotator.h:57