[Unity] FPS에서 피격 시 KnockBack 넉백 피격효과 구현

728x90

FPS에서 피격 시 KnockBack 넉백  피격효과 구현

Knock-Back은 게임에서 사용하는 단어로, 적을 공격할 때 뒤로 밀어내는 효과를 나타낸다. 보통 FPS 게임에서 총알에 맞을 때 살짝씩 뒤로 밀리는 동작을 일컫는다. 애니메이션 없이 넉백 시 약간의 위치값이 조정되는 기능을 구현해보았다.

public float knockbackSpeed = 0.5f;

m_State = EnemyState.Damage;
transform.position += -Vector3.forward * KnockbackSpeed;

상태머신을 사용해 Enemy 상태가 Damage인 경우 Enemy Vector3.forward가 - 방향으로 kockbackSpeed 만큼 이동시켜 주었다. 여기서 Time.deltaTime을 따로 곱하지 않은 이유는 넉백은 피격 시 1회 실행되기 때문이다.

하지만 해당 코드의 문제는 피격 방향에 따라 밀리지 않는다는 것이다. enemy의 좌표를 기준으로 -Vector3.forward 방향으로만 밀린다면 효과적인 넉백 기능이라고 할 수 없다.

 

enemy.OnDamgeProcess(ray.direction);
public void OnDamageProcess(Vector3 shootDirection)
{	
	cc.Move(shootDirection * knockbackSpeed);
	shootDirection.y = 0;
}

ray의 방향에 따라 피격 효과를 내어줄려면 OnDamageProcess() 함수의 매개변수로 Vector3 shootDirection 인자 값을 받아오고, ray.direction을 가져오면 된다. 마찬가지로 ray 방향과 knockbackSpeed를 곱해 cc.Move()로 이동해주면 된다.

하지만 이러한 경우에도 문제가 있다. 피격 시 순간이동을 하는 듯 이동하기 때문에 역시 자연스럽지 않다.

 

 KnockBackPos = transform.position + shootDirection * knockbackSpeed; // 넉백 시 이동할 위치

transform.position = Vector3.Lerp(transform.position, KnockBackPos, 5 * Time.deltaTime);

이럴 때 Lerp 함수를 사용하여 자연스러운 넉백 움직임을 구현해주면 되겠다.

728x90