using Spine.Unity; using UnityEngine; public class DamagedEffectHandler : MonoBehaviour, IOwnedComponent { static readonly float _redEffectDuration = 0.8f; public Character Owner { get; private set; } float redEffectRemainTime; public void Initialize(Character owner) { Owner = owner; Owner.OnDamaged += OnDamaged; } private void OnDamaged(Character _, Damage damage) { redEffectRemainTime = _redEffectDuration; } private void Update() { float prevTime = redEffectRemainTime; redEffectRemainTime = Mathf.Max(redEffectRemainTime - Time.fixedDeltaTime, 0f); if (prevTime > redEffectRemainTime) Owner.SkeletonAnimation.Skeleton.SetColor(Color.Lerp(Color.white, Color.red, redEffectRemainTime / _redEffectDuration)); } private void OnDestroy() { if (Owner == null) return; Owner.OnDamaged -= OnDamaged; } }