보스전 카메라 인아웃과 FOV 변화로 시각적 압박감을 설계하는 법
보스전에서 카메라 인아웃과 FOV 변화를 무작정 키우면 조작감과 가독성이 무너진다. 공격 단계·거리·위험도에 연동한 카메라 설계, 보간 수식, Unity 구현 예시와 검증 지표를 정리한다.

보스전의 시각적 압박감은 카메라를 단순히 흔들거나 FOV를 좁히는 것으로 만들지 않는다. 플레이어가 위험을 인지할 수 있는 최소 가시성을 지키면서 보스의 거리·공격 단계·위험도에 따라 카메라 거리와 FOV를 짧고 예측 가능하게 변화시키는 것이 핵심이다. 특히 큰 공격의 준비 구간에는 압박을 주고 회피 판정 구간에는 다시 시야와 조작 여유를 돌려줘야 전투 UX가 무너지지 않는다.
보스전 카메라 인아웃과 FOV 변화는 왜 압박감을 만드는가?
카메라 인(Camera In)은 보스와 플레이어의 화면 점유율을 높여 개인 공간이 침범당한다는 감각을 만들 수 있다. FOV(Field of View)를 좁히면 화면에 담기는 범위가 줄어 보스가 더 크게 보일 수 있지만, 카메라 위치를 바꾸지 않는 것만으로 원근감이 압축되는 것은 아니다.
다만 두 효과는 같은 결과를 내지 않는다.
| 연출 요소 | 주된 시각 효과 | 적합한 상황 | 대표 위험 |
|---|---|---|---|
| 카메라 인 | 대상의 화면 점유율 증가 | 붙잡기, 근접 압박, 페이즈 전환 | 플레이어와 공격 범위가 함께 가려짐 |
| 카메라 아웃 | 전장과 거리 관계 노출 | 광역 공격, 다수 기믹, 탈출 판단 | 보스의 위압감 약화 |
| FOV 축소 | 주변 시야 축소, 원근 압축 | 공격 준비, 결투 감각, 긴장 고조 | 멀미와 주변 위험 누락 |
| FOV 확대 | 속도감과 공간감 증가 | 돌진, 회피, 전장 이동 | 화면 왜곡과 조준 정밀도 저하 |
이 연출의 목표는 더 불편한 화면이 아니라 위험의 성격을 먼저 느끼게 하는 화면이다. 예를 들어 보스가 검을 들어 올리는 준비 동작에는 카메라를 조금 인하고 FOV를 줄여 결투의 밀도를 높일 수 있다. 그러나 실제 베기와 회피가 필요한 구간에서는 시야를 회복해 공격 궤적과 안전지대를 읽을 수 있어야 한다.

