UOverAnimComponent: Slow Motion과 Pause
헤더: OverAnimation/Runtime/OverAnimComponent.h
Details: Slow Motion
| UI 이름 |
C++ 속성 |
기본값 / 범위 |
표시 조건 |
영향 |
| Slow-Motion Effect Timing |
TimeDilationPolicy |
Keep Effects Synced to Game Time (FollowGameTime) |
항상 |
FollowGameTime은 dilated game delta를 사용합니다. IgnoreTimeDilation은 world/owner time dilation을 simulation에서 제거합니다. DisableDuringSlowMotion은 effective time scale이 임계값 아래일 때 effect를 source pose로 돌립니다. |
| Disable Below Time Scale |
SlowMotionDisableThreshold |
0.95 / 0.01–1.0 |
TimeDilationPolicy == DisableDuringSlowMotion |
world time dilation × Owner Custom Time Dilation이 이 값보다 작으면 effect를 억제합니다. |
| Resume Time-Scale Margin |
SlowMotionResumeHysteresis |
0.05 / 0.0–0.5 |
TimeDilationPolicy == DisableDuringSlowMotion |
이미 억제된 상태는 Disable Below Time Scale + Margin 이상이 되어야 다시 활성화됩니다. 임계값 주변의 반복 reset을 막습니다. |
| When Slow Motion Disables Effects |
SlowMotionSilhouettePolicy |
Return Immediately to Source Pose (ImmediateReset) |
TimeDilationPolicy == DisableDuringSlowMotion |
즉시 source pose로 갈지, runtime response 수락을 멈추고 blend-out할지 결정합니다. |
| Return-to-Source Blend Time |
SlowMotionSilhouetteBlendDuration |
0.12 s / 최소 0.0 |
DisableDuringSlowMotion + BlendToSource |
현재 composed silhouette을 source pose로 섞는 real-time 길이입니다. |
Details: Pause
| UI 이름 |
C++ 속성 |
기본값 / 범위 |
표시 조건 |
영향 |
| When the Game Is Paused |
PauseBehavior |
Freeze Current Silhouette |
항상 |
FreezeCurrentSilhouette는 결과를 동결합니다. ReturnToSourcePose는 response 입력을 멈추고 source pose로 반환합니다. FinishExistingEffectsInRealTime은 새 입력을 멈추되 active envelope·spring·release motion을 real time으로 끝냅니다. motion 및 automatic-stage 분석은 pause 중 새 입력을 만들지 않습니다. |
| Return-to-Source Behavior |
PauseReturnPolicy |
Blend Smoothly to Source Pose (BlendToSource) |
PauseBehavior == ReturnToSourcePose |
pause source-pose 반환을 즉시 reset할지 real-time blend로 할지 결정합니다. |
| Pause Return Blend Time |
PauseReturnBlendDuration |
0.12 s / 최소 0.0 |
ReturnToSourcePose + BlendToSource |
pause 진입 뒤 current silhouette을 source pose로 섞는 real-time 길이입니다. |
정책 Enum
| Enum |
값 |
UI 이름 |
의미 |
EOverAnimTimeDilationPolicy |
FollowGameTime |
Keep Effects Synced to Game Time |
dilated game delta를 simulation에 사용합니다. slow-motion animation과 recovery를 동기화합니다. |
|
IgnoreTimeDilation |
Keep Effect Timing in Real Time |
simulation에서는 world/owner time dilation을 제거합니다. Signal의 motion 측정은 game-time 기반으로 남습니다. |
|
DisableDuringSlowMotion |
Disable Effects in Slow Motion |
effective time scale이 threshold 아래일 때 source pose로 반환합니다. |
EOverAnimSlowMotionSilhouettePolicy |
ImmediateReset |
Return Immediately to Source Pose |
active response를 정리하고 즉시 source pose로 만듭니다. |
|
BlendToSource |
Blend Smoothly to Source Pose |
새 response를 받지 않은 채 구성된 silhouette을 real time으로 blend-out합니다. |
EOverAnimPauseBehavior |
FreezeCurrentSilhouette |
Freeze Current Silhouette |
pause 중 현재 결과를 동결하고 새 motion stage/Signal을 만들지 않습니다. |
|
ReturnToSourcePose |
Return to Source Pose |
pause 중 response 입력을 멈추고 source pose로 반환합니다. 반환 방식은 PauseReturnPolicy가 결정합니다. |
|
FinishExistingEffectsInRealTime |
Finish Existing Effects in Real Time |
새 response 입력을 중단하고 active envelope·spring·release motion만 real time으로 마무리합니다. |
Blueprint API
| Blueprint 이름 |
C++ 선언 |
입력 |
반환 |
전제 조건·거부 및 상태 변화 |
| Set Slow-Motion Effect Timing |
void SetTimeDilationPolicy(EOverAnimTimeDilationPolicy Policy) |
time-dilation policy enum |
없음 |
값이 바뀌면 즉시 runtime effect 상태를 동기화합니다. DisableDuringSlowMotion을 선택한 경우 현재 effective time scale과 threshold/hysteresis가 곧바로 반영됩니다. |
| Get Slow-Motion Effect Timing |
EOverAnimTimeDilationPolicy GetTimeDilationPolicy() const |
없음 |
저장된 policy |
상태를 바꾸지 않습니다. |
| Set Slow-Motion Return Behavior |
void SetSlowMotionSilhouettePolicy(EOverAnimSlowMotionSilhouettePolicy Policy, float BlendDurationSeconds = 0.12f) |
반환 policy, blend 시간 |
없음 |
duration이 비유한수 또는 음수면 0.0으로 안전 처리합니다. policy 또는 duration이 달라졌을 때 runtime 상태를 즉시 동기화합니다. |
| Get Slow-Motion Return Behavior |
EOverAnimSlowMotionSilhouettePolicy GetSlowMotionSilhouettePolicy() const |
없음 |
저장된 policy |
상태를 바꾸지 않습니다. |
| Set Pause Behavior |
void SetPauseBehavior(EOverAnimPauseBehavior Behavior) |
pause behavior enum |
없음 |
값이 바뀌면 즉시 runtime 상태를 동기화합니다. 현재 world가 paused라면 response 입력 허용 여부와 silhouette 반환 상태가 반영됩니다. |
| Get Pause Behavior |
EOverAnimPauseBehavior GetPauseBehavior() const |
없음 |
저장된 behavior |
상태를 바꾸지 않습니다. |
| Set Pause Return Behavior |
void SetPauseReturnPolicy(EOverAnimSlowMotionSilhouettePolicy Policy, float BlendDurationSeconds = 0.12f) |
반환 policy, blend 시간 |
없음 |
duration이 비유한수 또는 음수면 0.0으로 안전 처리합니다. 값이 달라졌을 때 runtime 상태를 즉시 동기화합니다. |
| Get Pause Return Behavior |
EOverAnimSlowMotionSilhouettePolicy GetPauseReturnPolicy() const |
없음 |
저장된 policy |
상태를 바꾸지 않습니다. |
C++ 시간·억제 helper
아래 함수는 static C++ helper이며 Component/manager 상태를 변경하지 않습니다.
| C++ 선언 |
입력 |
반환 |
유효성 및 계산 |
static bool ShouldDisableEffectsForSlowMotion(EOverAnimTimeDilationPolicy Policy, float EffectiveTimeDilation, float DisableThreshold) |
policy, effective time scale, threshold |
억제 여부 |
내부적으로 hysteresis 0, 이전 억제 상태 false로 ResolveSlowMotionSuppressionState를 호출합니다. |
static bool ResolveSlowMotionSuppressionState(EOverAnimTimeDilationPolicy Policy, bool bWasSuppressed, float EffectiveTimeDilation, float DisableThreshold, float ResumeHysteresis) |
policy, 이전 상태, scale, threshold, margin |
억제 여부 |
policy가 DisableDuringSlowMotion이 아니면 false입니다. 비유한 time scale은 1.0, threshold는 0.01–1.0, hysteresis는 0.0–0.5로 안전 처리합니다. 새 억제는 scale < threshold, 이미 억제된 상태의 해제 기준은 scale >= min(threshold + hysteresis, 1.0)입니다. |
static float ResolveSimulationDeltaSeconds(EOverAnimTimeDilationPolicy Policy, float DilatedDeltaSeconds, float EffectiveTimeDilation) |
policy, dilated delta, effective scale |
simulation delta 초 |
dilated delta가 비유한수 또는 <= 0이면 0입니다. IgnoreTimeDilation이 아니면 유효 dilated delta를 그대로 반환합니다. IgnoreTimeDilation은 effective scale이 유효하고 충분히 클 때 dilated / scale을 반환하며 최대 0.1 s로 제한합니다. |
static float ResolvePausedSimulationDeltaSeconds(EOverAnimPauseBehavior Behavior, float RealDeltaSeconds) |
pause behavior, real-time delta |
pause simulation delta 초 |
FinishExistingEffectsInRealTime이 아니거나 real delta가 비유한수/<=0이면 0입니다. 그 외에는 real delta를 최대 0.1 s로 제한합니다. |
runtime 상태에 미치는 결과
Are OverAnim Effects Active는 component switch와 global switch가 켜져 있고, slow motion suppression이 아니며, paused world에서 ReturnToSourcePose가 아닐 때만 true입니다.
- runtime 상태가 전환되면 Component는 pending Signal, collision impact history, motion signal state를 초기화합니다.
BlendToSource가 선택된 slow-motion/pause 억제에서는 manager가 response를 수락하지 않는 상태로 blend-out을 진행합니다. ImmediateReset은 runtime effect를 즉시 비활성화합니다.
- paused world에서
FinishExistingEffectsInRealTime은 active effect simulation만 real time으로 진행하며, 새 runtime Signal 입력은 suspended 상태입니다.