콘텐츠로 이동

Signal · Impact Types

기준: OverAnim 0.1.0 Beta · Unreal Engine 5.8
헤더: OverAnimation/Runtime/OverAnimSignalTypes.h

Signal은 Response Rule이 해석하는 입력 계약입니다. UOverAnimComponent의 Signal 노드는 Component Signal API, Rule route는 Response Types를 참조합니다.

Signal Enum

Enum 의미 · 호환성
EOverAnimSignalSource Manual Blueprint/C++ 직접 제출입니다. ManualOnly activation policy와 일치합니다.
MotionAnalyzer Actor/Region motion analyzer가 생성합니다. MotionOnly와 일치합니다.
AnimNotify OverAnim Signal Notify가 생성합니다. AnimNotifyOnly와 일치합니다.
GameplayEvent Hit, Collision, Trace, Damage 등 gameplay 제출입니다. GameplayEventOnly와 일치합니다.
EOverAnimSignalLifecycle Pulse 한 번 해석되는 event입니다. Contact 기반 모듈은 이 lifecycle만 수용합니다.
StateUpdate 활성 상태의 지속 갱신입니다. Sustained response에 사용됩니다.
StateEnd 같은 상태의 종료를 알립니다.
EOverAnimMotionPhase Stable (Starting Pose) source pose로 복귀하는 단계입니다. 지속 response는 deformation을 release합니다.
Anticipation, Action, Overshoot, Recoil, Settle Automatic Six-Stage Motion의 나머지 다섯 단계입니다. Rule의 Timing ModelAutomatic Six-Stage Motion일 때만 활용됩니다.

C++ phase 이름 helper

GetOverAnimMotionPhaseName(EOverAnimMotionPhase Phase)는 Blueprint 노드가 아닌 C++ inline helper입니다. 반환 문자열은 현지화된 DisplayName이 아니라 아래의 안정적인 식별자입니다.

입력 Phase 반환 const TCHAR* 반환 조건
Stable StartingPose 유효한 stage입니다.
Anticipation, Action, Overshoot, Recoil 각 enum과 같은 영문 이름 유효한 stage입니다.
Settle SettlePose 유효한 stage입니다.
정의되지 않은 값 Unknown enum 값이 어느 case에도 맞지 않을 때입니다.

FOverAnimSignalProtocolSettings

EOverAnimSignalProtocolChannel은 Notify와 Component가 사용할 공통 Signal 이름을 묶습니다. Custom은 아래 매핑을 사용하지 않고 호출자가 넘긴 이름을 사용합니다.

Protocol Channel C++ 속성명 기본 Signal 이름
Manual Preview ManualPreviewSignalName Preview.Manual
Attack Swing AttackSwingSignalName Combat.AttackSwing
Hit Impact HitImpactSignalName Combat.HitImpact
Wide Spread WideSpreadSignalName Combat.WideSpread
Collision Impact CollisionImpactSignalName Collision.Impact
Animation Accent AnimationAccentSignalName Animation.Accent

FOverAnimSignalProtocolSettings::ResolveSignalName(EOverAnimSignalProtocolChannel Channel, FName CustomSignalName)은 위 이름 또는 CustomSignalName을 반환합니다. Custom에서 이름이 None이면 route할 Signal 이름도 없습니다.

EOverAnimSignalProtocolChannel resolver가 읽는 값
Custom CustomSignalName 인수입니다.
ManualPreview, AttackSwing, HitImpact, WideSpread, CollisionImpact, AnimationAccent 위 표의 같은 순서 설정 필드입니다.
C++ 선언 입력 · 반환 계약
FName ResolveSignalName(EOverAnimSignalProtocolChannel Channel, FName CustomSignalName = NAME_None) const protocol channel, custom fallback → FName ManualPreview부터 AnimationAccent까지는 해당 설정 필드를 그대로 반환합니다. Custom 또는 정의되지 않은 channel은 CustomSignalName을 반환합니다. 이름의 유효성이나 Rule 존재 여부는 검사하지 않습니다.

FOverAnimImpactSignalSettings

