[연구 1회차] 선입력과 조작감 (feat. Unreal GAS를 활용한 검증)

2025. 7. 1. 18:16·게임 디자인/공방

들어가며

 

기획에 전문성이라는 게 있을까?

 

 

    내 안을 메우는 오래된 질문이다. 나는 게임 디자이너(기획자)를 지망하면서도 누구나 할 수 있을 것 같은 이 업무에 그저 불안함을 느꼈다. 무엇이 나만의 강점이 될 수 있을지 고민하며 여러 프로젝트에 참여하고, 게임을 플레이해 보며, 분석하고 기록하고, 때때로 개발까지 하면서 그렇게 성장해 왔다. 모든 순간의 노력이 디자이너로서의 취업을 위한 건 아니었지만 결국 나는 전문성을 찾기 위해 여러 능력을 키워왔다고 자신 있게 말할 수 있다.

 

    그러나 그렇게 노력했던 결과를 지금에 와 생각해보면, 이것들이 나를 매력 있게 꾸며낼지라도 나의 전문성을 만들지는 못한다는 생각을 한다. 나보다 성공적으로 프로젝트를 진행한 사람이 많기 때문이다. 나보다 게임을 오래 플레이한 사람도 많고, 나보다 뛰어난 분석력을 가진 사람도, 나보다 세심하게 기록할 수 있는 사람도, 그리고 나보다 효과적으로 개발할 수 있는 사람도 많다. 

 

    그렇다면, 나는 전문성이 없는 것인가? 나의 노력은 무의미했는가? 그런 건 아니었다. 나는 나의 전문성을 만드는 것이 결국 돌고 돌아 능력이 아닌 태도라는 생각을 했다. 그렇다면 고된 과정을 거쳐 찾은 나의 전문성을 이루는 태도는 무엇일까?

 

 

연결과 성찰, 그리고 집념

 

 

    무언가 배우고 만들기를 좋아하는 기질에서 시작된 다양한 분야에 대한 관심을 바탕으로 개별적으로는 특별하지 않더라도 이들을 조합해 나만의 고유함을 만들어내는 연결의 자세.

더보기
 

언리얼 엔진으로 Cel Shading을 구현해보자.

들어가며    오랜만에 글을 적는다. 오늘은 셀 셰이딩(툰 셰이딩)에 대한 글로, 포스트 프로세싱을 통해 카툰 스타일을 구현하는 방법에 대해서 이야기해보고자 한다.     사실 기획에 대해 이

memoria-aeon.tistory.com

 

게임 효과의 밸런싱 기준을 찾아보자. (feat. Python을 활용한 삽질 기록)

들어가며    최근의 나는 라는 프로젝트에서 활동하고 있다.      는 2024 넥슨 대학생 게임잼에서 시작된 게임인데, 당시 주제 적합성, 발표 등 개인적인 부족함에 팀원들에게 미안한 마음을

memoria-aeon.tistory.com

 

 

이전에 그렸던 것들 정리

그림을 그리게 된 계기 나는 대학교 2학년 1학기 이후, 그러니까 2019년 7월에 그림을 그리기 시작했다. 당시의 나는 지금과 같이 욕심이 많았지만 그걸 통제하지는 못했다. 이것 저것 해보고 싶은

memoria-aeon.tistory.com

 

 

좋은 액션을 위한 애니메이팅 (feat. Coloso 환급 챌린지)

들어가며    24년 말, Coloso 측에서 1년 만에 환급 챌린지를 진행한다는 걸 알게 됐다. 그동안 레벨 디자인에서부터 시네마틱, 언리얼 개발까지 Coloso 환급 챌린지를 통해 새로운 분야를 체험할 수

memoria-aeon.tistory.com

 

 

블루 피리어드 (2021)

⚠ 주의!스포일러가 있습니다!애니메이션 리뷰를 빙자한 회고록이 되어버렸습니다..그래도.. 재미있게 봐주실 거죠..? 애니메이션 정보  제목블루 피리어드 (Blue Period, 2021)장르미술상영 화수

memoria-aeon.tistory.com

 

 

[영상 편집] 『Devil May Cry 5』 - 닥터 파우스트를 이용한 레드 오브 파밍 가이드

들어가며     나는 최근 '한빛미디어'의 서평단에 참여하고 있다. 이번 달(25년 3월)에 할당된 책은 '프리미어 프로&애프터 이펙트 CC 2025'였는데, 기술에 대한 내용이라 딱히 느낀 점이 없어서 어

memoria-aeon.tistory.com

 

 

    다양한 활동들을 수행하는데 그치지 않고 활동 뒤에 기록하고 회고하며, 부족한 점을 반성하고 좋았던 점을 강화하는, 그렇게 성장을 도모하는 성찰의 자세.

더보기
 

한 달 늦은 2024년 연말 회고 : 단조 (鍛造)

들어가며 27세, 새해가 밝고 이제는 20대 중후반이라 불릴만한 나이가 됐다. 언제까지나 어릴 것만 같았던 나였고, 지금도 이따금씩 마주하는 어려움에 괴로워하는 나지만, 그럼에도 이제는 두려

memoria-aeon.tistory.com

 

 

2023년 연말 회고 : 정제 (精製)

들어가며     깨어나는 2023년이 끝나고, 증명하는 2024년이 시작됐다. '한 달 늦은 2022년 연말 회고'라는 제목으로 22년의 회고 글을 올린 게 불과 며칠 전 같은데, 벌써 2023년의 회고 글을 올린다

memoria-aeon.tistory.com

 

 

한 달 늦은 2022년 연말 회고

들어가며 글을 쓰는 지금은 2023년 1월 31일, 길게도 느껴진 2022년 지나간 지 벌써 한 달이 됐다. 23년의 시작에 글을 올리고 싶었지만 늘 그렇듯 이런저런 일이 있었고, 늘 그렇듯 블로그는 뒷전이

memoria-aeon.tistory.com

 

미지의 행성에서 농장을 운영하자! <뚜두 농장> 프로젝트 참여 기록 (21년 10월 ~22년 09월)

※ 이 글은 지극히 주관적인 관점 아래 작성되었습니다! 또한 이 글은 제 자신의 성장을 기록하기 위한 글이지 프로젝트를 평가하는 글이 아니기에 이 점 감안해주시면 감사드리겠습니다 :) 이

memoria-aeon.tistory.com

 

 

프로젝트 종료를 맞이하며, <Lost In Hope> 회고록 (1)

