콘텐츠로 이동

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 SignalNameNone, 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 SourceManual로 설정한 일반 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 Pose pause 상태이면 일반 Signal은 수락되지 않습니다.
  • Signal 이름이 route와 일치하지 않거나, Response Rule의 activation·region·module 조건이 일치하지 않으면 manager가 요청을 효과로 전개하지 않을 수 있습니다.
  • Contact Dent + Ring Bulge, Impact Ripple처럼 contact frame을 요구하는 Module은 point와 0이 아닌 normal이 있는 Signal을 필요로 합니다.