TECHARTNOMAD | MAZELINE.TECH

TECH.ART.FLOW.IO

[번역][갓 오브 워] 새로운 시점 기반 전투 시스템의 혁신

jplee 2026. 6. 30. 01:17

역자의 말
클라이언트 프로그래밍 경험이 거의 전무하기 때문에 봇이나 애너미등의 인공지능 처리 방식에 대한 케이스 스터디를 할 요량으로 MMORPG 가 아닌 액션성이 있는 콘설게임의 AI 구현 사례들을 집중적으로 탐구하는 시간을 좀 갖고자 합니다. 예전 컨설팅 고객사에 POC 버전을 만들어 드릴때 MMORPG 애너미 클래스를 만들어 본 적이 있는데 보스 몬스터가 아니고서는 그다지 깊은 학습이 요구 되지않더라고요. 별 도움이 되지 않았다는겁니다. 점점 콘솔 게임에서 애너미 클래스는 전략적인 행동처리 중심이 되가고 있어 보이기도 하고 말이죠.


저자: 토비아

 

최근 뛰어난 액션 게임의 메커니즘 설계 사고방식을 깊이 있게 이해해보고 싶어져서, GDC 2019에서 Santa Monica의 최신작인 《갓 오브 워》 전투 시스템 토크를 다시 찾아봤습니다. 발표자는 Mihir Sheth입니다. 실제로는 해당 작품 개발에 참여했던 개발자와의 대화에서, 시스템 구현의 복잡도가 GDC 발표에서 가볍게 다뤄진 것보다 훨씬 크다는 이야기를 들었지만, 그 안에는 참고할 만한 아이디어가 많이 담겨 있어 여기 메모로 남깁니다.

《갓 오브 워》가 이번 혁신에서의 설계 목표는, 시리즈의 핵심 경험 위에 3인칭 시점을 추가하고, 더욱 우수한 경험을 실현하는 것으로 결정하였으며, 이로부터 두 가지 구체적인 설계 목표가 도출되었습니다:

  • 새로운 시점을 기반으로 전투 시스템을 재구성
  • 원래 《갓 오브 워》 시리즈의 핵심 정체성(identity) 보존

이를 위해, 개발자는 먼저 《갓 오브 워》의 핵심 정체성이 무엇인지 분석해야 했으며, 대체로 다음과 같습니다:

  • 콤보 게임플레이 (흥미로운 적의 피격 반응)
  • 위력이 강한 공격은 전방으로 이동
  • 1대다
  • 쉬운 조작성

《갓 오브 워》는 1대다를 요구하며 공격성을 중시하는 게임 경험이기에, 플레이어는 행동 원칙상 극도의 자신감과 공격성을 갖추어야 합니다. 하지만 시장에 있는 대부분의 3인칭 액션 게임은 1v1 전투 경험을 더욱 강조하기에, 《갓 오브 워》가 실현하고자 하는 경험 목표와는 부합하지 않습니다. 이를 그대로 《갓 오브 워》에 생搬硬套(무비판적으로 가져다 쓰는 것)하는 것은, 극도로 혼란스럽고 형편없는 게임 경험만을 초래할 것입니다.

전투 씬이 비정상적으로 혼란스럽고, 경험이 매우 형편없으며, 플레이어는 적의 위치를 전혀 파악할 수 없습니다. 여기서 플레이어에게 가장 큰 도전은 게임 콘텐츠 자체가 아니라, 어떻게 빠르게 시점을 조정하느냐는 것입니다.

이미 성숙한 이러한 후면 시점 게임들은 기본적으로 1대1을 기반으로 구축되어 있기에, 과도한 혼란을 초래하지 않습니다.

따라서, 개발팀은 플레이어가 명확한 전투 행동 순서를 구축하도록 해야 했으며, 구체적으로 다음과 같습니다:

  1. 적 추적 (Tracking Enemies)
  2. 적 잠금 (Target Enemies)
  3. 적 공격 (Engaging Enemies)