시리즈 글 목록 - 현재 글 : 프로젝트 종료를 맞이하며, 회고록 (1) - [프로젝트/Lost In Hope] - 프로젝트 종료를 맞이하며, 회고록 (2) - [프로젝트/Lost In Hope] - 프로젝트 종료를 맞이하며, 회고록 (3) - [

memoria-aeon.tistory.com

 

 

[2023 넥슨 대학생 게임잼 후기] 시럽시럽 메이플 시럽!

들어가며 최근에 넥슨에서 주최하는 게임잼인 '재밌넥'에 참가했다. '재밌넥'은 게임 개발에 관심이 있는 대학(원)생들을 대상으로 진행하며, 2박 3일 동안 함께 게임을 만드는 행사다. 행사는 7

memoria-aeon.tistory.com

 

[2024 넥슨 대학생 게임잼 후기] Lib's Rarry

들어가며     지난 7월 12일, 넥슨에서 주최하는 게임잼인 '재밌넥'에 참여했다. 나는 작년에 이어 2번째로 참가하는 재밌넥이었는데, 이번에도 작년과 마찬가지로 2박 3일 동안 대학(원)생들을

memoria-aeon.tistory.com

 

 

2024 한국 공학 대전 후기 (feat. Breath in Winter) (상)

들어가며    이번에 한국 공학 대학교에서 주최하는 2024 한국 공학 대전에 참가했다.        한국 공학 대전은 지난 8월 말 학교 측으로부터 제안받아 알게 됐는데, 반쯤은 필참인 행사여서 9

memoria-aeon.tistory.com

 

 

수확제(收穫祭) : 입(立)

들어가며     오랜만에 여유가 생겨 근 두 달 만에 글을 연다. 블로그에서 글을 쓰기 시작한 이래로 이렇게 길게 비워놓은 적이 손에 꼽는 것 같은데.. 오랜만에 쓰려니 어색하기도 하고 즐겁기

memoria-aeon.tistory.com

 

 

    마지막으로, 이 모든 것을 가능케 하고 끝까지 나아가도록 만드는, 힘든 일이 있어도 묵묵히 할 일을 해내다 보면 어느 순간 나를 견고하게 만드는 경험이 된다는 것을 이해하고 나아가는 그러한 집념의 자세.

더보기
 

Memoria Aeon

집념 어린 성장, 그러한 증명.

memoria-aeon.tistory.com

 

 

    결국, 연결하고 성찰하며 집념 어린 나아감을 만드는 이런 자세가 나의 전문성을 만든다는 생각을 한다. 

 

 

    내가 갑자기 이렇게 감성적인 이야기를 하는 이유는 조금씩 나아가다보니 어느새 내가 목표로 했던 지점 중 하나가 눈에 보이기 때문일 것이다.

 

    즐거운 학습을 통해 의도된 재미에 도달시키는 디자이너, 몰입을 통한 가치의 확장으로 전율을 이끌어내는 디자이너, 해석과 조립으로 장르를 만드는 디자이너 등 다양한 목표 지점이 존재하지만, 일단 지금 당장은 눈에 들어오는 것은 증명하는 디자이너, 이 증명하는 디자이너를 향해 나아가보고 싶다.

 

    이게 이번 연구 시리즈의 목적이자 다소 장황하게 글을 연 이유이다. 오늘은 기존에 만들어둔 디자인 연구 환경을 활용해 선입력 시스템에 대해 분석하고 알아보려고 한다. 같이 한 번 들어가 보자.

 

 

 

연구 방법

 

  • 선입력의 정의와 조작감에 대한 내 생각을 기록하며 가설을 세운다.
  • 게임 디자인 연구 환경에 가설을 검증해 볼 기능을 구현한다.
  • 선입력의 유무에 따른 나의 경험과 인상을 기록한다.
  • 다양한 선입력 방식에 따른 나의 경험과 인상을 기록한다.
  • 가설을 적용한 선입력 방식에 따른 나의 경험과 인상을 기록하고 평가한다.

 

    거창하게 연구라고 적어뒀지만 아직 시작 단계이기에 모든 테스트는 개인(필자)의 관점에서 진행할 예정이다. 추후에 기회가 된다면 패키징을 통해 커뮤니티에 공유하여 다양한 사람의 의견과 데이터를 수집하고 분석해보고 싶다.

    필자는 제대로 된 연구를 해 본 경험이 없기에 보시기에 부족한 면이 많을 수 있습니다. 혹여나 그런 점을 발견한다면 댓글로 조언 부탁드리겠습니다. (언제 공개할 지는 모르겠지만..😋)

 

 

 

선입력과 조작감


 

선입력과 조작감에 대한 가설 세우기

 

    우선 선입력에 대해 이야기를 해보자. 선입력(Input Buffer)이란 무엇인가?

 

  대전 격투 게임에서 주로 사용되는 개념으로, 가드/다운/공격 등의 동작 중에 다음에 행할 동작의 커맨드를 미리 입력하여 현재 취하고 있는 동작이 끝나자마자 다음 동작을 한치의 틈도 없이 바로 나가게 하는 것을 의미한다. 일본에서 선행 입력(先行入力) 또는 리저브(reserve/예약하다)라고 불렀던 것이 선입력으로 번역되었다. 영어권에서는 버퍼(buffer/buffering)라고 한다.

- 선입력, 나무위키 -
  Buffering is a mechanic in place that allows the player to mask the input of one attack while preceding attack's animation is playing out. This is most prevalent in regular gameplay where you press an attack key before the previous attack is done to continue a combination attack.

  선입력은 플레이어의 공격(행동) 애니메이션을 재생하는 동안 다른 공격(행동) 입력을 통해 행동을 제어할 수 있는 메커닉이다. 이는 일반적으로 이전 공격(행동)이 마무리되기 전에 공격(행동) 키를 눌러 연속 콤보 공격을 이어나가는 형태로 많이 사용된다.

- Input Buffering, Devil May Cry Wiki - 

 

 

    공식적으로 선입력에 대해 정의하는 문서가 없어 불가피하게 여러 위키의 설명을 인용해 봤다. 하지만, 이해하는데 문제는 없는데 선입력을 정리하면 다음과 같이 요약할 수 있다.

 

 

선입력은 특정 행동을 하는 중에 다음 행동에 대한 조작을 해두는 것이다.

 

 

    그렇다면 이러한 선입력이 필요한 이유는 무엇일까? 이는 선입력이 없을 때 벌어지는 상황을 상상하면 이해하기 쉽다.

 

    지금 여기에서 당신이 콤보 공격을 수행하려고 한다고 가정해 보자. 콤보 공격을 이어가기 위해서는 이전 공격이 끝나는 타이밍을 정확히 인지하고 이에 맞춰 조작을 해야 한다. 하지만, 이런 정확한 타이밍의 조작은 많은 사람들에게 피로감을 불러일으키고, 혹시 모를 실수를 방지하기 위해 다음 키를 연타하게 만들어 피로감을 한 층 더 배가시킨다.

 

    그렇다. 선입력은 여유로운 판정으로 조작 편의성을 높이기 위해서 존재한다. 나는 액션 장르에서 선입력 시스템이 특히 중요하다고 생각하는데, 액션은 주로 적과의 관계성을 통해 게임이 진행되기 때문이다.

 

 

    소울류의 전투가 거리 조절을 중심으로 적의 패턴을 풀이하는 전투라고 한다면 플레이어는 적의 모션에 집중해야 하기에 캐릭터의 모션을 일일이 확인하고 타이밍에 맞춰 조작하기 어렵다. 따라서, 적의 모션에 집중할 수 있도록 나의 행동에 보정이 필요하고 이러한 보정에 효과적으로 기여하는 것이 바로 선입력 시스템이다.

 

    데메크 느낌의 스타일리쉬 콤보 액션 전투라고 해도 마찬가지인데, 이러한 전투에서는 적에 대한 주의력이 상대적으로 낮아도 괜찮지만 이에 따라 나의 콤보 조작이 복잡해지는 경향이 있기에 조작 편의성을 높여주는 선입력 시스템이 필요하다. (물론 하드보일드하게 딱딱 맞춰서 요구할 수는 있으나 이를 보조하는 시스템이 없다면 숙련되기 어려워 유입이 이탈해 버리곤 하기에 나의 기준에서는 좋지 않은 선택으로 보인다.)

 

 

(좌) Dark Souls 3 : 적의 모션을 잘 살피며 공격을 이어가야 한다, (우) Devil May Cry 5 : 에어리얼 타임 중에는 나의 콤보를 이어가는 것에 집중해야 한다.

 

 

    물론 선입력 시스템의 활용 방식과 필요 유무는 그 게임의 테마와 전투 시스템에 따라 달라진다. 그러나, 시스템의 사용 목적 자체가 달라지는 건 아니기에 선입력 시스템의 사용 목적을 다음과 같이 정의할 수 있겠다.

 

 

선입력 시스템이라는 건 한 가지에만 주의 집중을 할 수 있는 사람의 한계를 보정하고자 조작 편의성을 높이기 위해 사용된다.

 

 

 

    다만, 이러한 선입력이 문제가 될 때도 있는데 바로 플레이어의 의도가 제대로 반영되지 않을 때다. 조작감, 즉 플레이어의 의도대로 움직이는 감각을 위해 선입력 시스템이 존재하나, 아이러니하게도 선입력 시스템으로 인해 조작감이 망가지는 상황이 발생하곤 한다.

 

    이유가 뭘까? 이는 상황이 달라졌음에도 이전 입력이 남아있기 때문이다. 플레이어가 취할 수 있는 행동의 유형이 크게 공격, 방어, 회피로 구분된다고 할 때 한 유형 내에서는 어느 정도 오차가 있어도 납득이 된다.

 

    그러나, 상황이 달라져 다른 유형의 행동을 취하도록 판단을 내렸는데 해당 입력이 앞선 입력으로 인해 무시되면 플레이어의 의도는 반영되지 못하고, 플레이어는 불합리하다는 느낌을 받게 된다. (공격해야 될 상황에 의도하지 않은 공격이 나가는 건 어느 정도 수용이 가능하나, 방어해야 될 상황에 공격이 나가는 경우 등)

 

 

Sekiro(이하 세키로) : 선입력된 공격으로 인해 가드가 발동되지 않았다.

 

 

    물론 혹자는 그게 실력이 아니냐고 물을 수 있다. 맞다, 실력이다. 하지만 나는 선입력으로 플레이어를 시험해서는 안 된다고 생각한다. 조작성은 플레이어의 감각을 게임 속 세계로 불러오는 데 중요한 역할을 한다. 선입력으로 플레이어를 시험하는 건 실패 시 몰입을 깨뜨리고 불쾌감을 주기에 기발한 발상일 수는 있어도 좋은 발상은 아니라는 생각을 한다. (플레이어를 짜증 나게 하는 게 기획 의도가 아닌 이상)

 

    이는 몰입을 통해 경험의 확장을 이끌어내는 게임의 목적에 위배된다. 정 시험할 거라면 조작성과 함께 적 패턴의 복합성을 높여서 선입력으로 플레이어를 시험할 때에 비해 더 어렵고 화려해 보이는 것을 비슷한 난이도로 플레이할 수 있도록 하는 것이 옳아 보였다. (물론 비용은 더 들겠지만.. 잘해 보인다는 액션의 본질에 대한 충족감은 물론이요, 보는 재미의 관점에서도 이점을 줄 수 있다.)

 

 

    따라서, 나는 이러한 관점에서 시험 목적을 배제하고 선입력을 통해 좋은 조작성을 만들 방법에 대해 고민해 봤다.

 

    앞서 선입력에 대해 '이전 애니메이션 재생 중 일정 프레임 동안 미리 입력받는 것'이라고 정의했는데, 나는 이 부분에서 일정 프레임 동안 입력 받는 것이 아닌 항시 입력 받는 것이 필요하다는 생각을 한다.

 

    좋은 조작성의 핵심은 일관성에 있다. 플레이어가 특정 시점에 어떤 행동을 취하면 예상된 움직임을 보인다는 약속을 만들고 전달해야 한다. 이런 관점에서 애니메이션마다 선입력 여부나 선입력을 받는 프레임의 길이가 달라지면 플레이어는 일관성을 체감하지 못하게 된다.

 

    결국, 플레이어는 이를 경험적으로 시행착오를 겪으며 이해할 수밖에 없다. 다만, 내가 추구하는 건 누구나 쉽게 시스템에 적응하여 설계된 재미에 도달하는 전투이기에, 적어도 조작에서만큼은 일관성을 만들어내야 된다고 생각한다.

 

    그리고, 이를 위해 특정 액션에서 제각기 다른 시간 동안만 선입력을 받기보다는, 항시 선입력을 받고 각각의 애니메이션에서 그 선입력을 수행하는 프레임을 갖도록 하는 것이 옳다고 생각한다.

 

 

선입력 전후에 대한 이미지 : 이후에 보여질 영상과 자료의 프레임 색상은 위와 같이 구분한다.

 

 

    그리고, 여기에 더해 선입력을 지우는 동작이 필요하다고 생각하고, 그 기점은 다른 유형의 조작을 하는 것이라는 생각을 한다.

 

    앞서 나는 플레이어의 행동이 크게 공격, 방어, 회피로 나뉘며(게임에 따라 다를 수 있다.), 같은 유형의 행동끼리는 같은 상황에 통용된다고, 달라진 상황에 이전 판단의 잔재(선입력)가 남아있다면 불합리함으로 다가온다고 이야기했다.

 

    따라서, 이러한 문제를 방지하기 위해 현재 발동 중인 액션과 다른 유형의 입력이 들어오면 기존 선입력을 지우고 새로 추가하는 절차가 수행돼야 한다고 생각한다.

    다만, 기존의 선입력을 지운다고 해도 수행 중인 동작마저 중단돼서는 안 된다. 기존 동작을 중단하는 경우, 공격 판정 이후 즉시 캔슬될 수 있기에 오용될 여지가 생긴다. 이 또한 단기적으로 재미있는 플레이 방식이 될 수는 있으나 결과적으로 조작의 복잡성을 높이기에 선입력이 무의미해지는 결과를 낳는다. (즉시 발동된다고 좋은 평가를 받는 세키로의 패링 또한 startup 프레임이 0 프레임일 뿐이지 동작 중인 액션을 취소시키지는 않는다; startup 프레임 이후, active 프레임 이전에는 취소가 가능하다.)

 

    예를 들어, 공격-공격-공격을 입력해 공격 액션이 수행 중인 상태에서 선입력 버퍼에 [공격, 공격]이 있을 때, 적이 공격 전조를 보여 방어를 입력한다고 가정하자. 만약 다른 유형의 액션 입력으로 선입력 버퍼가 비워진다면 [방어]가 되는 식으로 변화하는 상황에 대처할 수 있다. 이때 기획적인 사고력이 뛰어난 분은 다음과 같은 생각을 할 수 있을 것이다.

 

그럼, 공격 액션이 수행 중인 상태에서 방어-공격을 입력하면 어떻게 되지?

 

 

    이 경우, 선입력 버퍼가 비워지기는 하지만 [방어, 공격]이 들어가, 다음 방어가 동작 중일 때 다음 적의 공격을 막기 위해 방어를 입력해도 [공격, 방어]가 되어 쓸데없이 공격을 하게 되는 문제가 발생한다. 이런 상황을 방지하기 위해 한 가지 더 해결책을 생각해 볼 수 있는데, 이는 바로 유형의 우선순위다.

 

    예를 들어 보자. 게임별 테마와 전투 시스템에 따라 우선순위가 달라지겠지만, 예시에서 피격의 스트레스를 줄이기 위해 방어가 공격보다 우선되게 설정했다고 해보자. 그렇다면, 위 상황(방어 동작 중, [공격])에서 방어를 입력한다면 선입력 버퍼에서 방어보다 뒤처지는 액션(공격)들을 비우는 방식으로 문제를 해결할 수 있다. (가장 간단한 건 선입력 버퍼 크기를 1로 두고, 우선순위에 따라 완전 대체를 하는 거지만 여기에서는 최대한 다양한 상황에 적용하기 위해 예시에서는 선입력 버퍼 크기를 제한하지 않는다고 가정한다.)

 

    자, 내용 설명과 생각 전개는 이쯤 하고 위의 내용을 정리해 보자.

 

  • 사실 1. 조작감이란 플레이어의 의도대로 움직이는 감각을 말한다.
  • 사실 2. 선입력은 의도를 미리 읽고, 게임 속 세계에 반영하는 방식으로 조작감을 높인다.
  • 사실 3. 플레이어의 의도는 상황에 따라 달라진다.

 

  • 추측 1. 플레이어는 상황이 변화할 때 다른 유형의 조작을 할 것이다.
  • 추측 2. 다른 유형의 조작 입력 시 선입력 비우기를 통해서 플레이어의 의도를 제대로 반영할 수 있을 것이다.
  • 추측 3. 유형별 우선순위를 선입력 비우기와 결합시켜 의도를 벗어난 입력에 대한 내성을 높일 수 있을 것이다.

 

    자, 그럼 이번 연구의 테마가 결정됐다.

 

 

선입력 시스템으로 좋은 조작감을 만들기 위해서는 어떻게 해야 하는가?

 

 

    이번 연구에서는 추측 내용을 검증하기 위해 Unreal GAS로 구현한 연구 환경에 선입력 시스템을 추가하고, 테스트를 통해 선입력 시스템의 영향을 확인해 볼 것이다. 이 과정에서 여러 선입력 설정에 따른 내 경험과 인상을 기록하며 선입력 시스템의 영향을 가늠해 볼 것이고, 최종적으로 추측한 내용을 검증한 뒤 결론을 내릴 것이다.

 

 

 

선입력 시스템 구현 방법

📢 NOTICE    해당 파트는 검증을 위해 어떻게 구현했는지에 대해 설명하는 파트입니다. 내용이 복잡하니 구현에 관심이 없는 분들은 넘어가셔도 무방합니다!

 

    가장 먼저 아래 영상을 확인해 보자. 이는 지난 게임 디자인 연구 환경 글에서 소개한 개발 환경이다. 

 

 

지난 번 만들어둔 게임 디자인 연구 환경

 

 

    영상의 30초 부근을 보면 콤보 공격을 수행하는 걸 확인할 수 있다. 이때 공격 키를 연타하는 모습을 확인할 수 있는데, 이는 선입력도 없고 콤보 지속 시간도 짧기에 반복적으로 입력하지 않으면 콤보가 끊기기 때문이다.

 

    이러한 환경에서 선입력 검증을 위해 필요한 기능은 다음과 같다.

 

 

  • Input Component에 선입력을 위한 버퍼를 생성한다. (입력 태그와 입력 시간을 기록되는 구조체)
  • GAS의 Try Ability Activate의 반환 값을 통해 입력 가능 여부를 판별하고, 입력 실패 시 버퍼에 기록한다.
  • Combo Window를 관리하는 Anim Notify State(이하 ANS)를 만들고, Event Tag로 판정을 Gameplay Ability(이하 GA)로 넘겨준다.
  • Input Component에 버퍼를 확인하고 입력 태그를 반환하는 메서드(CheckBufferedInput)를 구현한다.
  • CheckBufferedInput가 호출될 때마다 버퍼를 갱신하고, 갱신 과정에서 버퍼 모드(기본, 다른 유형 삭제, 하위 우선순위 삭제)에 따른 처리를 수행한다.

 

    이게 기능 구현 시작 시의 기본적인 아이디어였다. 이를 구현하면서 다음과 같은 생각을 했다.

 

 

내가 기획자로 일하면서 이런 아이디어를 개발자 입장에서 한눈에 보기 좋도록 전달할 수 있을까?

 

 

    개발자와의 소통은 내가 개발을 계속하는 이유(혼자 검증할 수 있는 실력을 만드는 게 주된 이유이지만..)이기도 해서 기능을 구현하면서 시퀀스 다이어그램을 작성해 봤다. 그냥 대책 없이 한 곳에 몰아넣기도 하고 의식의 흐름대로 작성해서 전달 목적으로는 최악이지만 일단 작성했으니 첨부하도록 하겠다. (이렇게 하다 보면 차차 나아지겠지.. 다음 연구부터는 조금씩 개선해 보겠다.)

 

 

Input Buffer 시스템의 시퀀스 다이어그램

 

 

    앞서 언급한 기능들의 구현 자체는 약 23 뽀모도로(약 10 시간)로 생각보다 빨리 구현됐다. 그런데, 문제가 하나 있었으니.. 바로 가드와 같이 홀드를 요구하는 기술들의 처리를 어떻게 할 것인가에 대한 부분이었다.

 

    사실 선입력만 테스트할 거면 굳이 할 필요는 없긴 했는데, 문제가 생길 때마다 하나둘씩 배제하다 보면 결국 남는 게 없을 것 같아 그냥 함께 구현했다. 홀드 기술을 선입력 처리하기 위한 아이디어는 다음과 같다.

 

 

  • 상용 게임에서 홀드 선입력 처리는 보통 선입력이 동작할 때 홀드하고 있지 않는다면 바로 취소된다.
  • 세키로에서 가드가 홀드 할 수 있다고 하더라도 단타 입력 시 일정 시간 동안 지속됨을 보장한다.
  • 모든 입력은 Press를 기준으로 버퍼에 기록된다. Release 처리는 홀드 요구 GA만의 특징이기에 Release 횟수와 타이밍을 기준으로 GA의 지속 여부를 제어한다.
  • Loop 되는 홀드 Animation Montage에서 이벤트를 전달하는 Anim Notify를 통해 단타 지속 보장을 처리하도록 해 유동적으로 변경 가능하도록 구성한다.

 

 

    음.. 적고 보니 홀드 기술을 선입력에 넣기 위한 아이디어보다는 홀드 기술의 조작감 개선을 위한 지속 시간 보장이 눈에 띄는 것 같은데, 애초에 홀드 기술을 입력 버퍼에 넣고 뺄 때 여러 예외 사항이 발생해서(언제 누르고 떼는지, 버퍼에서 나올 때까지 홀드하고 있다면.. 등등) 해결하는 김에 같이 처리했다. 아래는 커밋 기록인데 홀드 예외 처리를 하느라 5일 가까이 써버렸다.. 못해도 50 뽀모도로는 더 소요된 듯 😪😪

    이건 기획자 관점보다는 개발자 관점에 가까운데, 예외 처리를 일반적인 처리로 만들겠다고 이상한 고생 고생을 다 했다. 결국 몇 가지 규칙이 생기긴 했는데 그래도 일반적인 처리로 만들 수 있게 됐다!

커밋 기록

 

 

 

테스트와 인상 기록

 

    그럼 이렇게 구현한 환경으로 여러 선입력의 유형에 대해 테스트해 보도록 하자.

 

    이번 테스트에서는 버퍼 크기, 버퍼 길이, 버퍼 모드, 콤보 윈도우 배치를 중심으로 총 8가지의 테스트를 진행했다. 그중 3가지는 <3D 게임 비주얼과 연출의 기술> 책에서 소개된 사례를 기반으로 <Super Street Fighter IV>, <Bayonetta>, <God of War 3>의 선입력 방식을 살펴보는 테스트다.

 

    이 외에는 과거에 분석한 <Sekiro™: Shadows Die Twice>의 전투 감각이 좋았던 이유를 선입력의 관점에서 추측하는 테스트 1가지, 즉각 반응을 만들기 위한 테스트 1가지와 입력이 폭발되는 상황에 대처하는 테스트 3가지로 총 8가지의 테스트를 진행했다. 그럼 같이 한 번 살펴보도록 하자.

    테스트 자료는 하나의 영상으로 대체한다. 영상 내부에는 8개의 전투가 들어있으며, 각 전투 진입 시에는 입력 버퍼가 어떻게 동작하는지 보여주고 전투를 치른다. (전투는 AI나 카메라가 아직 조정되지 않아서 좋지 않습니다 😪😪.. 이것도 조만간 전투 경험 관점으로 연구해 볼 예정!)

항상 도움을 많이 받는 책, 벌써 5번은 돌려본 것 같다.

 

 

 

Test #1  <Super Street Fighter IV> 사례

버퍼 크기 : 1
버퍼 길이 : 0.01
버퍼 모드 : Basic (선입선출, 입력되는 대로 쌓임)
콤보 윈도우 배치 : Active 프레임 뒤 일정 길이 

 

    슈스파4는 사이드뷰 격투 게임이다. 기본적으로 선입력은 없으나 공격 성공 시 히트 스톱 상태에서 입력을 통해 공격을 연결할 수 있다고 한다. 따라서, 버퍼 크기를 1로 고정하고 Active 프레임의 뒤에 일정 길이의 콤보 윈도우를 배치하여 행동을 연결시킬 수 있도록 구성했으며, 버퍼 길이는 0.01로 제한하여 사실상 콤보 윈도우 내에서 입력하지 않는다면 무시되도록 구현했다.

    다만, 테스트의 목적이 레퍼런스 게임들의 선입력 시스템을 온전하게 구현하는 것이 아니기에 모든 행동에 대해 연결할 수 있도록 구성했다.

슈스파4의 입력 시나리오

 

 

    위의 시나리오로 해당 방식의 특징을 살펴보면 콤보 윈도우에 맞춰 입력하지 않는 이상 버퍼 길이(시간 초과)로 입력이 무시되기에 타이밍에 맞게 확실히 입력해야 됨을 알 수 있다.

 

 

첫 번째 테스트 (00:09)

 

 

    영상을 살펴보면 공격 콤보 윈도우의 길이를 평균 15 프레임(0.25초)에 맞게 배치했음에도 생각보다 잘 입력되는 걸 확인할 수 있다. 그러나, 약간 빨리 입력하는 등 타이밍이 숙지되지 않은 상태에서는 콤보 윈도우에 맞추지 못해 입력이 일부 무시되는 것을 확인할 수 있다.

 

    이러한 방식은 행동을 연결시키는 것에 플레이어를 집중하게 만들기에 자연스레 캐릭터의 모션이나 사운드 등에 집중하게 된다. 다만, 이에 따라 적의 모션을 살피기 어려울 수 있으며, 플레이어는 이를 방지하기 위해 입력 키를 연타하게 되니 사실상 선입력의 효과는 없다고 봐도 무방하다.

 

    또한, 이러한 방식은 결국 각 공격의 타이밍을 경험적으로 숙지해야 하기에, 숙련자들에게는 적당한 긴장감으로 재미를 줄 수 있으나 초보자 입장에서 학습에 대한 부담이 느껴질 수 있음을 유의해야 된다. (특히, 실제 격투 게임처럼 콤보 윈도우 프레임이 극단적으로 작으면 작을수록 숙련에 대한 괴리가 심해진다.)

 

    다만, 효과가 없는 것은 아닌데 콤보 연결이 어려운 만큼 행동이 성공했을 때 한방한방의 타격감이 강조되는 걸 확인할 수 있었다. 그리고, 이는 공격 입력 시 active 프레임까지의 길이, 즉 startup 프레임이 짧을수록 강하게 느껴진다고 생각했다.

 

    아! 추가로, 콤보 연결에 실패할 때 페널티가 너무 가혹하게 느껴졌다. 테스트에서는 recovery 프레임 시작에 콤보 윈도우를 배치해 놨는데 이때 실패하면 이후 recovery 프레임을 전부 봐야 했기에 이 시간이 처벌로 느껴졌다.. 내 철학이랑은 어긋나기는 하는데 이와 별개로 콤보 연결을 가능하게 하는 경우 recovery 프레임의 길이로 처벌 강도를 조절할 수 있겠다는 생각을 했다.

 

정리 : 조건부 선입력은..
- 플레이어 실력 간의 괴리를 키우고, 초보자에게 학습 부담을 부가한다.
- 플레이어로 하여금 캐릭터의 모션과 사운드 등에 집중하게 만든다.
- 안전하게 조건부 선입력을 성공시키기 위해 조작 키를 연타하게 만든다.
- 난이도와 비례하여 성공했을 때 한방한방의 타격감이 강조된다. (Startup 프레임이 짧을수록 효과가 강화된다.)
- 실패했을 때 recovery 프레임을 기다리는 시간이 처벌로 느껴진다. (Recovery 프레임의 길이로 처벌 강도를 제어할 수 있다.)

 

 

 

Test #2  <Sekiro™: Shadows Die Twice> 추측

버퍼 크기 : 1
버퍼 길이 : 1
버퍼 모드 : Basic (선입선출, 입력되는 대로 쌓임)
콤보 윈도우 배치 : Active 프레임 뒤 일정 길이 

 

    세키로 테스트는 앞선 조건부 선입력(슈스파4 사례)의 단점을 보완하기 위해 고민했던 내용의 효과를 검증하기 위한 테스트다.

 

    앞서 조건부 선입력의 단점이 공격의 타이밍을 경험적으로 숙지해야 된다는 것이라고, 이 때문에 숙련도에 따라 플레이어 간의 괴리가 생기는 것이 문제라고 정리했다. 이때 이런 생각을 했다.

 

 

플레이어가 숙지하지 않아도 공격의 타이밍이라는 걸 알려줄 방법은 없나?

 

 

    여타 액션 게임에서 적이 공격하기 전에 전조를 보이듯이 플레이어가 공격할 타이밍에 무언가 신호를 줄 수 없을지 고민해 봤다. 이 과정에서 세키로의 조작감이 굉장히 좋았던 기억이 있어서 세키로의 조작을 살펴보던 중 신기한 현상을 발견했다.

 

    바로 내가 공격이 성공할 때 다음 공격을 입력한다는 것이었다. 이는 공격의 startup 길이에 상관없이 무의식적으로 수행된 행동이었는데, 이를 보면서 공격 성공(Active 프레임 활성화) 자체를 하나의 신호로 활용할 수 있겠다는 생각을 했다.

 

    이를 수행하려면 공격 성공 시 입력한 조작이 콤보 윈도우까지 지속돼야 했고, 이를 위한 최악의 경우를 계산하기 위해 각 공격의 $\left(\text{ComboWindowFrame}_{\text{start}} - \text{ActiveFrame}_{\text{start}}\right) \times \frac{1}{60}$를 계산한 뒤 이들의 최대 값에 여유 분을 더해 버퍼 길이로 지정했다. (테스트에서는 최장 54 프레임으로 0.9가 나와서 1로 지정했다.)

 

 

설정 값은 이런 식으로 반영한다.

 

 

    테스트 시나리오와 영상은 다음과 같다.

 

 

세키로의 입력 시나리오

 

 

    시나리오의 특징을 살펴보면 버퍼 길이가 제한돼 있기에 active 프레임 시점에 입력한 액션에 한해서만 동작이 수행되는 걸 확인할 수 있다. (실제로는 버퍼 길이가 최악의 경우에 맞게 설정되기에 startup 프레임 말미에 입력한 조작이 수행될 수도 있다. 보장되는 건 active 프레임에서 입력된 조작에 한정된다. 초보자들이 action 프레임의 데미지 리액션을 보고 행동하게 만들자는 게 기본적인 아이디어이기에 큰 문제는 없다.)

    지금 다시 생각해 보니 슈스파4 자체도 공격이 성공할 때 입력하는 것인데 내가 recovery 프레임에 콤보 윈도우를 둬서 어렵게 느껴졌던 걸 수도 있겠다. 음.. 잘못 인정! 그래도 슈스파4 사례에서 공격 성공 외의 행동 연결이 타이밍을 숙지해야 된다는 것에는 변함이 없기에 공격을 제외하고 보면 될 것 같다.

 

 

두 번째 테스트 (01:00)

 

 

    테스트 결과, 공격 성공에 맞춰 행동하면 다음 공격이 보장되며(캐릭터 기준), 공격을 마친 이후에 불필요한 공격이 버퍼에 남아 재생되는 일이 줄어듦을 확인할 수 있었다.

 

    또한, 콤보 리스트를 다른 액션들로 대체해 테스트해 봤는데 이때도 어색하긴 하나 크게 어렵지는 않게 콤보를 이어갈 수 있었다. 이를 통해 공격 성공 신호에 맞춘 조작으로 플레이어 숙련도에 따른 괴리를 줄이고 많은 플레이어가 즐겁게 조작하게 만들 수 있겠다는 생각을 했다.

 

    이러한 방식에 대해 평가해 보자면 대부분의 액션 게임에서는 공격이 성공할 때, 경직, 사운드, 시각적 강조 등으로 데미지 리액션을 통해 성공했다는 감각을 전달해 주는데, 이러한 리액션을 하나의 신호로 다음 공격을 이어간다는 점이 세련된 설계로 보였다. (기존의 메커닉을 이용해서 문제를 해결하는 것이니)

    사실 이건 개선의 두 번째 결과인데, 첫 번째에서는 리듬감을 통일시키기 위해 모든 액션의 startup 프레임을 동일하게 맞추고, action 프레임과 콤보 윈도우 사이의 길이 또한 동일하게 맞춰봤다.

    이것을 테스트해 보니 리듬감에 맞춰 입력하면 되기에 공격은 쉬웠지만 재미는 없었다. 애니메이션을 끼워 맞춰서 그런 것도 있겠지만, 액션에는 리듬감이 중요한데 전부 동일한 리듬으로 조작하게 되니 별로 재미가 없었다.

    따라서, 지금의 데미지 리액션을 신호로 입력하게 하는 방식이 세련되고 액션의 재미 또한 잘 살린 방법이라고 생각한다.

 

정리 : 데미지 리액션에 맞춰 조작하는 선입력은
- 공격 성공(active 프레임) 신호에 맞춰 공격하면 다음 공격을 보장하기에 초보자가 쉽고 빠르게 감각적으로 이해하고 적응할 수 있다.
- 모든 액션 내 active 프레임과 콤보 윈도우 사이 거리의 최악의 경우를 버퍼 시간으로 지정하여 다음 공격을 보장할 수 있다. (다만, 액션 간의 startup, recovery 프레임이 극단적으로 차이 나면 액션이 버퍼에 남아 의도가 왜곡될 수 있음에 유의해야 한다. 이때는 버퍼 크기나 버퍼 비우기로 보정이 가능하다.)
- 순서는 달라도 조작과 함께 공격이 수행되기에 공격에 몰입할 수 있게 된다. (공격 1 시점에 조작 2를, 공격 2 시점에 조작 3을 수행하니 반응성이 좋다고 착각을 받게 된다. 세련된 디자인 사례!) 

 

 

 

Test #3  <Bayonetta> 사례

버퍼 크기 : 1
버퍼 길이 : 0.01
버퍼 모드 : Basic (선입선출, 입력되는 대로 쌓임)
콤보 윈도우 배치 : Active 프레임 뒤 끝까지 닿는 길이

 

    베요네타는 기본적인 선입력은 없으나 공격 액션의 지연이 가능하기에 타이밍을 정확히 맞출 필요가 없다고 한다. 이에 슈스파4와 마찬가지로 버퍼 길이를 0.01로 맞춰 사실상 타이밍을 맞추지 않으면 선입력이 없는 형태로 설정했으며, 공격 액션의 지연이 가능하다는 것을 active 프레임 이후에 recovery 프레임에서 자유롭게 다음 액션을 이어갈 수 있다는 것으로 이해해 recovery 프레임 전체를 콤보 윈도우로 설정하여 입력 타이밍에 여유를 줬다.

 

 

(좌) 콤보 윈도우 늘리기 이전, (우) 콤보 윈도우 늘린 이후
베요네타의 입력 시나리오

 

 

    위의 시나리오를 살펴보면 콤보 윈도우가 굉장히 넉넉하기에 recovery 프레임 어디에서든 조작 시 동작이 수행되는 걸 확인할 수 있다. 이러한 방식은 active 이후에 언제든 눌러도 된다는 것을 의미하니 recovery 프레임이 길어져도 큰 문제가 없다.

 

 

세 번째 테스트 (01:40)

 

 

    테스트 결과는 천천히 입력하든 빨리 입력하든 콤보가 정상적으로 수행된다는 게 확실히 편했다. 일단 공격 타이밍이 여유롭다 보니 조작에 대한 부담감이 없었고, 버퍼 길이 또한 아주 짧다 보니 당연하게도 선입력된 잔재가 남아 이후의 의도에 영향을 주는 일 또한 없었다.

 

    한 가지 가볍게 유의할 점이라고 하면 recovery 프레임에서의 애니메이션 블렌딩인데, recovery 프레임 어디에서든 다음 행동이 시작될 수 있으니 recovery 프레임에서의 애니메이션이 복잡하다면 다소 부자연스럽게 보일 수 있겠다는 생각을 했다(과장된 모션으로 칼을 집어넣는 중 강한 공격을 한다던가..). 다만, 이 부분은 사전 설계로 해결할 수 있는 부분이기에 큰 문제는 되지 않는다고 생각한다.

 

    추가로, 이전에 <검은 신화: 오공>의 리뷰 영상을 보던 중 1-4타는 약하고, 5타에 대부분의 피해 값이 몰려있어 5타에 대한 스트레스를 느낄 수 있다는 내용을 접했다. 이것이 성패에 따른 임팩트를 위해 의도된 설계일 수도 있지만, 의도된 것이 아니라면 베요네타와 같이 지연된 콤보 윈도우로 해결할 수 있겠다는 생각을 했다. (변칙적인 손오공 이미지랑도 잘 어울리는 것 같다.)

 

    이처럼 지연된 콤보 윈도우에 따른 선입력은 콤보를 요구하지만, 콤보 연결로 스트레스를 주지 않고자 하는 상황에서 유용하게 적용할 수 있으리라 생각한다.

 

정리 : 지연된 콤보 윈도우에 따른 선입력은
- 조작에 대한 부담감이 크게 줄어든다.
- 쉽고 편하게 콤보를 즐길 수 있게 만든다.
- 애니메이션 블렌딩 과정에서 부자연스럽게 되지 않도록 유의해야 한다.

 

 

 

Test #4  <God of War 3> 사례

버퍼 크기 : 1
버퍼 길이 : 1
버퍼 모드 : Clear Lower Priority (높은 우선순위의 입력이 들어오면 버퍼 내 상대적으로 낮은 우선순위의 입력이 지워짐)
콤보 윈도우 배치 : Active 프레임 뒤 일정 길이

 

    갓 오브 워 3은 앞서 정리한 버퍼 비우기를 적극적으로 사용한 사례다. 갓 오브 워 3에서는 우선순위에 기반한 비우기를 사용했는데 가드의 우선순위가 높다고 해서 공격, 가드, 대시 순으로 우선순위를 설정했다. (처음에는 좋은 방법을 발견했다고 좋아했는데.. 그래, 이런 발상을 했던 사람이 없을 리 없지 🤔😥)

 

    또한, 책의 사례 소개에서 선입력 버퍼 크기가 1이고, 버퍼 길이도 여유롭다고 해서 이들을 1로 설정했다. 

 

 

입력 우선순위 설정 (값이 낮을수록 우선순위가 높다)
갓 오브 워 3의 입력 시나리오

 

 

    위의 시나리오를 살펴보면 공격 1이 수행되고 있는 와중에 공격 2가 입력돼 버퍼에 추가된다. 바로 이어서 입력된 공격 3은 버퍼 크기에 의해 추가되지 않는다. 그 뒤에는 가드 1이 입력되는데 가드 1이 버퍼에 추가되면서 낮은 우선순위의 액션이 제거되기에 공격 1이 버퍼에서 제거된다. 그렇게 공격 1의 콤보 윈도우에서는 가드 1이 수행되는 것을 확인할 수 있다.

 

    실제로 위와 같이 동작할지 확인해 보자.

 

 

네 번째 테스트 (02:22)

 

 

    테스트 결과, 버퍼에 공격이 있는 상황에서 가드 키를 조작할 경우, 공격이 삭제되고 가드로 대체됨을 확인할 수 있다. 이는 전투 시 공격이 버퍼에 있더라도 상대의 공격에 순간적으로 대응할 수 있음을 의미한다. (특히 가드의 startup 프레임이 짧을수록 효과적이다. 세키로의 버퍼도 이런 식으로 처리되는 것 같긴 하다.)

 

    또한, 버퍼의 크기와 길이도 1이기에 선입력된 조작이 폭발해 의도를 왜곡할 일도 없다.

 

 

    테스트 과정에서는 아직 적의 공격 감각이 좋지 않아서 이 외의 특별한 인상을 받지는 못했다. 그래서, 그냥 뇌피셜로 몇 자 적어보자면 개인적으로 우선순위는 게임의 전투 철학을 반영할 수 있는 강한 방법 중 하나라는 생각을 한다.

 

    대부분 공격이 낮은 우선순위를 갖는 것 같긴 한데, 가드(패링)와 대시(회피) 중 무엇을 우선으로 둘 것이냐에 따라 전투 경험이 달라진다고 생각한다.

 

    가드(패링)를 중심으로 전투 시스템이 설계된 경우(가드 시 특정 게이지가 차오른다던가)에는 가드 우선순위를 높여 더 자주 의도된 재미를 즐길 수 있게 할 수도 있고, 회피 감각이 특출나게 좋은 경우 가드 우선순위를 높여 회피를 더 자주 즐길 수 있게 하는 등 게임의 전투 철학을 반영하기 좋겠다는 생각을 했다.

 

    물론 언제 끊는지도 중요할 것이다. 테스트에서는 recovery 프레임에서만 끊도록 했는데, 적의 공격 속도가 빨라서 플레이어에게 어느 정도의 보정을 주고 싶은 경우, 우선순위 비우기와 함께 공격 startup 프레임 직후에 콤보 윈도우를 배치해서 가드에 대한 반응성을 살릴 수도 있을 것이다. (테스트 8 내용)

 

 

    마지막으로 점유 방식에 대해서도 이야기해 볼 수 있을 것 같은데, 테스트에서는 우선순위에 가려져 명확히 체감되지 않았지만, 먼저 입력한 것이 버퍼에 기록될 것인가, 마지막에 입력한 것이 버퍼에 기록될 것인가는 중요한 문제라는 생각을 한다. 만약 우선순위가 없고 버퍼 크기가 1이라면 전자는 플레이어로 하여금 신중을 가하도록 만들고, 후자 쪽은 달라지는 상황에 조금 더 유연히 대처할 수 있게 만들 것이다. (테스트 8 내용)

 

정리 : 우선순위에 의한 선입력은
- 버퍼 비우기를 통해 달라지는 상황에 효과적으로 대응할 수 있을 것이다. (Startup 프레임이 짧을수록 효과적)
- 우선순위 배치에 따라서 출력되는 행동이 달라지기에 특정 경험을 유도해 전투 철학을 반영하기 좋을 것이다.
- 끊는(콤보 윈도우) 시점에 따라 반응성이 달라질 것이다.

 

 


Test #5  폭발 (기본)

버퍼 크기 : 10
버퍼 길이 : 5
버퍼 모드 : Basic (선입선출, 입력되는 대로 쌓임)
콤보 윈도우 배치 : Active 프레임 뒤 일정 길이

 

    이번 항목부터 7번 테스트까지는 버퍼 폭발에 대한 내용이다. 버퍼 폭발은 시스템이 보정하지 않는 경우 초보자들이 가장 치명적으로 여기게 되는 문제인데, 조작키를 반복해서 입력한 경우에 해당 조작들이 버퍼에 남아 이후 플레이어의 의도를 왜곡하는 현상을 말한다.

    폭발 관련 테스트들은 선입력 제어가 필요한 이유와 어떻게 제어할 수 있을지에 대한 기능 관점에서의 설명만 간단하게 하고 넘어가도록 하겠다.

 

다섯 번째 테스트 (02:53)

 

 

    테스트 결과를 보면 조작에 따라 버퍼에 입력이 무조건적으로 추가되고, 별도의 조작 없이도 계속 액션이 재생되는 것을 확인할 수 있다. (중간에 공격 몇 개가 한 번에 빠지는 걸 볼 수 있는데 이건 그냥 버그임.. Block 했는데 왜 그런지는 모르겠음.. 빠른 시일 내에 수정할 예정..)

 

    이는 전투 과정에서 필요할 때에만 키를 입력하는 숙련자들에게 그나마 괜찮지만, 특정 키를 반복적으로 누르는 습관을 가진 초보자들에게는 버퍼 폭발로 이어져 변화하는 상황에 대처하지 못하고 의도가 무시되는 불합리한 결과를 마주하게 만든다.

 

정리 : 폭발하는 선입력은
- 특정 키를 연타하는 습관을 가진 초보자들에게 자신들의 의도가 무시되는 불합리한 결과를 낳는다.

 

 

 

Test #6  폭발 (다른 유형 제거) 

버퍼 크기 : 10
버퍼 길이 : 5
버퍼 모드 : ClearOther (다른 유형 제거)
콤보 윈도우 배치 : Active 프레임 뒤 일정 길이

 

    이전 버퍼 폭발 상황과 같으나 조작 시 버퍼 내에 입력된 조작과 다른 유형의 액션(공격/방어/회피)이 있다면 전부 제거하는 상황에 대한 테스트 영상이다.

 

 

여섯 번째 테스트 (03:37)

 

 

    테스트를 확인해 보면 공격 버퍼가 쌓여있다가 가드를 하면 대기 중인 공격들이 사라지는 것을 확인할 수 있다. 이를 통해 특정 키를 연타하는 초심자라도 상황이 달라지는 경우에 버퍼 비우기로 대처할 수 있게 되고 이로 인해 불합리하다는 느낌이 덜어지게 된다.

 

정리 : 다른 유형을 지우지만 여전히 폭발하는 선입력은
- 연타를 하더라도 변화하는 상황에 조금 더 대응할 수 있도록 만든다.

 

 

 

Test #7  폭발 (낮은 우선순위 제거) 

버퍼 크기 : 10
버퍼 길이 : 5
버퍼 모드 : Clear Lower Priority (높은 우선순위의 입력이 들어오면 버퍼 내 상대적으로 낮은 우선순위의 입력이 지워짐)
콤보 윈도우 배치 : Active 프레임 뒤 일정 길이

 

    이전 버퍼 폭발 상황과 같으나 앞서 갓 오브 워 3에서 살펴봤던 대로 조작 시 버퍼 내에 입력된 조작보다 낮은 우선순위의 액션이 있다면 제거하는 상황에 대한 테스트 영상이다.

 

 

일곱 번째 테스트 (04:22)

 

 

    테스트를 확인해 보면 버퍼가 쌓이기는 하지만 새로운 입력이 들어올 때 이보다 낮은 우선순위의 버퍼를 지우는 것을 확인할 수 있다. 이 또한 갓 오브 워 3의 사례와 마찬가지로 변화하는 상황에 대처할 수 있게 하되 디자이너의 의도를 조금 더 깊게 반영하여 플레이어가 특정 경험을 자주 하도록 만드는 효과를 낳는다. 

 

정리 : 우선순위에 따라 버퍼를 지우지만 여전히 폭발하는 선입력은
- 연타를 하더라도 변화하는 상황에 조금 더 대응할 수 있도록 만든다. (단순 다른 유형 제거보다는 대응하기 어렵다.)
- 특정 버퍼가 더 자주 남도록 하여 플레이어가 디자이너의 의도가 깊게 반영된 경험을 하게 된다.

 

 

 

Test #8  즉시 발동 테스트

버퍼 크기 : 1
버퍼 길이 : 1
버퍼 모드 : Clear All (기존 버퍼를 전부 제거)
콤보 윈도우 배치 : Startup 프레임 뒤 일정 길이, Active 프레임 뒤 일정 길이

 

    이건 앞선 테스트를 진행하던 와중에 개선점이 생각나서 하나 더 진행해 본 테스트다. 아이디어는 세키로의 선입력에서 startup 프레임이 끝나기 전 다른 조작을 입력하면 active 프레임으로 이어지지 않고 다른 조작에 대응하는 액션이 동작하는 데서 시작했다. (아마도..? 아닌 것 같기도 하고.. 일단 중요한 건 아이디어니까..)

 

    이런 즉시 반응성이 적의 공격이 빠르게 들이닥칠 때 순간적으로 반응할 수 있게 하는 원동력이자, '내가 이걸 막았어?'라는 쾌감을 만드는 요소라는 생각을 했다.

 

    그래서 clear all이라는 다른 조작 시 무조건 기존 버퍼를 비운 뒤 조작을 추가하는 버퍼 모드를 추가하고, startup 프레임 직후에 짧은 콤보 윈도우를 배치해서 버퍼를 읽어오도록 하여 즉시 반응성을 살려봤다.

 

(좌) Invoke Attack Behavior가 active 프레임인데 그 직전에 jump 테이블이 의심된다.., (우) Startup 프레임 직후에 짧은 콤보 윈도우 배치

여덟 번째 테스트 (05:08)

 

 

    테스트를 보면 공격 중에 순간적으로 가드가 되는 것을 확인할 수 있다. 그런데 이게 생각보다 좋지는 않았다.

 

    가장 먼저 모션이 중간에 끊기는 게 어색했는데 이는 내가 콤보 윈도우를 어설프게 배치한 것을 고려해도 별로였다. 개연성이 떨어져 보이는 느낌이다. 그동안 애니메이션이 중요하다고는 생각해도 디테일까지는 그렇게 중요하지 않다고 생각했는데 이런 생각이 바뀌게 됐다.

 

    이를 제대로 사용하려면 모션을 중간에 끊고 새로 들어온 액션이 극적인 성공을 남겨야 된다는 생각을 했다. 세키로에서 이것이 효과적인 이유 또한 애니메이션이 끊기더라도, 그 끊김의 공백을 패링의 쾌감이 채우기에 유의미했던 것이지 무조건적으로 끊어낼 수 있게 하는 게 효과적이지는 않은 것 같다.

 

    즉시 반응성으로 조작감을 개선하고자 한다면, 애니메이션의 끊김을 확실히 해결하거나, 끊김을 통한 효과를 확실히 강조할 수 있어야 될 것 같다. (조작만 따지면 난이도가 너무 쉬워지는 문제도 있고 쉽게 채택할만한 선택은 아닌 것 같다.)

 

정리 : 즉시 반응성을 살리는 선입력은
- 애니메이션의 끊김이 어색하기에 극적인 성공 경험을 줄 수 있는 것이 아니라면 계속 활용할 만큼 좋은 선택은 아니다.

 

 

 

결론

 

    이렇게 8가지 테스트를 진행하고 인상을 기록해 봤다. 앞서 내가 추측한 내용은 다음과 같다.

 

  • 추측 1. 플레이어는 상황이 변화할 때 다른 유형의 조작을 할 것이다.
  • 추측 2. 다른 유형의 조작 입력 시 선입력 비우기를 통해서 플레이어의 의도를 제대로 반영할 수 있을 것이다.
  • 추측 3. 유형별 우선순위를 선입력 비우기와 결합시켜 의도를 벗어난 입력에 대한 내성을 높일 수 있을 것이다.

 

    이에 대해 하나하나 답변을 내리자면 다음과 같다.

 

  • 결론 1. 플레이어는 상황이 변화할 때 다른 유형의 조작을 하고, 버퍼 관리 규칙을 통해 이런 의도를 잘 반영시킬 수 있다.
  • 결론 2. 다른 유형의 조작 입력 시 선입력 비우기를 통해 플레이어의 의도를 반영할 수는 있으나 이는 버퍼 크기와 시간, 콤보 윈도우 배치 등과 얽혀 발동 여부가 결정되기에 함께 고려돼야 한다. (애초에 버퍼 크기 자체가 클 필요가 없다. 크다고 좋은 게 아니다. 크기는 콤보가 꼭 필요할 때 콤보 크기에 맞춰 설정하는 것이 적당하다.)
  • 결론 3. 유형별 우선순위를 통해 버퍼에 잘못된 입력이 들어가도 새 입력을 통해 제거할 수 있으므로 의도를 벗어난 입력에 대한 내성이 높아진다.

 

    거창하게 연 것치고 결론이 다소 허술한데 프레임에 대해서 고민해 봤다는 점, 공식을 찾고 만들 수 있다(아이디어-기준 확인-관계 정의-공식 정의)는 걸 확인했다는 점에서 가치 있었던 것 같다.

 

    그리고, 처음 추측의 결론 외에도 여러 가지 인사이트를 얻었는데 이는 다음과 같다.

 

 

  • 인사이트 1. 조작감이란 정확한 행동 반영이 아닌 정확한 의도 반영의 결과이기에, 좋은 조작감을 위해서는 상황별 특이 행동을 파악하고 이를 보정하는 시스템을 마련해야 한다.
  • 인사이트 2. 굳이 과하게 표현하지 않아도 게임 내에 존재하는 다양한 신호(데미지 리액션 등)로 조작의 타이밍을 인지시킬 수 있다. (액션 장르의 핵심은 잘해 보이는 것이기에 가장 좋은 건 무의식적으로 신호를 파악할 수 있는 것이다.)
  • 인사이트 3. 테스트에서는 버퍼 크기, 길이, 모드, 콤보 윈도우 배치만을 확인했지만 더 다양한 기준을 마련할 수 있다. 그리고, 그 기준들의 관계를 공식이나 규칙으로 정의하여 좋은 조작감을 위해 활용할 수 있다. (콤보 윈도우와 active 프레임 차)

 

 

    여기까지가 연구의 결론이다. 테스트 중 내가 가장 좋았던 건 2번 테스트, 세키로 선입력 시스템에 대해 추측해서 공격 성공을 신호로 다음 공격을 입력하는 방식이었던 것 같다. 한방한방의 임팩트도 좋았고 숙련도에 따른 괴리를 줄일 수 있다는 점이 많은 플레이어를 의도된 재미에 도달시킨다는 내 철학과 맞닿아있어서 인상 깊었다.

 

    한 가지 아쉬웠던 점은 적 AI가 기본적인 틀만 만들어져 있어 효과를 정확하게 확인하지 못했다는 게 아쉽다. 하지만, 이번에 구현한 것들은 이후에도 언제든 손쉽게 테스트할 수 있으니 적 AI 공부하면서 이번처럼 연구하고, 다음에 차차 다시 테스트해 봐도 좋을 것 같다는 생각을 한다. (그때가 되면 마찬가지로 기록을 남기겠다! 기록은 더 구체적인 지식을 만드니까..😉😉)

 

더보기

    아! 그리고, 본문에 빠뜨린 게 있어서 간단하게 여기에 추가한다. 앞서 구현 방법 파트에서 가드 처리 때문에 이런저런 문제를 겪었다고 말했는데, 그때 개선한 것 중에 조작감에 기여하는 것도 있었다.

 

    바로, 단타 입력 시 가드 지속 보장인데 아래에 GIF로 첨부할 테니 관심 있는 사람은 보면 될 것 같다. (바보 같이 3840*2160으로 녹화했던 영상이라 끊김이 있다..😥😥)

 

 

(좌) 가드 보장 이전 : 적 공격 시 단타로 가드하면 그대로 맞는다, (우) 가드 보장 이후 : 적 공격 시 단타로 가드해도 가드된다.

 

 


 

 

후기

 

    오늘은 이렇게 선입력과 조작감에 대해 알아봤다. 들어가는 글에서 증명하는 디자이너로서의 길이 보인다고 언급했는데.. 어떤가? 그 편린이라도 느껴진다면 이번 연구는 성공이었다고 생각한다.

 

    다만, 이런 연구가 처음이다 보니 시행착오도 많았다. 선입력에 대한 내용을 정리한 뒤, 너무 어설프게 개발한 것 같아서 조금 더 범용적으로 활용할 수 있도록 개선하기도 했고, 이러다 보니 너무 개발에만 치중된 것 같아서 기획적인 고민을 더 오래 끌고 가보기도 했다. 이렇게 하다 보니 글 작성까지 거의 80~90 뽀모도로(약 35시간) 정도 소요된 것 같다.

 

    기간이 늘어졌다는 게 조금 아쉽긴 하다. 그만큼 부족하다는 거니까 더 열심히 해야지..

 

 

    아무튼 그동안 원해왔던 프로토타입을 통한 증명을 한 번이라도 해보니까 감회가 새롭다. 아직은 실력 있는 디자이너가 고민한다면 구현 없이도 충분히 생각할 수 있는 것들을 다뤘기에 이렇게까지 하는 내가 멍청해보이기도 하는데, 지금은 헛고생으로 보일지라도 꾸준히 나아가다보면 고민만으로는 도달할 수 없는 인사이트를 얻고 나아갈 수 있으리라 기대한다. (장르를 만드는 디자이너로서의 길..)

 

    무엇보다 연구 시리즈에 앞선 인고 시리즈도 처음에는 이렇게까지 하는 내 스스로가 바보 같아 보였지만 그럼에도 디자인적인 사고를 확장하고 그 가치를 증명하지 않았나. 이것 또한 여러 회차 진행하다 보면 갈피가 잡힐 것이다. 그리고, 이렇게 진행하다가 괜찮은 주제가 있다면 포트폴리오로 만들어도 괜찮을 것 같다는 생각을 한다.

 

 

    한편으로는 꼭 포트폴리오로 증명해야 되나 싶긴 하다. 이미 만들어둔 것도 있고, 주제만 있다면 일주일 내로는 하기에 그렇게 힘든 건 아니지만.. 의문이 드는 건 어쩔 수 없는 것 같다.

 

    포트폴리오라는 건 결국 구인자와 구직자 사이의 원활한 정보 교환을 위해 존재하는 것이다. 나의 실력을 보여주기 위해 포트폴리오를 작성하는 것이니 좋은 포트폴리오를 만들기 위해서는 우선 내 실력부터 키워야 하며, 내 실력을 키우기 위해서는 포트폴리오 외적으로도 다양한 고민과 경험이 필요하다고 생각한다.

 

    나한테는 블로그에 기록한 지난 기록들부터 인고 시리즈를 포함해 지금의 연구 시리즈까지가 그런 실력 향상이 일환이고 말이다. 물론 일단 통과하고 회사에서 배우는 것도 방법일 수는 있으나, 나는 어떠한 영역에서 살아감에 있어 자신감이라는 게 굉장히 중요하다고 생각하기에 적어도 내가 나를 당당하게 디자이너라고 말할 수 있는 수준까지는 끌어올려보고 싶다.

 

    그런 의미에서 아직은 무언가를 증명할 수 없다고 생각해서 포트폴리오를 만들어내기보다는 경험을 쌓고 내 걸로 녹여내는 시기라고 생각해 계속 공고 지원이 늦어지고는 있는데.. 모르겠다. 적당히 타협하는 것도 능력이니.. 항상 말만 하게 되지만 조만간 공고에 지원해 봐야 겠다..😅😅

 

 

이 모든 것.. 분명 나에게 꼭 필요한 일이지만, 취업하기에는 너무 이상한 방향으로 온 것 아닐까?

 

 

이건.. 네가 시작한 이야기잖아.
ㅠㅡㅠ

 

 

 

포스트모템 (4L)

무엇이 좋았는가? (Liked)

  • 그동안 꿈만 꿨던 프로토타이핑을 통한 인사이트 검증을 해봤다.
    → 증명하는 디자이너로서의 한 걸음! 이제 선입력에 한해서는 언제든 손쉽게 테스트 가능하다!
  • 구현 과정에서 조작에 대한 예외 사항을 깊게 생각해 볼 수 있었다.
  • 자료를 하나의 유튜브 영상으로 정리해서 GIF를 만드는데 드는 시간을 절약했다.
    → 그런데 처음에 3840*2160으로 녹화했는데 영상이 제대로 녹화되지 않아서 다시 녹화함 ㅠㅠㅠ
  • 선입력과 조작감에 대해 밀도 있게 고민했다.
  • 엑셀로 프레임에 대한 자료를 만들어 활용했다.
  • 테스트 목록과 옵션을 미리 정리하고 예상을 기록한 뒤 실제 결과와 비교해 봤다.
    → 처음부터 모든 목록을 확실하게 나열하지는 못했다. 그런데 테스트하면서 떠오른 것도 많아서 이런 방법이 맞는 것 같기도 하다.

 

 

무엇이 아쉬웠는가? (Lacked)

  • 적 AI가 아직 어색해서 테스트가 효과적으로 진행되지 않았다.
  • 작업 기간이 엄청 늘어졌다.
    → 이것저것 다 해서 10일 정도 쓴 것 같다.. 무조건 압축이 필요하다..

 

 

무엇을 배웠는가? (Learned)

  • 결론에 서술함. 

 

 

무엇을 바라는가? (Longed for)

  • 콤보에 대한 연구
    → 대시 공격, 에어본, 좋은 공격 타이밍
  • 2번째 포트폴리오에 첨부할 배시 테스트
  • 카메라에 대한 연구
  • 적 AI와 전조 타이밍에 대한 연구
    → 전조 타이밍과 가드 startup의 관계에 대한 연구
  • 선입력을 중심으로 스텔라 블레이드의 조작감에 대한 포트폴리오를 작성해 봐도 좋을 것 같다.
  • 90일 프로젝트 결산과 LR 프로젝트 복귀에 대한 글 작성

 

📢 Next - 미정

'게임 디자인 > 공방' 카테고리의 다른 글

포트폴리오[02] 아이디어 검증 : Bash를 만들어보자.  (2) 2025.08.15
[연구 2회차] 공격 액션의 구성과 리듬에 따른 인상 (feat. Unreal GAS를 활용한 검증)  (0) 2025.07.17
[인고 6회차] 『God of War』 - 갓 오브 워가 전투로 분노를 표현하는 방법 (feat. 가치 판단과 타격감)  (0) 2025.06.16
[인고 5회차] 『NieR:Automata™』 - 니어 오토마타의 전투가 아쉬운 이유와 캐릭터 및 모션의 아름다움을 활용한 전투의 개선 제안  (0) 2025.05.15
[인고 4회차] 『Devil May Cry 5』 - 데메크의 콤보 플레이를 재미있게 만드는 설계 구조 (feat. 네로)  (0) 2025.05.11
'게임 디자인/공방' 카테고리의 다른 글
  • 포트폴리오[02] 아이디어 검증 : Bash를 만들어보자.
  • [연구 2회차] 공격 액션의 구성과 리듬에 따른 인상 (feat. Unreal GAS를 활용한 검증)
  • [인고 6회차] 『God of War』 - 갓 오브 워가 전투로 분노를 표현하는 방법 (feat. 가치 판단과 타격감)
  • [인고 5회차] 『NieR:Automata™』 - 니어 오토마타의 전투가 아쉬운 이유와 캐릭터 및 모션의 아름다움을 활용한 전투의 개선 제안
라사 RASA
라사 RASA
집념 어린 성장, 그러한 증명.
  • 라사 RASA
    Memoria Aeon
    라사 RASA
  • 전체
    오늘
    어제
  • 공지사항

    • 블로그는 당분간 잠시 쉬어갑니다. (feat. 간단 블로깅⋯
    • 포트폴리오를 만들어봤습니다.
    • 지도를 그리고 있습니다.
    • 분류 전체보기 (213)
      • 프로젝트 (26)
        • 뚜두 농장 (1)
        • Lost in Hope (18)
        • Breath in Winter (1)
        • Lib's Rarry (2)
        • 단기 프로젝트 (3)
        • 출시 게임 (1)
      • 포트폴리오 (2)
      • 게임 디자인 (40)
        • 게임 디자인 이론 (13)
        • 게임 디자인 연구 (3)
        • 게임 분석 (4)
        • 연습작 (5)
        • 공방 (15)
      • 개발 (92)
        • 알고리즘 (76)
        • 그래픽스 (1)
        • 언리얼 (15)
      • 아트 (2)
        • 그림 (1)
        • 연출 (1)
      • 철학 (5)
        • 디자인 철학 (2)
        • 생각 정리 (3)
      • 일상 (35)
        • 독서 (5)
        • 컨퍼런스 (2)
        • 미디어 리뷰 (4)
  • 링크

    • Youtube
    • Github
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 글쓰기
    • 관리
  • 인기 글

  • 최근 댓글

  • 태그

    레벨 디자인
    Bridge
    게임잼
    개발 일지
    알고리즘 레콩키스타
    러셀 언리얼 엔진 중급 클래스
    재밌넥
    프로젝트
    breath in winter
    스터디
    개발
    게임 분석
    til
    뚜두 농장
    기획
    회고
    수확제
    GMTK
    한국 공학 대전
    Lost In Hope
  • hELLO· Designed By정상우.v4.10.4
라사 RASA
[연구 1회차] 선입력과 조작감 (feat. Unreal GAS를 활용한 검증)
상단으로

티스토리툴바