격투 게임 프레임 이득(Frame Advantage) 설계: 타격 후 딜레이와 밸런싱 가이드
격투 게임의 프레임 이득을 히트스턴·가드스턴·경직 수식으로 계산하고 타격 후 딜레이를 설계·구현·검증하는 실전 밸런싱 방법을 정리합니다.

격투 게임의 프레임 이득(Frame Advantage)은 공격자가 행동을 다시 시작할 수 있는 시점과 피격자 또는 가드한 상대가 행동을 다시 시작할 수 있는 시점의 차이다. 핵심은 타격 후 딜레이를 감각으로만 조정하지 않고 공격의 남은 경직과 상대의 히트스턴·가드스턴을 프레임 단위로 계산해 의도한 공격권과 반격 가능성을 만드는 데 있다.
프레임 이득(Frame Advantage)이란 무엇인가?
프레임 이득은 공격이 맞거나 막힌 뒤 양쪽 캐릭터가 다음 행동을 할 수 있게 되는 시간 차이다. 일반적으로 + 값은 공격자가 먼저 움직이고 - 값은 수비자가 먼저 움직인다는 뜻이다.
예를 들어 공격이 가드되었을 때 프레임 이득이 -5라면 공격자는 수비자보다 5프레임 늦게 행동할 수 있다. 수비자의 가장 빠른 공격이 5프레임 발동이라면 빈틈을 확정 반격할 수 있다. 반대로 +2라면 공격자가 2프레임 먼저 행동하므로 짧은 공격이나 잡기 압박을 이어 갈 여지가 생긴다.
히트 시와 가드 시 수식
타격이 발생한 시점부터 공격자의 회복 경직이 끝날 때까지 남은 프레임을 잔여 회복 경직이라고 하자. 프레임 이득은 다음처럼 계산할 수 있다.
Stun: 히트 시에는 히트스턴, 가드 시에는 가드스턴RemainingRecovery: 타격 판정이 닿은 순간부터 공격자가 다시 행동할 때까지의 남은 회복 경직
같은 공격이라도 타격 판정이 늦게 닿으면 남은 회복 경직이 줄어든다. 이것이 근접 타격보다 끝부분 타격이 더 안전해지는 이유이며 흔히 말하는 거리별 프레임 이득 변화의 출발점이다.
| 상황 | 히트스턴 또는 가드스턴 | 잔여 회복 경직 | 결과 | 설계 의미 |
|---|---|---|---|---|
| 근거리 가드 | 12F | 15F | -3F | 약한 공격에는 비교적 안전 |
| 끝거리 가드 | 12F | 10F | +2F | 공격권을 이어 갈 수 있음 |
| 히트 | 18F | 12F | +6F | 빠른 연계 또는 확인 콤보 가능 |