1. 적 추적 (Tracking Enemies)

플레이어가 적을 잘 추적(track)할 수 있게 하려면, 플레이어가 어떤 적이 aggressive인지 쉽게 식별할 수 있어야 합니다. 그리하여 팀은 scoring을 통해 적의 위협성을 정렬하고, tokens를 통해 플레이어가 주의해야 할 적을 할당합니다. 매번 tokens 할당에는 고정된 할당값이 있으며, 그림에서 보이는 바와 같습니다. 고정값이 14개의 tokens라고 가정하면, 앞선 세 적이 이미 모든 tokens를 할당해버렸기에, 네 번째 파란색 적은 non-aggressive로 분류되어 플레이어와 일정한 거리를 유지하게 됩니다.

scoring을 통해 적의 위협 지수를 계산하여, 우선순위 정렬에 활용

tokens가 이미 앞선 셋에 의해 모두 분배되었기에, 파란색 적은 non-aggressive 적으로 분류됩니다

위협성을 계산한 후, 기준에 부합하는 적은 플레이어가 위협을 느끼는 위치에 최대한 서고, 부합하지 않는 적은 반대입니다. 계산에는 깊이(depth)가 고려되며, 그 목적은 플레이어가 적을 더 편하게 볼 수 있게 하기 위함입니다.

적이 화면 내에 있는지 표시하여 scoring의 판단 근거 중 하나로 삼습니다

위치 할당에 있어서, 개발팀은 원래 weight based position system을 통해 적의 최적 위치(optimal positions)를 찾았습니다. 주변의 노드들은 Kratos의 위치에 따라 주기적으로(periodically) 업데이트되며, 각 노드는 유효한 navmesh 내에 있는지 여부에 따라 자동으로 켜지거나 꺼집니다. 하지만 나중에 개발팀은 시스템 전체가 점점 더 복잡해지며, debug가 불가능하다는 것을 발견했습니다. 게다가 적이 화면 밖으로 나가면, 플레이어는 쉽게 위축되며, 구체적인 mental map을 구축할 수 없게 되어, 자신감과 공격적인 행동을 잃게 됩니다.

Kratos를 중심으로 펼쳐진 weight based position 노드, 그리고 간헐적으로 weight value를 업데이트

개발팀은 debug가 극도로 어렵다는 것을 발견하였고, 플레이어 경험이 경험 목표와 어긋나기 시작하여, 신중하고 위축된 게임 경험을 형성하게 되었습니다.

1년 동안 반복한 후, 개발팀은 방향을 바꾸었습니다. 경로 탐색 방안을 “Prevent bad positions(나쁜 위치 방지)”로 교체하였습니다. 대체로 다음과 같은 일들을 하였습니다:

  • 이전에 Kratos를 중심으로 위치를 찾던 것과 달리, 이번에는 적이 플레이어 시점 내의 위치로 가도록 하였습니다. 그림에서 보이는 바와 같이, aggressive로 표시된 적은 플레이어 앞의 부채꼴 모양 영역에 서게 되며, 그 각도는 카메라의 시야 폭 및 거리에 따라 계산됩니다. 반면 non-aggressive 적은 이전 《갓 오브 워》와 큰 차이가 없이, 가장 바깥쪽에서 플레이어와 거리를 유지합니다.

  • aggressive로 표시된 적은 부채꼴 위치에서 position constraint를 선택하고, 일정 반경 거리를 separation constraint로 삼아, 그들의 활동 범위를 형성합니다. 반면 non-aggressive 적의 separation constraint는 플레이어를 중심으로 일정 호(弧)도의 부채꼴로 계산됩니다. 이를 통해 넓은 공간을 차지하지 않는 전제하에, 플레이어 주변에 잘 분산되도록 합니다.

장점은, 시스템이 이로 인해 적지 않게 간소화되었고, 시각적으로도 더 직관적이며, debug도 편해졌다는 것입니다.

