UOverAnimComponent: Signal과 Impact Signal
헤더: OverAnimation/Runtime/OverAnimComponent.h
일반 Signal 타입과 Response route의 필드는 Signal · Impact Types, Response Types를 따릅니다.
Details 속성
| UI 이름 | C++ 속성 | 기본값 / 범위 | 표시 조건 | 영향 |
|---|---|---|---|---|
| Max Pending Signals | MaxPendingSignals |
16 / 1–128 |
항상 | runtime instance가 아직 없을 때 수락된 일반 Signal 대기열의 최대 길이입니다. 한도 초과 시 가장 오래된 pending Signal을 제거합니다. |
| Listen for Gameplay Damage | bListenForGameplayDamage |
true |
항상 | BeginPlay에서 Owner의 OnTakePointDamage, OnTakeRadialDamage delegate를 구독합니다. 이 값은 BeginPlay의 bind 시점에 읽히므로 실행 중 값을 바꿔도 자동 재구독하지 않습니다. |
| Point Damage Signal Name | PointDamageSignalName |
None |
Listen for Gameplay Damage가 켜진 경우 |
Point Damage delegate가 사용할 Signal 이름 override입니다. None이면 assigned asset의 Hit Impact protocol 이름을 해석합니다. |
| Radial Damage Signal Name | RadialDamageSignalName |
None |
Listen for Gameplay Damage가 켜진 경우 |
Radial Damage delegate가 사용할 Signal 이름 override입니다. None이면 assigned asset의 Hit Impact protocol 이름을 해석합니다. |
EOverAnimSignalDirectionSource
Submit Named OverAnim Signal From Owner의 방향 원본입니다.
| 값 | UI 이름 | 해석하는 direction |
|---|---|---|
WorldUp |
World Up | 항상 world +Z입니다. |
WorldDown |
World Down | 항상 world -Z입니다. |
OwnerUp |
Owner Up | Owner의 up vector입니다. Owner가 없으면 world +Z입니다. |
OwnerDown |
Owner Down | Owner up vector의 반대입니다. Owner가 없으면 world -Z입니다. |
OwnerForward |
Owner Forward | Owner forward vector입니다. Owner가 없으면 world forward입니다. |
OwnerRight |
Owner Right | Owner right vector입니다. Owner가 없으면 world right입니다. |
OwnerVelocity |
Owner Velocity | Owner velocity입니다. 없거나 0이면 최종적으로 world +Z로 대체됩니다. |
일반 Signal API
| Blueprint 이름 | C++ 선언 | 입력 | 반환 | 전제 조건·거부 및 상태 변화 |
|---|---|---|---|---|
| Submit OverAnim Signal | bool SubmitOverAnimSignal(const FOverAnimSignal& Signal) |
완전한 FOverAnimSignal |
bool |
SignalName이 None, Magnitude가 비유한수 또는 음수면 false입니다. runtime effect가 active가 아니면 false입니다. 적용되지 않았다면 ApplyOverAnim()을 시도합니다. Direction은 정규화되며, manager가 없지만 적용은 성공했다면 pending queue에 넣어 true를 반환할 수 있습니다. manager가 있으면 그 결과를 반환합니다. |
| Submit Named OverAnim Signal | bool SubmitNamedOverAnimSignal(FName SignalName, float Magnitude = 1.0f, FVector DirectionWS = FVector::ZeroVector, FVector OriginWS = FVector::ZeroVector) |
이름, 크기, world direction, world origin | bool |
Source를 Manual로 설정한 일반 Signal을 만들고 위 함수의 검사를 그대로 적용합니다. SignalName, Magnitude의 유효성 및 active runtime이 필요합니다. |
| Submit Named OverAnim Signal From Owner | bool SubmitNamedOverAnimSignalFromOwner(FName SignalName, float Magnitude = 1.0f, EOverAnimSignalDirectionSource DirectionSource = EOverAnimSignalDirectionSource::OwnerUp) |
이름, 크기, 방향 원본 enum | bool |
방향은 World Up/Down, Owner Up/Down/Forward/Right/Velocity 중 선택합니다. Owner가 없거나 Owner Velocity가 0이면 안전한 Up vector로 대체합니다. Origin은 Target Mesh 위치, 없으면 Owner 위치, 둘 다 없으면 zero입니다. 이후 Named Signal과 같은 검사를 적용합니다. |
| Resolve OverAnim Region For Bone | FName ResolveOverAnimRegionForBone(FName BoneName) |
Skeleton bone 이름 | Region 이름 또는 None |
BoneName == None, asset 자동 적용 실패, manager 해석 실패, 또는 bone이 Region에 속하지 않으면 None입니다. 적용되지 않은 상태에서는 ApplyOverAnim()을 시도합니다. |
C++ 전용 protocol 이름 해석
| C++ 선언 | 입력 | 반환 | 전제 조건·상태 |
|---|---|---|---|
FName ResolveSignalProtocolName(EOverAnimSignalProtocolChannel ProtocolChannel, FName CustomSignalName = NAME_None) const |
protocol channel, custom 이름 | 해석된 Signal 이름 또는 None |
Custom channel은 입력 CustomSignalName을 그대로 반환합니다. 그 외 channel은 현재 적용된 deformer의 SignalProtocolSettings에서 해석하며, applied deformer가 없으면 None입니다. asset을 자동 적용하지 않고 상태도 바꾸지 않습니다. |
contact 기반 Impact Signal API
| Blueprint 이름 | C++ 선언 | 입력 | 반환 | 전제 조건·거부 및 상태 변화 |
|---|---|---|---|---|
| Submit OverAnim Impact Signal | bool SubmitOverAnimImpactSignal(FName SignalName = NAME_None, float Magnitude = 1.0f, FVector ImpactDirectionWS = FVector::ZeroVector, FVector ContactPointWS = FVector::ZeroVector, FVector ContactNormalWS = FVector::UpVector, FName SourceRegionName = NAME_None, FName SourceId = NAME_None, FName ContactBoneName = NAME_None) |
이름, 크기, impact direction, contact point/normal, source region/id, contact bone | bool |
direction·point·normal에 NaN이 있으면 false입니다. 필요 시 asset을 적용하고 HitImpact protocol 이름을 해석합니다. normal이 0이면 World Up으로, direction이 0이면 -normal로 보정합니다. contact point/normal flag가 있는 gameplay Signal을 만든 뒤 일반 Signal 검사를 적용합니다. |
| Submit OverAnim Hit Result Signal | bool SubmitOverAnimHitResultSignal(const FHitResult& HitResult, FVector RelativeVelocityWS, FVector NormalImpulseWS = FVector::ZeroVector, FName SignalName = NAME_None, bool bResolveSourceRegion = true, FName SourceId = NAME_None) |
hit, 상대 속도, normal impulse, 이름, source region 자동 해석, source id | bool |
velocity/impulse에 NaN이 있으면 false입니다. assigned asset의 impact settings로 magnitude를 계산하며 결과가 0 이하이면 거부합니다. ImpactNormal이 0이면 Normal을 사용합니다. bResolveSourceRegion이 참이면 HitResult.BoneName에서 Region을 해석합니다. |
| Submit OverAnim Collision Signal | bool SubmitOverAnimCollisionSignal(const FHitResult& HitResult, UPrimitiveComponent* OtherComponent, FVector NormalImpulseWS = FVector::ZeroVector, FName SignalName = NAME_None, bool bResolveSourceRegion = true) |
hit, 상대 Component, impulse, 이름, source region 자동 해석 | bool |
Other Component 또는 Hit Component에서 물리/Component/Owner velocity를 구해 Target velocity와의 상대 속도를 계산합니다. impact magnitude가 충분하지 않거나 asset 적용·protocol 해석이 실패하면 false입니다. 동일 source·route·bone·근접 contact의 중복 impact는 asset deduplication 설정에 따라 억제됩니다. |
| Submit OverAnim Trace Impact Signal | bool SubmitOverAnimTraceImpactSignal(const FHitResult& HitResult, float Damage, FVector TraceDirectionWS, FName SignalName = NAME_None, bool bResolveSourceRegion = true) |
trace hit, damage, trace direction, 이름, source region 자동 해석 | bool |
ImpactNormal 또는 Normal을 contact normal으로 사용해 gameplay impact로 변환합니다. Damage가 비유한수이거나 direction/contact 입력에 NaN이 있으면 거부됩니다. asset의 damage-to-magnitude 변환 결과가 0 이하면 거부됩니다. |
| Submit OverAnim Point Damage Signal | bool SubmitOverAnimPointDamageSignal(float Damage, FVector HitLocationWS, FVector HitNormalWS, FName HitBoneName, FVector ShotDirectionWS, FName SignalName = NAME_None, bool bResolveSourceRegion = true) |
damage, hit location/normal/bone, shot direction, 이름, source region 자동 해석 | bool |
입력을 gameplay impact로 전달합니다. Damage/벡터의 유효성, asset 적용·protocol 해석, damage magnitude가 모두 필요합니다. |
| Submit OverAnim Radial Damage Signal | bool SubmitOverAnimRadialDamageSignal(float Damage, FVector DamageOriginWS, const FHitResult& HitResult, FName SignalName = NAME_None, bool bResolveSourceRegion = true) |
damage, damage origin, hit, 이름, source region 자동 해석 | bool |
blocking hit이면 ImpactPoint를 contact point로 사용하고, 아니면 Target Mesh 위치를 사용합니다. impact direction은 origin에서 contact로 향하게 계산합니다. normal이 없으면 -ImpactDirection을 사용한 뒤 gameplay impact 검사를 적용합니다. |
수락 이후의 공통 거부 조건
- Component 또는 global master switch가 꺼져 있거나,
Disable Effects in Slow Motion정책이 현재 time scale에서 억제 중이거나,Return to Source Posepause 상태이면 일반 Signal은 수락되지 않습니다. - Signal 이름이 route와 일치하지 않거나, Response Rule의 activation·region·module 조건이 일치하지 않으면 manager가 요청을 효과로 전개하지 않을 수 있습니다.
Contact Dent + Ring Bulge,Impact Ripple처럼 contact frame을 요구하는 Module은 point와 0이 아닌 normal이 있는 Signal을 필요로 합니다.