어떤 공격에 카메라 인아웃과 FOV를 적용해야 할까?
모든 공격에 카메라 연출을 붙이면 정보량이 일정하지 않아 플레이어가 공격 규칙을 학습하기 어려워진다. 카메라 변화는 전투의 의미 있는 전환점에 한정하는 편이 좋다.
적용 우선순위
- 페이즈 전환: 보스의 체력 임계값 통과, 무기 교체, 전장 변형처럼 전투 규칙이 바뀌는 순간에 사용한다.
- 강한 예고가 있는 결정타: 준비 동작이 충분하고 회피 방향을 읽을 수 있는 공격에 짧게 적용한다.
- 거리 규칙이 핵심인 패턴: 붙어야 안전한 공격에는 인, 멀어져야 하는 광역 공격에는 아웃을 사용한다.
- 플레이어 통제권이 낮은 순간: 컷신, 처형, 짧은 경직처럼 직접 조작 부담이 적을 때 강한 변화를 허용한다.
적용을 피해야 하는 상황
- 여러 투사체와 장판을 동시에 피해야 하는 구간
- 정밀 조준, 패링, 프레임 단위 회피가 핵심인 구간
- 카메라가 이미 벽이나 지형에 충돌한 상태
- 보스가 화면 밖에서 즉시 공격할 수 있는 구간
카메라 압박감의 파라미터는 어떻게 설계할까?
카메라 연출은 개별 애니메이션보다 데이터 파라미터로 관리해야 밸런싱과 QA가 가능하다. 3인칭 액션 게임이라면 최소한 아래 항목을 분리한다.
| 파라미터 | 설명 | 초기 검토 범위 |
|---|---|---|
baseDistance | 평상시 카메라 거리 | 게임 기본 카메라값 |
combatDistance | 전투 중 기본 거리 | baseDistance보다 5~15% 짧게 |
closeDistance | 압박 연출 거리 | combatDistance보다 10~20% 짧게 |
baseFov | 평상시 수직 FOV | 프로젝트 기본값 |
pressureFov | 압박 연출 FOV | baseFov보다 3~8도 작게 |
transitionIn | 압박 상태 진입 시간 | 0.15~0.40초 |
transitionOut | 기본 상태 복귀 시간 | 0.25~0.60초 |
holdTime | 최대 유지 시간 | 공격 준비 길이 이내 |
권장 범위는 출발점일 뿐이다. 실제 값은 캐릭터 속도, 화면 비율, 보스 크기, 잠금 조준 유무에 따라 달라진다. 특히 수직 FOV와 수평 FOV를 혼동하면 플랫폼별 화면 구성이 달라진다. Unity의 Camera.fieldOfView는 기본적으로 수직 FOV를 사용한다.
보스 위험도 r을 0부터 1 사이로 정규화하고 거리와 FOV를 연속적으로 보간하면 상태 전환이 과도하게 튀는 문제를 줄일 수 있다.
여기서 r은 단순히 보스와의 거리만으로 계산하지 않는 편이 좋다. 공격의 준비 단계, 플레이어의 피격 위험, 카메라 충돌 상태를 함께 반영해야 한다.
r_collision에 음수 가중치를 주는 이유는 명확하다. 카메라가 벽에 밀린 상황에서 추가 인 연출을 강행하면 캐릭터와 공격 정보가 더 쉽게 가려진다.
보스전 카메라 상태를 단계별로 구현하는 방법
1. 전투 상태와 연출 상태를 분리한다
보스 AI의 상태를 카메라가 직접 해석하게 만들면 결합도가 높아진다. 보스는 AttackTelegraph, AttackActive, PhaseTransition처럼 의미 있는 전투 이벤트를 발행하고 카메라 시스템은 이를 Normal, Pressure, Wide, LockedCinematic 같은 연출 상태로 변환하는 구조가 안전하다.
flowchart LR
A[보스 전투 이벤트] --> B[카메라 연출 규칙]
B --> C{우선순위 판정}
C -->|페이즈 전환| D[LockedCinematic]
C -->|광역 위험| E[Wide]
C -->|근접 예고| F[Pressure]
C -->|기본| G[Normal]
D --> H[거리·FOV 목표값]
E --> H
F --> H
G --> H
H --> I[카메라 보간]
우선순위는 플레이어 생존 정보가 풍부한 상태를 우선해야 한다. 예를 들어 Wide가 필요한 광역 공격 중에는 Pressure 요청이 들어와도 넓은 시야를 유지하는 편이 낫다.
2. 즉시 변경 대신 시간 기반 보간을 사용한다
FOV나 거리를 한 프레임에 바꾸면 화면이 튀고 멀미를 유발하기 쉽다. SmoothDamp 또는 감쇠가 있는 보간을 사용해 진입과 복귀 속도를 따로 제어한다.
using UnityEngine;
public sealed class BossCameraPressure : MonoBehaviour
{
[SerializeField] private Camera targetCamera;
[SerializeField] private Transform cameraRig;
[SerializeField] private float baseFov = 60f;
[SerializeField] private float pressureFov = 54f;
[SerializeField] private float baseDistance = 5.0f;
[SerializeField] private float pressureDistance = 4.2f;
[SerializeField] private float enterSmoothTime = 0.20f;
[SerializeField] private float exitSmoothTime = 0.40f;
private float currentFovVelocity;
private float currentDistanceVelocity;
private float pressure;
public void SetPressure(float value)
{
pressure = Mathf.Clamp01(value);
}
private void LateUpdate()
{
float targetFov = Mathf.Lerp(baseFov, pressureFov, pressure);
float targetDistance = Mathf.Lerp(baseDistance, pressureDistance, pressure);
float smoothTime = pressure > 0.01f ? enterSmoothTime : exitSmoothTime;
targetCamera.fieldOfView = Mathf.SmoothDamp(
targetCamera.fieldOfView,
targetFov,
ref currentFovVelocity,
smoothTime);
Vector3 localPosition = cameraRig.localPosition;
localPosition.z = -Mathf.SmoothDamp(
-localPosition.z,
targetDistance,
ref currentDistanceVelocity,
smoothTime);
cameraRig.localPosition = localPosition;
}
}
이 코드는 목표값 보간의 최소 예시다. 카메라 리그가 로컬 -Z 방향을 바라보고 거리 값이 localPosition.z에 대응한다고 가정한다. 실제 프로젝트에서는 카메라 충돌 보정 후 거리, 락온 대상 프레이밍, 컷신 우선순위를 별도 계층에서 처리해야 한다.
3. 회피 판정 구간에서는 시야를 복귀시킨다
공격 준비의 0.2~0.4초 동안 압박을 주었다면 실제 피격 판정이 시작되기 직전 또는 시작과 동시에 pressure를 낮춘다. 이 규칙은 연출을 약하게 만드는 것이 아니라 플레이어가 실패 원인을 이해할 수 있게 만드는 장치다.
예시는 다음과 같다.
- 준비 0.00~0.30초:
pressure = 0.7 - 공격 활성 0.30~0.65초:
pressure = 0.2 - 공격 종료 0.65초 이후:
pressure = 0.0
보스가 플레이어를 가두는 공격이라면 시야를 즉시 되돌리는 대신, 보스의 무기 궤적이나 바닥 텔레그래프의 명도 대비를 높여 위험 정보를 보완한다.
가독성을 해치지 않는 보스전 FOV 변화의 기준
FOV 변화는 카메라 거리 변화보다 멀미와 조작 감각에 더 직접적으로 영향을 준다. 따라서 수치보다 변화량과 빈도가 중요하다.
| 검증 항목 | 확인 질문 | 조정 방향 |
|---|---|---|
| 공격 판독성 | 보스의 손, 무기, 발밑 표시가 동시에 보이는가? | FOV 축소 폭을 줄이거나 카메라를 아웃 |
| 회피 성공률 | 연출 구간에서만 회피 실패율이 증가하는가? | 공격 활성 구간의 압박값을 낮춤 |
| 공간 인지 | 벽, 낭떠러지, 부하 기믹을 예측할 수 있는가? | 광역 공격에는 Wide 상태 우선 |
| 멀미 반응 | 반복 전환 뒤 시각 피로가 발생하는가? | 전환 횟수와 가속도를 낮춤 |
| 조준 안정성 | 락온과 원거리 조준이 흔들리지 않는가? | 조준 중 FOV 변화 제한 |
카메라 압박 효과의 상한은 플레이어가 읽어야 할 정보량으로 결정한다. 보스가 크다고 해서 무조건 더 인할 필요는 없다. 큰 보스일수록 다리 위치, 약점, 낙하물, 전장 가장자리를 함께 봐야 하므로 오히려 아웃 카메라가 더 긴장감 있는 선택이 될 수 있다.
자주 묻는 질문 (FAQ)
FOV를 좁히는 것만으로 압박감을 만들 수 있나?
가능하지만 권장하지 않는다. FOV 축소는 주변부 정보를 줄이므로 보스의 공격 예고, 사운드, 조명, 카메라 거리 변화와 함께 짧게 사용하는 편이 안전하다.
카메라 인 연출은 언제 해제해야 하나?
원칙적으로 플레이어가 정밀 회피나 공간 판단을 해야 하는 공격 활성 구간 이전에 해제한다. 연출보다 피격 원인의 판독성이 우선이다.
카메라 수치는 플레이 테스트에서 무엇으로 평가해야 하나?
체감 의견만 보지 말고 패턴별 피격률, 회피 성공률, 카메라 충돌 발생 횟수, 멀미·가독성 설문을 함께 기록한다. 특정 패턴에서만 실패율이 높다면 난이도보다 카메라 정보량이 원인일 수 있다.
정리
보스전 카메라 인아웃과 FOV 변화는 보스의 위압감을 키우는 보조 장치다. 준비 구간에는 인과 FOV 축소로 긴장을 만들고 공격 활성 구간에는 필요한 시야를 복구한다. 전투 이벤트와 카메라 상태를 분리하고 우선순위·보간 시간·충돌 보정을 데이터로 관리하면 연출과 공정한 난이도를 함께 확보할 수 있다.