하지만 적지 않은 문제도 가져왔습니다. 우선 position constraint가 반드시 플레이어 전방의 부채꼴 영역에 구축되어야 하므로, aggressive로 표시된 유닛 중 상당수가 플레이어 등 뒤에서부터 억지로 플레이어 눈앞까지 끼어드는 어색한 광경이 나타납니다. 게다가 화면 이외의 유닛은 여전히 위치를 식별하기 어려워, 유효한 mental map을 구축할 수 없었습니다.

이에 대한 개발팀의 해결 방식은:

  1. 가능한 그들의 화면 표시가 바뀌지 않도록 보장(on or off screen)
  2. 가능한 그들이 같은 영역에 머무르도록

예를 들어, 화면 밖의 적은 플레이어 눈앞의 부채꼴 영역으로 돌격해서는 안 되며, 계속 화면 밖 상태를 유지하며 플레이어와 같은 거리를 유지해야 합니다, Kratos가 그를 향할 때까지.

이 외에도, 개발팀은 Kratos의 시점을 중심으로 사분면(Quadrants) 시스템을 설정하였으며, offscreen의 적은 Kratos가 그들을 향하기 전까지 원래의 사분면 내에 최대한 머무르도록 합니다.

 

aggressive로 표시된 적은 부채꼴 영역 내에 최대한 머무르려 합니다

플레이어가 aggressive 적을 빠르게 지나갈 때, 그들은 off-screen으로 표시되고, 곧 non-aggressive로 표시됩니다. 따라서 on-screen 중 거리가 더 가까운 보라색 적이 aggressive로 표시되게 됩니다.

카메라를 등 뒤의 적에게 돌리면, 적은 여전히 offscreen 상태이며, 각자의 사분면(Quadrant)에 머무릅니다. 각각 Kratos 오른쪽에 서 있는 녹색 적, 그리고 왼쪽에 서 있는 노란색 적입니다.

Kratos가 녹색 적을 향해 돌아설 때, 비로소 그는 on-screen으로 표시되고 위협값이 계산됩니다. 위협값은 주기적으로(periodically) 계산되기에, aggressiveness 표시도 빈번하게 전환됩니다.

이 방법은 어색한 이동을 효과적으로 해결했을 뿐만 아니라, 플레이어에게 mental map을 명확히 하여 자신감을 구축하고, 개발팀이 기대하는 공격적인 선택을 내리도록 하였습니다.

aggressive gameplay를 구축하기 위해, 개발팀은 어떻게 플레이어에게 off-screen 유닛의 행동을 인지시킬 것인지 고민하기 시작했습니다. 개발팀은 정보 과부하(information overload) 등의 문제를 쉽게 초래하는 레이더 같은 non-diegetic UI를 통해 플레이어가 전방에 대한 주의력을 분산시키고 싶지 않았습니다. 따라서 최종 방안은 spatial UI 화살표 디자인을 통해 Kratos 주변을 감싸며 대응하는 적을 가리키고, 점멸 색상으로 적의 공격 상태를 알리는 것이었습니다. 근접 공격은 빨간색으로, 원거리 공격은 보라색으로 표시됩니다.

개발팀은 처음에 화면 가장자리의 밝은 빨간색으로 적 방위의 공격 표시를 사용했으나, 결국 플레이어가 공격 받는 효과로 오해하기 쉽다는 것을 깨달았습니다. 따라서 화살표가 적을 가리키는 디자인으로 전환하였습니다.

우 스틱을 잘 사용하지 않는 플레이어도 쉽게 조작할 수 있도록, 개발팀은 전용 Strafe Assist를 개발했습니다. 카메라는 주의해야 할 관련 적들의 중간 위치를 획득하여 카메라가 조준해야 할 중심점으로 삼고, 자동으로 횡 방향 회전을 통해 aggressive한 적을 조준합니다. 이는 횡 이동 회피 때 특히 두드러지며, 카메라도 자동으로 공격 방향으로 보정됩니다. 비록 자동 보정이 모든 씬을 완벽하게 만족시킬 수는 없지만, 플레이테스트 결과를 보면 이미 대부분의 플레이어의 수요를 기본적으로 만족시킬 수 있었습니다. 조작에 탐구심이 있는 일부 플레이어는 Strafe Assist를 끄고 수동으로 우 스틱을 통해 시점을 회전시킬 수 있습니다.

