포스트

'행선지', 게임 기획하기

'행선지', 게임 기획하기

들어가며

직전의 경험을 마무리하고 새 유니티 프로젝트를 시작하려던 참에 10년 전에 보았던 잔잔한 영화를 다시 보고 경험이 가지는 영향력에 대해 생각을 하게 되었습니다. 생각이 어느정도 정리된 후, 좋은 영화가 좋은 경험으로 남는 것처럼 저도 그런 것을 만들어보고 싶다는 생각을 하게 되었죠. 평소 이것저것 만들고 표현하고 싶은 마음이 있기도 했구요.

concept-art 친구와 떠들면서 그린 간이 컨셉아트 겸 기획

경험에 초점을 맞추어, 단순히 플레이어가 아무 조작을 하지 않아도 씬 내의 오브젝트들이 알아서 서로 상호작용하는 환경을 구상했습니다. 점수나 게임 종료 조건 없이 단순히 구경하며 돌아다니기만 하는 게임이죠.
위 아이디어를 토대로 빠르게 그림을 그려봤는데 느낌이 생각보다 좋고 주변 반응도 괜찮아서 이를 바탕으로 기획을 구상하기 시작했습니다.

기획

이전에 가장 아쉬웠던 점이 기획의 부재입니다. 참고할 지표와 장기 플랜이 없으니 거시적으로는 게임의 방향성을 잡기 어려웠고, 미시적으로는 예를 들어 리텐션이나 수익성을 생각하기 어려웠습니다. 그래서 이번에는 기획을 먼저 어느정도 구성하고 가려고 합니다.

게임 기획에 도움이 되는 개념이 혹시 있을까 찾아보니 GDD(Game Design Document)라는 것을 알게 되었습니다. 일종의 게임 명세서인데, 정해진 양식이 있는 것은 아니라서 유니티에서 제작한 GDD 양식을 참고하여 필요한 부분만 미리 기술해두려고 합니다.

간이 GDD

기본 설명
  • 이름: 행선지 (영어: waybound)
  • 장르: 횡스크롤 어드벤처
  • 형식: 2.5D 모바일
게임플레이
  • 플레이어는 도시 외곽 환경에서 사람, 강아지, 고양이, 개미 등 환경을 구성하는 생물이 되어 해당 생물에게 주어진 상호작용을 함. 예를 들어 사람은 자판기에서 음료를 꺼내 마시고, 강아지는 길거리 벤치의 냄새를 맡음.
    플레이어가 특별히 생물을 조종하지 않더라도 생물은 서로 상호작용을 하고 도시 외곽 분위기를 구성하며, 각각의 생물은 주어진 범위 내에서 외형적인 개성을 가짐.
주요 특징
  • 오브젝트간 다양한 상호작용
  • 수작업 그림 이미지와 컷 애니메이션
  • 비, 눈 등 날씨에 따라 달라지는 경험

예시 오브젝트

mindmap
    root((오브젝트))
        생물 오브젝트
            사람
            강아지
            고양이
            비둘기
            개미
            반딧불이
        비생물 오브젝트
            자판기
            의자
            쓰레기통
            포장마차
        배경 오브젝트
            빌라
            편의점
            카페
            술집
            지하철

예시 상호작용

graph TD;
    사람 -- 음료 구매하기 --> 자판기;
    사람 -- 산책시키기 --> 강아지;
    사람 -- 쓰다듬기 --> 고양이;
    사람 -- 쳐다보기 --> 반딧불이;
    사람 -- 앉기 --> 의자;
    사람 -- 음식 구매하기 --> 포장마차;

목표

기술적 목표

이전까지 변수나 함수명을 작성함에 있어서 혼란이 많았습니다. 일관성과 직관성 둘 중 어느 것도 잘 잡지 못해 점점 코드를 읽고 수정하기가 버거워졌죠.

그러던 중 유니티 블로그에서 네이밍 컨벤션을 정리한 글을 접하고 조금의 충격을 받았습니다. 처음부터 알았더라면 훨씬 편리했을 텐데 하고 말이죠. 결과적으로 변수명과 함수명은 C#에서 언제 어떤 것을 써야 하는지, 어떤 식으로 작성하면 안 되는지를 명확하게 알 수 있었습니다.

제가 알아야 하는 관행이 더 있는지 찾다보니 마찬가지로 유니티에서 발간한 “Level up your code with game programming patterns” E북을 추가로 알게 되었습니다. 천천히 정독하면서 SOLID 원칙이나 팩토리 패턴, 상태 패턴 등등 여러가지 활용 가능한 기술이 있다는 것을 알게 되었고, 이를 토대로 파생 패턴을 찾아보면서 보다 체계적인 코드 설계를 위해 일정부분 도전해보고 싶은 것들이 생겼습니다. 추려보니 아래와 같이 정리할 수 있네요.

  • PlasticSCM
  • 이벤트 주도적 프로그래밍
  • 절차적 애니메이션
  • 엄격한 네이밍 컨벤션

이중 PlasticSCM은 깃허브를 대체하기 위한 버전 관리 시스템(VCS)으로 개발 도중 간간히 작업물을 저장해두기 위해 사용하려고 합니다. 이벤트 주도적 프로그래밍, 네이밍 컨벤션 등은 이 프로젝트를 통해 얻고자 하는 개발역량의 핵심이고요. 이외에 싱글톤 패턴, 코루틴, 델리게이트, get set 프로퍼티 등 아직 익숙치 않은 것들도 더 잘 활용해보고자 하는 작은 목표도 있습니다.

예술적 목표

기본적으로 선과 그림이 움직이는 경험을 통해 우리 주변의 일상적인 분위기를 묘사하는 것이 목표입니다. 그런 것들을 눈에 충분히 띄면서도 자극적이지는 않은 느낌으로 표현할 수 있으면 좋겠어요. 가능하면 영상 표현물 같은 연출을 지향하면서 구체적으로는 아래 정도를 활용하려고 합니다.

  • 컷 애니메이션
  • 동적 피사계 심도
  • 톤커브 곡선

전반적으로 유저가 가만히 게임 화면을 바라보고만 있어도 재미가 있는 수준으로 만들 수 있었으면 좋겠어요. 다만 제가 그 정도의 역량이 될까 고민이 되는 부분은 있는데 특히 강아지, 고양이, 비둘기 등 동물의 움직임을 컷 애니메이션으로 그려내는 것은 프로 애니메이터의 영역이라고 들은 적이 있습니다. 저는 그 정도로 정밀한 애니메이션을 그릴 필요는 없지만, 배경지식이나 경험이 없기 때문에 시행착오가 있을 것 같네요.

로드맵

gantt
    title 1차 로드맵

    Section 기획
    기획 :a1, 2024-02-28, 1d

    Section 개발
    프로토타입 개발 :a2, 2024-02-28, 85d
    비주얼 구성: a3, 2024-05-23, 10d

    Section 출시
    출시 및 사후지원 :a4, 2024-06-01, 213d

    %% a2["프로토타입 완성"] : 초기 버전의 프로토타입을 개발하여 기능을 확인하고 테스트합니다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.