Payback 0.0.1
CK Graduation Project
로딩중...
검색중...
일치하는것 없음
UAnimNotifyState_AttachedNiagaraEffect 클래스 참조

#include <AnimNotifyState_AttachedNiagaraEffect.h>

UAnimNotifyState_AttachedNiagaraEffect에 대한 상속 다이어그램 :
Inheritance graph
UAnimNotifyState_AttachedNiagaraEffect에 대한 협력 다이어그램:
Collaboration graph

클래스

struct  FEffectSyncState
 

Public 멤버 함수

virtual void NotifyBegin (USkeletalMeshComponent *MeshComp, UAnimSequenceBase *Animation, float TotalDuration, const FAnimNotifyEventReference &EventReference) override
 
virtual void NotifyTick (USkeletalMeshComponent *MeshComp, UAnimSequenceBase *Animation, float FrameDeltaTime, const FAnimNotifyEventReference &EventReference) override
 
virtual void NotifyEnd (USkeletalMeshComponent *MeshComp, UAnimSequenceBase *Animation, const FAnimNotifyEventReference &EventReference) override
 

Protected 속성

FRuntimeFloatCurve LocationSyncCurve
 
FRuntimeFloatCurve RotationSyncCurve
 
TMap< TWeakObjectPtr< USkeletalMeshComponent >, FEffectSyncStateSyncStateMap
 

Private 멤버 함수

FTransform GetSlotTransform (const USkeletalMeshComponent *MeshComp) const
 
UFXSystemComponent * DetachEffectTransform (USkeletalMeshComponent *MeshComp)
 

상세한 설명

소켓에 부착된 나이아가라 이펙트를 재생하되, 소켓을 얼마나 따라갈지를 커브로 제어한다. 커브의 X는 노티파이 진행도(0~1), Y는 동기화 정도(0 = 그 자리에 정지, 1 = 소켓에 완전 동기화)를 의미한다. 매 틱 직전 프레임 결과를 기준으로 소켓 트랜스폼 쪽으로 보간하는 증분 추종 방식이다.

멤버 함수 문서화

◆ DetachEffectTransform()

UFXSystemComponent * UAnimNotifyState_AttachedNiagaraEffect::DetachEffectTransform ( USkeletalMeshComponent *  MeshComp)
private
94{
95 UFXSystemComponent* FXComponent = GetSpawnedEffect(MeshComp);
96
97 if (IsValid(FXComponent) == false)
98 {
99 return nullptr;
100 }
101
102 // 부착은 유지하되(수명 관리는 부모에 맡긴다) 위치/회전만 커브로 직접 구동한다.
103 FXComponent->SetUsingAbsoluteLocation(true);
104 FXComponent->SetUsingAbsoluteRotation(true);
105
106 return FXComponent;
107}
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ GetSlotTransform()

FTransform UAnimNotifyState_AttachedNiagaraEffect::GetSlotTransform ( const USkeletalMeshComponent *  MeshComp) const
private
86{
87 // 부모가 KeepRelativeOffset으로 부착하므로 오프셋도 소켓 기준 상대 트랜스폼으로 합성해야 동일한 결과가 나온다.
88 const FTransform OffsetTransform(RotationOffset, LocationOffset);
89 return OffsetTransform * MeshComp->GetSocketTransform(SocketName, RTS_World);
90}
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ NotifyBegin()

void UAnimNotifyState_AttachedNiagaraEffect::NotifyBegin ( USkeletalMeshComponent *  MeshComp,
UAnimSequenceBase *  Animation,
float  TotalDuration,
const FAnimNotifyEventReference &  EventReference 
)
overridevirtual
11{
12 Super::NotifyBegin(MeshComp, Animation, TotalDuration, EventReference);
13
14 if (IsValid(MeshComp) == false)
15 {
16 return;
17 }
18
19 UFXSystemComponent* FXComponent = DetachEffectTransform(MeshComp);
20
21 if (FXComponent == nullptr)
22 {
23 return;
24 }
25
26 const FTransform SlotTransform = GetSlotTransform(MeshComp);
27 FXComponent->SetWorldLocationAndRotation(SlotTransform.GetLocation(), SlotTransform.GetRotation());
28
29 FEffectSyncState& SyncState = SyncStateMap.FindOrAdd(MeshComp);
30 SyncState.Duration = TotalDuration;
31 SyncState.Elapsed = 0.0f;
32 SyncState.Location = SlotTransform.GetLocation();
33 SyncState.Rotation = SlotTransform.GetRotation();
34}
FTransform GetSlotTransform(const USkeletalMeshComponent *MeshComp) const
Definition AnimNotifyState_AttachedNiagaraEffect.cpp:85
UFXSystemComponent * DetachEffectTransform(USkeletalMeshComponent *MeshComp)
Definition AnimNotifyState_AttachedNiagaraEffect.cpp:93
TMap< TWeakObjectPtr< USkeletalMeshComponent >, FEffectSyncState > SyncStateMap
Definition AnimNotifyState_AttachedNiagaraEffect.h:52
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ NotifyEnd()