Strafing은 게임 내에서 플레이어가 횡 이동할 때, 카메라가 횡 방향 회전을 통해 자동으로 목표를 조준·보정하는 카메라 동작을 가리킵니다.

보라색 막대는 플레이어가 횡 이동 시 카메라 보정 중심이 적 위치에 대한 편향량(偏移)으로 추정되며, 녹색 줄무늬는 적의 카메라에 대한 관련성 가중치로 추측됩니다.

2. 적 잠금 (Targeting Enemies)

다음은 Targeting Enemies입니다, 그 핵심은 플레이어가 자신이 공격하고 싶은 목표를 정확하게 공격할 수 있게 하는 것입니다.

1대다의 국면에서, 플레이어가 공격하고 싶은 대상을 정확하게 선택하는 것은 극히 어려운 일입니다. 개발팀에게 있어, 어떻게 플레이어가 고공격성의 1대다 경험을 쉽게 실행할 수 있게 할 것인지가 가장 중요하며, 따라서 합리적인 공격 선택이 매우 중요합니다.

공격 버튼을 눌렀을 때, 어느 캐릭터를 우선적으로 공격해야 하는가는 매우 복잡한 문제입니다

이전 버전의 《갓 오브 워》 목표 선택 메커니즘이 채택되지 않은 이유는, 개발팀이 플레이어가 아래쪽 공격을 입력할 때 Kratos가 카메라를 향해 공격하는 문제를 피하고 싶었기 때문입니다. 그래서 그들은 먼저 슈팅 게임과 유사한 방식을 시도하여, Kratos가 화면 중앙을 향해 공격하도록 하였으나, 결과적으로 플레이어가 눈앞에 aggressive로 표시된 적을 정확하게 또 쉽게 공격할 수 없게 되어, 강렬한 좌절감을 초래하였습니다.

개발팀은 처음에 슈팅 게임과 유사한 경험을 통해 조준 메커니즘을 설계하고자 했으나, 경험이 좋지 않았습니다

최종적으로 개발팀은 2가지 방안을 융합하였으며, 대체적인 방법은 다음과 같습니다:

  • 좌 스틱이 유휴 상태일 때, 플레이어는 눈앞의 적을 우선적으로 선택하며, 화면 밖의 적은 공격 대상으로 선택되지 않습니다. 우 스틱은 목표 선택에 영향을 주지 않습니다(선택된 목표가 화면 밖으로 이동한 경우 제외)

우 스틱만 이동하면, 화면 중앙의 캐릭터는 자동으로 우선 공격 목표로 판정되지 않으며, aggressive로 표시된 적이 화면을 벗어날 때만 시점 방향에 따라 목표 유닛이 전환됩니다

  • 좌 스틱은 플레이어의 공격 의도를 상징하며, 그 방향에 따라 플레이어가 의도한 공격 대상 적을 추측하여 선택합니다

좌 스틱은 플레이어가 의도한 공격 목표를 반영합니다

다음은 플레이어의 근접 공격 의도 가중치를 추측하는 관련 속성입니다:

이 외에도, 이러한 숄더 캠(over-the-shoulder) 시점은 플레이어가 적과의 거리를 잘 가늠하지 못하게 하여, 쉽게 헛칩니다. 이에 대해, 개발팀은 이전 《갓 오브 워》의 “Suck To Target” 공격 방식을 채택하기로 결정하였습니다. 대체로 말하자면, 각 공격 동작의 공격 범위, 공격 속도 및 정지 거리를 설정하고, 목표 적이 조건에 부합할 때 직접 “흡착”하여 공격하는 것입니다.

플레이어는 카메라와의 거리를 잘 가늠하지 못합니다

STT(Suck To Target) 소개

