fiore 32b3cb918a [Feat] 넉백 기능 구현
- 플레이어가 PlayerController를 사용한다고 가정하고 넉백 구현

Work in JIRA ISSUE DEG-100
2025-05-02 11:51:24 +09:00

43 lines
1.2 KiB
C#

using System.Collections;
using UnityEngine;
public class KnockbackEffect : StatusEffect
{
private Vector3 _sourcePosition;
private float _knockbackForce;
private float _elapsed = 0f;
public KnockbackEffect(Vector3 sourcePosition, float knockbackForce,float duration)
{
effectName = "Knockback";
this.duration = duration;
_sourcePosition = sourcePosition;
_knockbackForce = knockbackForce;
}
public override void ApplyEffect(CharacterBase target)
{
Vector3 direction = (target.transform.position - _sourcePosition).normalized;
direction.y = 0f; // 수직 방향 제거
target.StartCoroutine(KnockbackCoroutine(target, direction));
}
private IEnumerator KnockbackCoroutine(CharacterBase pc, Vector3 direction)
{
CharacterController controller = pc.GetComponent<CharacterController>();
if (controller == null) yield break;
_elapsed = 0f;
while (_elapsed < duration)
{
controller.Move(direction * (_knockbackForce * Time.deltaTime));
_elapsed += Time.deltaTime;
yield return null;
}
}
public override void RemoveEffect(CharacterBase target)
{
}
}