Details UI 이름 C++ 속성명 기본값 · 범위 영향 · 관계
Min Equivalent Impact Speed MinEquivalentImpactSpeed 200 cm/s, 0+ 상대 속도/normal impulse를 0 magnitude로 매핑하는 하한입니다.
Max Equivalent Impact Speed MaxEquivalentImpactSpeed 1600 cm/s, 1+ 1 magnitude로 매핑하는 상한입니다. 최소값보다 커야 합니다.
Reference Mass Kg ReferenceMassKg 80 kg, 0.01+ NormalImpulseWS.Size() / ReferenceMassKg의 속도 등가 환산 기준입니다.
Response Exponent ResponseExponent 0.75, 0.01+ 속도 기반 0..1 magnitude 곡선의 지수입니다.
Min Gameplay Damage MinGameplayDamage 0, 0+ Damage 기반 magnitude의 0 지점입니다.
Max Gameplay Damage MaxGameplayDamage 100, 0.01+ Damage 기반 magnitude의 1 지점입니다. 최소값보다 커야 합니다.
Gameplay Damage Exponent GameplayDamageExponent 0.75, 0.01+ Damage 기반 magnitude 곡선의 지수입니다.
Deduplication Window DeduplicationWindow 0.08 s, 0+ 동일 source/contact 계열 Impact를 중복으로 합칠 시간 창입니다.
Contact Merge Distance ContactMergeDistance 20 cm, 0+ deduplication 때 같은 contact로 보는 거리입니다.
Stronger Impact Bypass Ratio StrongerImpactBypassRatio 1.25, 1+ 기존 항목보다 이 비율 이상 강한 impact는 deduplication을 우회합니다.

ResolveMagnitude는 contact normal 방향의 approach speed와 impulse equivalent speed 중 큰 값을 위 speed range로 0..1에 clamp한 뒤 지수를 적용합니다. 입력 vector 또는 설정값이 NaN/무한대이거나 Max <= Min이면 0을 반환합니다. ResolveGameplayMagnitude도 같은 방식으로 damage range를 검증합니다.

C++ 선언 입력 · 반환 거부 · 경계 조건
float ResolveMagnitude(const FVector& RelativeVelocityWS, const FVector& NormalImpulseWS, const FVector& ContactNormalWS) const 상대 속도, normal impulse, contact normal → 0..1 magnitude 세 vector 중 하나가 NaN, speed range·mass·exponent가 finite하지 않음, MaxEquivalentImpactSpeed <= MinEquivalentImpactSpeed, mass 또는 exponent가 0 이하이면 0입니다. normal이 거의 0이면 전체 상대 속도 크기를 approach speed로 사용합니다.
float ResolveGameplayMagnitude(float Damage) const damage → 0..1 magnitude 입력 또는 damage range·exponent가 finite하지 않음, MaxGameplayDamage <= MinGameplayDamage, exponent가 0 이하이면 0입니다. 그 외에는 range map 후 exponent를 적용합니다.

FOverAnimSignal

UI 이름 C++ 속성명 기본값 · 입력 영향 · 표시 조건
Signal Name SignalName None Rule의 SignalName과 일치하는 route의 첫 조건입니다. None은 유효한 route를 만들지 못합니다.
Source Source Manual Activation policy의 source filter와 대조합니다.
Lifecycle Lifecycle Pulse Rule timing과 Module의 signal 지원 범위에 맞아야 합니다.
Magnitude Magnitude 1, 0+ Rule Magnitude mapping의 기본 입력입니다.
Direction WS DirectionWS zero vector world-space 방향입니다. Along/Against Signal Direction projection의 기준입니다.
Origin WS OriginWS zero vector world-space origin입니다. contact/region 위치 선택에 사용될 수 있습니다.
Source Region Name SourceRegionName None Rule SourceRegionFilterNone이 아니면 일치해야 합니다.
Source Id SourceId None 동일 source event/state를 식별하는 이름입니다.
Has Contact Point bHasContactPoint false true일 때 ContactPointWS를 유효 입력으로 사용합니다. Contact/Impact 모듈에 필요합니다.
Contact Point WS ContactPointWS zero vector bHasContactPoint일 때만 의미가 있습니다.
Has Contact Normal bHasContactNormal false true일 때 ContactNormalWS를 유효 입력으로 사용합니다. Contact/Impact 모듈에 필요합니다.
Contact Normal WS ContactNormalWS up vector bHasContactNormal일 때만 의미가 있습니다.
Contact Bone Name ContactBoneName None moving contact의 skeletal anchor입니다. HitResult 제출은 hit bone으로 채웁니다.
Has Motion Features bHasMotionFeatures runtime read-only true일 때 MotionFeatures가 analyzer에서 채워졌음을 나타냅니다. 직접 Signal을 만들 때 쓰기 대상이 아닙니다.
Motion Features MotionFeatures runtime read-only bHasMotionFeatures가 true일 때만 표시됩니다. Rule의 physical feature magnitude source가 읽습니다.
Has Motion Phase bHasMotionPhase runtime read-only true일 때 automatic stage snapshot이 있습니다.
Motion Phase MotionPhase runtime read-only bHasMotionPhase가 true일 때만 표시됩니다.

Contact 입력 계약

Contact Dent + Ring BulgeImpact RipplePulse lifecycle과 유효한 Contact PointContact Normal을 요구합니다. 둘 중 하나라도 없으면 해당 모듈의 contact response는 해석되지 않습니다.

Runtime read-only snapshots

FOverAnimMotionFeatureSnapshot

C++ 속성명 단위 의미
LinearVelocityWS cm/s world-space linear velocity
LinearAccelerationWS cm/s² world-space linear acceleration
AngularVelocityRadiansWS rad/s world-space angular velocity
AngularAccelerationRadiansWS rad/s² world-space angular acceleration
bHasTipVelocity, TipVelocityWS bool, cm/s tip velocity의 존재와 값
SampleDeltaSeconds s 이 snapshot을 산출한 sample 간격
MeasurementScales 구조체 physical feature의 proportion normalization scale

FOverAnimMotionPhaseSnapshot

EOverAnimMotionPhaseTimingSource는 snapshot의 Stage timing 출처를 표시합니다.

C++ 값 Editor UI 의미
AutomaticAnalysis Automatic Analysis pose motion analyzer가 Stage와 progress를 검출했습니다.
AuthoredCurve Authored Stage Curve Bone Group의 Stage Curve가 timing을 제공했습니다.
AuthoredMarker Authored Stage Marker OverAnim Motion Stage Marker Notify가 timing을 제공했습니다.
C++ 속성명 의미
Phase, PreviousPhase, bPhaseChanged 현재/이전 stage와 전환 여부
TimingSource Automatic analysis, Stage Curve, Stage Marker 중 현재 timing 출처
ActionEntryPreviousPhase 현재 Action에 진입하기 직전 stage. Action buildup과 recovery continuity에 사용합니다.
Strength, PreviousStageStrength, Confidence analyzer evidence와 stage continuity 값. ScaleByDetectedMotionStrength를 사용합니다.
MotionEnergy, ActionEnergy, PreparationEnergy, EnergyTrend automatic stage 판단에 사용한 normalized motion evidence
EstimatedTimeToAction, ActionTempoSeconds, TimeInPhase, PreviousPhaseDuration action 예측, 현재 stage 시간과 직전 stage의 실제 지속 시간, 단위 s
AuthoredStageProgress, bHasAuthoredStageProgress authored curve/marker가 제공한 현재 Stage 내부 0–1 progress와 존재 여부. Automatic analysis에서는 비활성입니다.
CycleId Region-local analyzer cycle ID입니다. 다른 Region에서 같은 값이 반복될 수 있습니다.
ActionId Action Group arbiter가 부여하는 단조 증가 action 식별자입니다. Region 간 cycle을 구분합니다.
DirectionAlignment, ActionAxisWS, bActionAxisProvisional action direction의 일치도, 방향, 예측 상태

이 두 snapshot은 VisibleAnywhere, BlueprintReadOnly 출력 상태입니다. 수정해도 analyzer 입력으로 쓰이지 않습니다.

Snapshot validation · pose-cut helper

아래는 Blueprint 노드가 아닌 C++ helper입니다. 구조체 값을 바꾸지 않고 검증 결과 또는 보존 여부만 반환합니다.

C++ 선언 반환 유효 · 거부 조건
bool FOverAnimMotionFeatureSnapshot::IsValid() const feature snapshot이 유효하면 true linear/angular vector에 NaN이 없고, bHasTipVelocity일 때 tip vector에도 NaN이 없으며, SampleDeltaSeconds가 finite한 양수이고 MeasurementScales.IsValid()true여야 합니다.
bool FOverAnimMotionPhaseSnapshot::IsValid() const phase snapshot이 유효하면 true 모든 scalar가 finite해야 하며 normalized 값과 authored progress는 선언 범위 안에 있어야 합니다. EstimatedTimeToAction >= 0, ActionTempoSeconds0.01..0.5 s, TimeInPhasePreviousPhaseDuration0+, CycleIdActionId0+, ActionAxisWS는 NaN이 아니고 0 vector가 아니어야 합니다.
bool ShouldPreserveOverAnimSignalAcrossSourcePoseDiscontinuity(const FOverAnimSignal& Signal) pose-source discontinuity를 지나 보존할지 여부 Pulse만 보존 대상입니다. 그중 MotionAnalyzer가 만들고 SourceRegionName이 설정된 Region pose-motion pulse는 보존하지 않으며, 나머지 Pulsetrue입니다. StateUpdateStateEnd는 항상 false입니다.

FOverAnimPoseCutProtectedPulseBuffer는 런타임 내부의 pose-cut 보존 버퍼이므로 Blueprint 및 지원되는 외부 통합 계약에는 포함하지 않습니다.