하지만 STT는 2가지 두드러진 문제도 가져옵니다:

  • 플레이어가 횡 이동 중 공격할 때, 카메라가 횡 방향 공격 애니메이션을 촬영할 확률이 있어, 플레이어가 의도적인 흡착의 부조화감을 느끼게 됩니다.

또 다른 더 심각한 문제는, 흡착하는 동시에 적이 흡착 거리를 벗어나 플레이어가 헛치게 되면, 플레이어에게 극도로 나쁜 게임 경험을 초래합니다.

이에 대해, 개발팀은 시선 각도를 통해 흡착 거리를 조정하는 방식을 취하였습니다. 적과 시점이 이루는 각도가 클 때, 즉 플레이어가 거리를 비교적 쉽게 파악할 수 있을 때, 흡착 거리를 단축하여 의도적인 흡착의 부조화감을 해결합니다. 반대로 흡착 거리를 늘려, 플레이어의 깊이 감지 문제를 해결합니다.

하향 시점으로 흡착 거리를 관찰하면, 시점과 적의 각도가 클수록 흡착 거리가 짧아지고, 각도가 작을수록 흡착 거리가 길어집니다.

원거리 공격의 보조 조준에 대해, 개발팀은 두 가지 메커니즘을 설계하였습니다:

  • Aim Friction 조준선이 판정 영역으로 미끄러져 들어가면, 십자 키의 마찰 계수를 증가시켜 십자 키의 감도를 낮춥니다

  • Zoom Snapping 조준선이 구형 영역 내에서 Zooming 버튼을 누르면, 해당 유닛에게 화면 초점을 맞춥니다

앞서 《갓 오브 워》의 전투 경험은 1대다 위에 구축되어 있다고 말씀드렸지만, 잠금 메커니즘은 1v1의 공수에 더 많이 기반하고 있어, 이는 예상된 목표 경험과 어긋납니다. 하지만 여전히 과거의 3인칭 게임 경험으로 인해 잠금 메커니즘에 대한 의존성이 길들여진 테스트 플레이어가 적지 않았기에, 개발팀은 결국 잠금 버튼을 추가하게 되었습니다.

개발팀은 결국 타협하여 잠금 버튼을 추가하였습니다

잠금 버튼은 근접전의 목표 선택을 기반으로 하므로, 잠금 버튼은 근접전 목표 선택에서 우선순위가 가장 높은 적을 우선적으로 선택합니다. 다른 동종 시점 게임과 다른 점은, 플레이어가 조준 모드로 진입할 때 시스템이 여전히 이전에 잠근 대상을 기억한다는 것입니다. 그리고 플레이어가 조준 버튼을 놓으면, Kratos는 이전에 잠근 적에게 다시 향합니다. 그 목적은 플레이어가 2명의 적을 동시에 처리하여 가능한 한 1대다의 수요를 실현하는 데 있습니다.

플레이어가 조준 버튼을 놓은 후, 시점이 이전에 잠긴 적에게 다시 향하는 것을 볼 수 있습니다

3. 적 공격 (Engaging Enemies)

다음은 《갓 오브 워》의 적 공격 부분에 대해 이야기하겠습니다. 개발팀은 플레이어가 자신의 목표를 지속적이고 효과적으로 공격할 수 있기를 바라며, 이를 통해 플레이어가 고공격성의 행동 선택을 지속적으로 유지할 수 있게 하고자 합니다.

이전의 《갓 오브 워》는 적을 공격해서 밀쳐내고, Kratos가 뒤따라가는 이동 애니메이션(animation translation)으로 타격 피드백을 창출하고, 힘의 감각 및 파괴력의 감정적 충격을 구축하여, 플레이어가 고도로 자신감 있는 공격적 선택을 유지하도록 하였습니다. 하지만 신작 《갓 오브 워》의 시점에서는, 이러한 전방 이동 이동 애니메이션이 의심할 여지 없이 카메라의 추진을 초래하여, 플레이어의 가시 범위에 영향을 미치고, 나아가 화면 유닛을 상실하여 플레이어의 불안감을 초래하게 됩니다.