void UAnimNotifyState_AttachedNiagaraEffect::NotifyEnd ( USkeletalMeshComponent *  MeshComp,
UAnimSequenceBase *  Animation,
const FAnimNotifyEventReference &  EventReference 
)
overridevirtual
78{
79 Super::NotifyEnd(MeshComp, Animation, EventReference);
80
81 SyncStateMap.Remove(MeshComp);
82}

◆ NotifyTick()

void UAnimNotifyState_AttachedNiagaraEffect::NotifyTick ( USkeletalMeshComponent *  MeshComp,
UAnimSequenceBase *  Animation,
float  FrameDeltaTime,
const FAnimNotifyEventReference &  EventReference 
)
overridevirtual
38{
39 Super::NotifyTick(MeshComp, Animation, FrameDeltaTime, EventReference);
40
41 if (IsValid(MeshComp) == false)
42 {
43 return;
44 }
45
46 FEffectSyncState* SyncState = SyncStateMap.Find(MeshComp);
47
48 if (SyncState == nullptr)
49 {
50 return;
51 }
52
53 UFXSystemComponent* FXComponent = GetSpawnedEffect(MeshComp);
54
55 if (IsValid(FXComponent) == false)
56 {
57 return;
58 }
59
60 SyncState->Elapsed += FrameDeltaTime;
61
62 // 커브의 X축은 노티파이 진행도이므로 0~1로 정규화한다.
63 const float Progress = SyncState->Duration < KINDA_SMALL_NUMBER ? 1.0f : FMath::Clamp(SyncState->Elapsed / SyncState->Duration, 0.0f, 1.0f);
64
65 const float LocationAlpha = FMath::Clamp(LocationSyncCurve.GetRichCurveConst()->Eval(Progress, 1.0f), 0.0f, 1.0f);
66 const float RotationAlpha = FMath::Clamp(RotationSyncCurve.GetRichCurveConst()->Eval(Progress, 1.0f), 0.0f, 1.0f);
67
68 // 알파가 0이면 직전 결과를 그대로 유지해 제자리에 멈추고, 1이면 소켓에 즉시 스냅한다.
69 const FTransform SlotTransform = GetSlotTransform(MeshComp);
70 SyncState->Location = FMath::Lerp(SyncState->Location, SlotTransform.GetLocation(), LocationAlpha);
71 SyncState->Rotation = FQuat::Slerp(SyncState->Rotation, SlotTransform.GetRotation(), RotationAlpha).GetNormalized();
72
73 FXComponent->SetWorldLocationAndRotation(SyncState->Location, SyncState->Rotation);
74}
FRuntimeFloatCurve LocationSyncCurve
Definition AnimNotifyState_AttachedNiagaraEffect.h:37
FRuntimeFloatCurve RotationSyncCurve
Definition AnimNotifyState_AttachedNiagaraEffect.h:40
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

멤버 데이터 문서화

◆ LocationSyncCurve

FRuntimeFloatCurve UAnimNotifyState_AttachedNiagaraEffect::LocationSyncCurve
protected

◆ RotationSyncCurve

FRuntimeFloatCurve UAnimNotifyState_AttachedNiagaraEffect::RotationSyncCurve
protected

◆ SyncStateMap

TMap<TWeakObjectPtr<USkeletalMeshComponent>, FEffectSyncState> UAnimNotifyState_AttachedNiagaraEffect::SyncStateMap
protected

이 클래스에 대한 문서화 페이지는 다음의 파일들로부터 생성되었습니다.: