Signal · Impact Types
기준: OverAnim
0.1.0 Beta· Unreal Engine5.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 Model이 Automatic 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 SourceRegionFilter가 None이 아니면 일치해야 합니다. |
| 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 Bulge와 Impact Ripple은 Pulse lifecycle과 유효한 Contact Point 및 Contact 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 값. ScaleByDetectedMotion은 Strength를 사용합니다. |
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, ActionTempoSeconds는 0.01..0.5 s, TimeInPhase와 PreviousPhaseDuration은 0+, CycleId와 ActionId는 0+, ActionAxisWS는 NaN이 아니고 0 vector가 아니어야 합니다. |
bool ShouldPreserveOverAnimSignalAcrossSourcePoseDiscontinuity(const FOverAnimSignal& Signal) |
pose-source discontinuity를 지나 보존할지 여부 | Pulse만 보존 대상입니다. 그중 MotionAnalyzer가 만들고 SourceRegionName이 설정된 Region pose-motion pulse는 보존하지 않으며, 나머지 Pulse는 true입니다. StateUpdate와 StateEnd는 항상 false입니다. |
FOverAnimPoseCutProtectedPulseBuffer는 런타임 내부의 pose-cut 보존 버퍼이므로 Blueprint 및 지원되는 외부 통합 계약에는 포함하지 않습니다.