이 시점 변화의 한계로 인해, 플레이어의 방어형 행동 선택이 더욱 당연한 것이 되었지만, 《갓 오브 워》에게 있어 이는 분명히 적합하지 않습니다.

이에 대해, 개발팀은 다음 세 가지를 통해 시점 추진으로 인한 적 상실 문제를 해결하였습니다:

  1. 적이 공격 피격 반응 후 뒤로 물러나는 이동 거리를 감소시킨다.
  2. Kratos가 공격 시 전방으로 추진하는 거리를 감소시킨다(STT가 이미 일정 수준의 공격성 경험을 제공하므로, 플레이어의 공격 피드백에는 큰 영향을 주지 않습니다)
  3. 스크립트를 통해 절차적 스케일링 조정 이동 거리를 지속적으로 반복한다.

시점 추진 문제는 해결했지만, Kratos가 강공격으로 적을 날려버릴 때, 적이 화면 밖으로 날아가 off-screen으로 판정되므로, Kratos는 다른 on-screen 적을 공격하게 전환됩니다. 결국 원활하게 추격할 수 없어 게임 경험에 영향을 미치게 됩니다.

적이 화면 밖으로 날아간 후 Kratos는 직접 화면 내의 다른 적을 공격하러 전환하며, 결국 적을 추격할 수 없어 게임 경험에 영향을 미칩니다

개발팀의 해결 방안은 Strike Assists 메커니즘을 추가한 것이며, 대체로 다음과 같습니다:

  • 공격 중인 적은 항상 카메라 방향에 최대한 머무르게 하며, 구체적 방법은 적이 공격받을 때 적의 편향값(偏移值)을 기록하고, 시점 방향에 따라 보간(插值)을 수행하는 것입니다.

  • 적을 날려버릴 때, 적을 카메라 방향으로 날려버리며, 이를 통해 적이 시점 내에 있음을 더욱 보장할 수 있습니다

또한 Hit Reaction Collisions를 추가하였습니다, 적이 공격받을 때 충돌체가 생성되며, 해당 충돌체는 인근의 적에게 동시에 공격을 가합니다. 이를 통해 플레이어의 안전한 출력을 보장하는 동시에, 공격 위력의 시각적 피드백을 한층 더 강화할 수 있습니다.

적이 날아간 후 Kratos가 빠르게 목표 적을 전환하여 추격 기회를 잃는 것을 방지하기 위해, 개발자는 Disrupting Enemy Aggression을 추가하였으며, 대체적 방법은 다음과 같습니다:

  • 적이 피격 상태일 때, aggressive tokens를 회수하지 않습니다, 이렇게 하면 플레이어는 적이 날아간 것으로 인해 다른 적으로 전환하지 않습니다
  • 적이 공중에 떠서 날아갈 때, aggressive token 회수 시간이 지연됩니다.

적의 공격이 중단(被打断)되었을 때, 다른 적의 공격이 지연됩니다.

마지막으로 적을 공중에 띄울 때, 공중에 떠 있는 적이 쉽게 화면 밖으로 날아가지 않도록, 개발팀은 적의 격비(击飞) 높이를 엄격하게 제어하였습니다. 구체적 방법은: 적이 위로 격비되는 속도가 설정된 float height를 초과할 때, 추가 속도를 부여하여 적이 화면 내로 반사되게 하여, 적의 격비 높이를 제어하는 것입니다.

원본 영상 주소:

GDC Vault - Evolving Combat in 'God of War' for a New Perspective

 

Evolving Combat in 'God of War' for a New Perspective

The hallmark 'God of War' combat has been genre defining for more than a decade. With the latest entry into the franchise, the change in direction along with a much more intimate and player-controlled camera would fundamentally change the combat...

www.gdcvault.com


원문

(75 封私信 / 73 条消息) 《战神》基于新视角战斗系统的革新 - 知乎