타격 후 딜레이는 왜 단순한 경직 시간이 아닌가?
타격 후 딜레이는 보통 다음 상태가 결합된 결과다.
| 요소 | 대상 | 역할 |
|---|---|---|
| 공격 시작 프레임(Startup) | 공격자 | 판정이 발생하기까지 걸리는 시간 |
| 지속 프레임(Active) | 공격자 | 타격 판정이 유지되는 시간 |
| 회복 프레임(Recovery) | 공격자 | 공격 후 행동 불가능 시간 |
| 히트스턴(Hitstun) | 피격자 | 맞은 뒤 행동 불가능 시간 |
| 가드스턴(Blockstun) | 수비자 | 막은 뒤 행동 불가능 시간 |
| 히트스톱(Hitstop) | 양쪽 | 타격감을 위해 일시적으로 정지하는 시간 |
| 넉백·경직 애니메이션 | 양쪽 | 거리와 후속 선택지를 바꾸는 이동 결과 |
히트스톱은 프레임 이득과 분리해서 생각하는 편이 안전하다. 양쪽에 동일한 히트스톱을 적용하면 체감은 강해지지만 이득값은 변하지 않는다. 반면 공격자와 수비자의 히트스톱 길이가 다르거나 히트스톱 중 입력 버퍼 처리 규칙이 다르면 실제 전투 흐름이 달라진다.
또한 숫자만 맞아도 좋은 공격이 되지는 않는다. +3F 공격이 넉백으로 상대를 멀리 밀어 내면 근거리 잡기 압박은 불가능할 수 있다. 반대로 -2F라도 거리를 크게 벌리는 기술은 실전에서 안전하게 느껴질 수 있다. 프레임 데이터, 거리, 판정, 입력 버퍼를 함께 검토해야 한다.
프레임 이득 시스템을 어떻게 설계할까?
1. 전투의 목표 속도를 먼저 정한다
먼저 게임의 가장 빠른 기본 공격과 방어 수단을 정한다. 예를 들어 지상 기본기의 최소 발동이 5F이고 잡기 발동이 5F이며 무적 반격기가 7F라면 -5F는 명확한 처벌선이 되고 +2F는 제한적인 압박 수치가 된다.
60 FPS 격투 게임에서 1프레임은 약 16.67ms다. 다만 구현은 렌더링 프레임이 아니라 고정 시뮬레이션 틱으로 관리해야 한다. Unity라면 FixedUpdate의 기본값인 0.02초는 50Hz이므로 60F 프레임 데이터와 직접 일치하지 않는다. 60프레임 기준 설계를 유지하려면 전투 시뮬레이션 틱을 1/60초로 고정하거나 모든 데이터를 틱 단위로 환산해야 한다.
2. 공격별 목표 이득값을 역할로 배정한다
기술의 역할을 먼저 정의하고 그에 맞는 히트·가드 이득을 배정한다. 모든 기본기를 가드 시 안전하게 만들면 수비 선택지가 급격히 줄고 모든 기술을 불리하게 만들면 공격 교환이 지나치게 끊긴다.
| 기술 역할 | 가드 시 권장 방향 | 히트 시 권장 방향 | 주의점 |
|---|---|---|---|
| 빠른 견제기 | -1F ~ -3F | +1F ~ +3F | 반복 압박이 자동화되지 않게 거리 확인 |
| 근거리 압박기 | 0F ~ +2F | +3F 이상 | 잡기와 빠른 공격의 이지선다 점검 |
| 중거리 견제기 | -3F ~ -7F | +2F ~ +5F | 끝거리 명중 시 안전해지는지 검증 |
| 큰 리턴 기술 | -8F 이하 | 큰 히트스턴 또는 다운 | 위험 대비 보상 균형 유지 |
| 점프 공격 | 착지 시점에 따라 변화 | 연계 또는 압박 | 깊은 점프와 얕은 점프를 분리 검증 |
이 표는 절대적인 규칙이 아니다. 그러나 기술의 위험과 보상을 문서화하는 출발점이 된다. 특히 가드 시 +인 기술은 후속 공격의 발동 프레임, 잡기 회피 수단, 백대시 무적, 패리 같은 시스템 요소와 함께 검증해야 한다.
3. 히트 위치와 캔슬 규칙까지 데이터화한다
프레임 이득은 하나의 정수만으로 끝나지 않는다. 공격의 각 활성 프레임에 onHit와 onBlock 값을 기록하거나 타격 시점의 남은 회복 경직을 계산할 수 있어야 끝거리 명중을 자연스럽게 처리할 수 있다.
다음은 공격 데이터를 분리해 두는 간단한 C# 예시다.
public readonly record struct AttackFrameData(
int StartupFrames,
int ActiveFrames,
int RecoveryFrames,
int HitstunFrames,
int BlockstunFrames,
int HitstopFrames
);
public static int CalculateFrameAdvantage(
int stunFrames,
int remainingRecoveryFrames
)
{
return stunFrames - remainingRecoveryFrames;
}
public static int GetRemainingRecovery(
AttackFrameData attack,
int activeFrameThatHit
)
{
int remainingActive = attack.ActiveFrames - activeFrameThatHit;
return remainingActive + attack.RecoveryFrames;
}
activeFrameThatHit는 1부터 시작한다고 가정한다. 실제 프로젝트에서는 공격이 히트한 프레임, 캔슬 허용 시작 프레임, 공중 피격 상태, 카운터 히트 보정도 별도 필드로 둬야 한다. 애니메이션 재생 속도에서 역산한 값보다 전투 데이터 원본을 기준으로 판정과 경직을 제어하는 편이 수정과 테스트에 유리하다.
히트스톱과 입력 버퍼는 프레임 이득 체감에 어떤 영향을 주는가?
히트스톱은 타격 순간의 정지 연출이며 입력 버퍼는 행동 불가능한 동안 다음 입력을 저장하는 규칙이다. 두 시스템은 숫자상 프레임 이득이 같아도 조작감과 난이도를 크게 바꾼다.
- 양쪽에 같은 히트스톱을 적용하면 프레임 이득은 유지하면서 타격감을 강화할 수 있다.
- 공격자만 더 긴 히트스톱을 받으면 실제 이득이 줄어들 수 있다.
- 수비자가 가드스턴 중 다음 행동을 버퍼할 수 있으면
-2F상황에서도 즉시 반격하기 쉬워진다. - 공격자에게만 넉넉한 캔슬 입력 버퍼를 주면 연계 난이도는 낮아지지만 확인 압박이 강해질 수 있다.
따라서 문서에는 입력 버퍼 N프레임, 히트스톱 중 입력 허용 여부, 가드스턴 종료 직전 입력 처리를 명시해야 한다. 예를 들어 4F 입력 버퍼가 있다면 플레이어는 경직 종료 4프레임 전부터 다음 행동을 예약할 수 있다.
flowchart LR
A[공격 판정 충돌] --> B{히트 또는 가드}
B -->|히트| C[양쪽 히트스톱]
B -->|가드| D[양쪽 가드 히트스톱]
C --> E[피격자 히트스턴]
D --> F[수비자 가드스턴]
E --> G[남은 회복 경직과 비교]
F --> G
G --> H[프레임 이득 계산]
H --> I[입력 버퍼와 후속 행동 처리]
타격 후 딜레이 밸런싱은 어떻게 검증할까?
1. 프레임 트랩을 자동 테스트한다
가드 후 공격자가 +2F이고 다음 공격 발동이 5F라면 수비자의 5F 공격은 2프레임 늦게 나온다. 이때 수비자가 공격 버튼을 가장 빠르게 눌렀을 때도 반격이 막히는지 자동화 테스트로 확인한다.
반대로 공격자가 -5F일 때 수비자의 5F 공격이 확정으로 닿는지 검사한다. 판정 충돌, 거리 변화, 입력 버퍼를 포함해야 하므로 단순 데이터 계산과 실제 시뮬레이션 테스트를 모두 둔다.
2. 거리별 명중을 재현한다
공격의 첫 활성 프레임과 마지막 활성 프레임에서 각각 맞춘 뒤 프레임 이득과 캐릭터 간 거리를 기록한다. 끝거리 명중만 지나치게 유리하면 중거리 견제기가 안전한 압박기로 변질될 수 있다.

3. 훈련 모드에 검증 정보를 제공한다
개발자 도구뿐 아니라 훈련 모드에도 다음 정보를 제공하면 플레이테스트와 커뮤니티 검증 비용이 크게 줄어든다.
- 히트 시 프레임 이득과 가드 시 프레임 이득
- 마지막 공격의 발동·지속·회복 프레임
- 카운터 히트 여부
- 가드 후 거리
- 녹화 재생 더미의 첫 행동과 입력 버퍼 상태
수치는 플레이어에게 모두 공개할지 결정해야 하지만 내부적으로는 항상 기록하는 편이 좋다. 공개하지 않더라도 밸런스 회의에서 재현 가능한 근거가 된다.
자주 묻는 질문 (FAQ)
프레임 이득이 +0F이면 누가 유리한가?
원칙적으로는 동시에 행동 가능하다. 다만 공격 후 거리, 판정 길이, 무적, 입력 버퍼, 이동 속도에 따라 실제 선택지는 같지 않을 수 있다.
가드 시 +프레임 기술은 항상 강한가?
항상 그렇지는 않다. 후속 공격이 닿지 않는 거리라면 이득을 압박으로 전환하기 어렵다. 또한 백대시, 무적기, 패리, 가드 캔슬 같은 방어 시스템이 존재하면 수치만으로 우열을 판단할 수 없다.
히트스톱을 늘리면 콤보가 쉬워지는가?
히트스톱 동안 입력을 버퍼할 수 있고 공격자에게 충분한 취소 창이 있다면 쉬워질 수 있다. 다만 양쪽 히트스톱을 동일하게 늘리는 것만으로는 프레임 이득 자체가 늘어나지 않는다.
마무리
좋은 프레임 이득 설계는 공격마다 큰 + 값을 주는 일이 아니라 위험·보상·거리·방어 수단을 일관된 프레임 규칙으로 연결하는 일이다. 먼저 가장 빠른 공방 수단을 기준점으로 정하고 기술 역할별 목표 이득을 배치한 뒤 활성 프레임별 명중과 입력 버퍼까지 포함해 훈련 모드와 자동 테스트에서 검증하자. 그러면 타격 후 딜레이는 답답한 경직이 아니라 전투의 리듬과 선택지를 만드는 시스템이 된다.



