시스템 디자인

게임 기획서/문서 작성 2019. 4. 29. 09:43

시스템 디자인(System Design)


<게임규칙을 위한 규칙>

게임을 플레이하기 위해서는 규칙이 필요하다.

게임 디자이너는 게임의 규칙을 정해서 게임이 어떻게 진행될 것이냐를 정의한다.

예) 테이블 보드 게임

유닛,카드,보드판등을 어떻게 이용해야 할지를 정의한게 게임 규칙.

규칙이 정리되었다고 게임이 완성되지는 않는다.

어떤 구성의 유닛이 필요하고, 맵에는 뭐가 그려져 있어야 하며,

카드에 적혀야 할 정보가 무엇인지 정리하고 인쇄하면

드디어 게임이 하나 완성된다.


디지털 게임을 만들기 위해서는 추가적인 과정이 하나 더 필요한데,

게임 규칙을 어떻게 작동하게 할 것인가의 문제다.

게임 플레이를 위한 규칙과 게임을 구현하기 위한 규칙이 필요하다.


플레이어가 보고 인지하는 것 외에 플레이어에게 보이지 않는 다른 규칙들이 있다.

바로 '게임 시스템'이다.


[용사가 빨간 물약을 먹고 체력은 128만큼 회복했다.]

->체력이 128만큼 회복되었다는 것은 빨간 물약이 갖고 있는 값일까,

용사의 레벨에 따라 계산된 값일까?


<시스템 디자인의 과정>


시스템은 게임 내부의 데이터들이 어떤 법칙으로 돌아가게 할 것이냐를 정의하는 것이다.

게임 규칙과는 조금 다른 개념이면서 비슷한 개념이다.

시스템은 게임 규칙이 어떻게 진행되게 할 지에 대한 규칙이라 할 수 있다.


예) +(더하기)는 

더하기를 기준으로 좌/우의 값을 더하고,

좌/우의 값은 문자열은 안되고 숫자열만 가능하며,

좌측부터 순서대로 계산한다.

->더하기에 대한 기본 규칙.

게임을 위한 규칙을 조금 덧붙여보면 아래와 같다.


예) 한 스테이지(stage->시작과 끝이 있는 짧은 구간을 말함. (한)판, 혹은 레벨, 챕터 등으로 말하기도 한다)

에서 덧셈 문제가 n개 나오고, 시간 안에 문제를 모두 맞혀야 한다.

문제를 모두 맞히면, 해당 스테이지는 성공, 모두 맞히지 못하면 실패한다.

정해진 시간보다 빨리 맞히면, 추가 점수를 받을 수 있다.


여기까지는 플레이어도 쉽게 알 수 있는 규칙이다.

게임을 만들기 위해서는 다른 규칙들이 필요하다.

문제는 어떻게 낼 것인지,

'정해진 시간'은 어떻게 정의할 것인지에 대한 규칙이 있어야 한다.


예) 한 스테이지에서 문제는 5~15개까지 나온다(1~10:5문제, 11~20:10문제,21~30:15문제)

뒤로 갈수록 문제의 수가 많아진다.

문제의 수에 따라 스테이지의 제한 시간이 정해진다.


한 스테이지를 반복 플레이를 할 때, 같은 문제가 나오면 재미없을 것 같으니,

5문제라면 10개 혹은 15개를 내고, 그 안에서 랜덤으로 5문제가 나오도록 하는 게

좋을 것 같다. 문제는 출제되어야 하는 문제의 3배의 문제를 준다.


예) 문제는 미리 내놓는다.

한 스테이지에 필요한 문제는 제출수 * 3 (3배의 문제를 준비해놓는다)

한 문제당 주어지는 시간은 10초로 한다.

문제는 한 자릿수만 등장한다.

스테이지는 모두 30개를 만든다.


문제를 제출하려면 문제를 위한 데이터 테이블(DataTable)을 만들어야 한다.


<시스템과 데이터>


게임을 위한 규칙에는 두가지 성격의 규칙이 있다.

1. 게임 진행과정에서 변하지 않는 규칙

-> 덧셈의 규칙 같은 것들

무엇을 어떻게 처리할지를 정의하는 것이 시스템이다.

시스템을 만들기 위해서는 여러 상황에서 판정하는

규칙들을 명확하게 정의해야 한다.


퀘스트의 액션으로, 플레이어 캐릭터는 다음과 같은 행동을 할 수 있다.

[장작을 들고 이동할 수 있다]


개념에 대한 설명은 이렇게 쓸 수 있으나 이것을 시스템으로 만들기 위해서는

좀 더 긴 설명이 필요하다.


필드에 장작이 배치된다 - 장작은 [ObjectData]로 정의하고, 배치는[ObjectSpawnData]에서 위치를 지정한다.

플레이어 캐릭터가 장작 가까이 가면, 장작을 들 수 있는 조작 키가 활성화된다.

장작 가까이 - 장작을 중심으로 3m 이내로 접근하면 조작 키가 활성화된다.

조작 키를 선택해서 장작을 들면, 플레이어 캐릭터는 장작을 들고 있는 동작의 애니메이션을 한다.

장작을 들고 있을 때에는 일반 이동의 1/3 속도로 이동할 수 있다.

장작을 들고 있는 중에 공격을 받으면, 장작을 떨어뜨리고 전투 상태가 된다.

떨어진 장작은 사라진다 - 전투가 끝나고 다시 처음의 위치로 가서 장작을 들어야 한다.


막연한 개념들을 정확하게 표현해서 기준을 정해야 한다.

가까이 간다는 것이 아니라 2m라고 거리를 명시하고, 그 상황에서 일어날 수 있는 모든사건,

상황들에 대해서 어떻게 반응할 것인지를 정해야 한다.

일차적으로 개념을 정리했다면, 그 개념을 어떻게 판단하고 적용할 것인지를 정리하는 것이다.


이런 변하지 않는 규칙이 있다면, 가변적인 재료들도 있다.

가까이 - 3m 이내로 접근하면 조작 키가 활성화된다고 생각해본다.

장작과 같은 것이 여러 종류가 필요하다면 큰 틀을 만드는게 좋다.

가까이 가면 - 3m 이내로 접근하면 조작 키가 활성화되고, 조작 키를 

선택하면 정해진 액션을 취하는 것이 큰 틀이고 공통적인 규칙이라고 할 수 있다.


이런 규칙 안에서 장작에 가까이 가면 장작을 들고 이동해서

모닥불을 피울 수 있고, 우물 가까이 가면 물을 뜰 수 있거나,

석상 가까이 가면 석상을 밀어버릴 수 있다.

이런 것을 오브젝트라고 정의하고 세부적인 내용을

오브젝트 데이터(Object Data)로 입력하는게 좋다.


오브젝트 데이터에는 장작, 우물, 석상 등이 있을 수 있다.

장작은 장작을 들고 이동하고, 장작은 놓으면 사라지고,

물은 놓으면 물을 마실 수 있고, 석상은 놓으면 

원거리 공격을 할 수 있다.

큰 규칙을 만들어놓고 세부적인 내용을

데이터로 입력할 수 있도록 하면 쉽게 새로운 것을 추가하거나

기존의 내용을 수정할 수 있다.

주로 디자이너들이 사용하는 데이터라고 해서 

디자인 데이터(Design Data)라고 부르기도 한다.

모든 시스템이 그러지는 않지만 많은 시스템들이 필요한 데이터들이 있다.


전투시스템은 캐릭터의 능력치와 몬스터의 능력치를 비교해서

누가 이길지를 결정한다.

능력치를 기반으로 상대에게 얼만큼의 데미지를 줄 것인지를 전투 공식으로 만든다.

전투 공식은 가변적이지 않고 누구와 전투를 하든 항상 같은 방법으로 판정한다.

하지만 캐릭터의 능력치와 몬스터의 능력치는 상대에 따라 다르다.

몬스터는 해골병사와 고블린 전사가 서로 다른 능력치를 갖고 있다.

또는 같은 해골 종류일 수도 있고, 능력치가 다른 몬스터가 여러 종류일 수도 있다.

몬스터들은 데이터로 각 몬스터들의 스탯을 정의한다.

몬스터 데이터를 전투 공식에 대입해서 캐릭터가 이길지, 몬스터가 이길지를 판단한다.


캐릭터 시스템은 몬스터와는 조금 다르다.

몬스터는 데이터들이 고정되어 있지만 캐릭터의 기본 능력치는 정해져 있어도

성장하면서 조금씩 변할 수 있어서 ' 기본 ' 캐릭터의 능력치가 필요한 것이 아니라

'현재' 캐릭터의 능력치가 필요하다.


시스템의 논리적인 구조를 만들고, 프로그래밍으로 시스템을 구현하면

필요한 데이터를 입력해서 게임을 플레이할 수 있게 만든다.

여기에서 시스템의 구조를 만들고 데이터를 입력하는 것은 디자이너의 역할이며,

게임의 최종 모습은 디자이너의 손에서 결정된다.


[게임 개발 순서]

시스템 디자인 -> 시스템 구현(Programming)->데이터 입력->게임 플레이


<연습>


아주 간단한 게임을 하나 선택한다.

1978년에 나온 스페이스 인베이더나, 1985년에 나온 슈퍼 마리오 브라더스같은

게임을 예로 들어본다.


선택한 게임의 구성요소들을 적는다

[스페이스 인베이더]

- 플레이어가 조작하는 우주선이 있다

- 이 우주선은 횡으로만 이동 가능하다

- 공격해서 제거해야 하는 외계인들이 있다

- 외계인들은 처음에 등장할 때, 행과 열을 맞춰서 시작하며,

한 칸씩 옆으로 이동하면서 아래로 내려온다

- 간헐적으로 비행선이 제일 위에 지나간다

- 비행선은 언제 공격당하느냐에 따라 점수가 다르다

- 우주선과 외계인 사이에는 장애물이 있다

- 장애물은 외계인의 공격도, 우주선의 공격도 모두 맞으며

맞을때마다 파괴된다


게임의 구성요소들과 그것들이 무엇을 해야하는지를 정리하고

이걸 어떻게 만들어야 할지를 정리한다.

우주선의 시작 위치를 어떻게 지정하고, 외계인들의 배열은 어떻게 지정하고

플레이 영역은 어떻게 제한할 수 있을지를 고민한다.


'우주선이 왼편 모서리에 나타나서 오른편으로 갔으면 좋겠어.'라고 말하면

프로그래머가 게임을 완성해주는 것이 아니다.

우주선의 시작위치를 데이터로 입력할 수 있게 만들어주면 다양한 데이터를 넣어보고

최적의 위치를 찾아서 결정하는 것은 게임 디자이너의 몫이다.

어떤 데이터를 입력해야 하고 입력한 데이터가 어떻게 동작해야하는지 생각해본다.


예시로 든 게임들이 너무 간단하다면 좀 더 복잡한 게임으로 할 수도 있다.

게임의 구성요소들을 모두 나열해서 각 요소들의 시스템적 정의를 내린다.

각 시스템들의 동작원리를 설명하고 필요한 데이터를 목록화한다.

어떤 시스템들은 같은 데이터를 사용할 것이다.

어떤 시스템에서 해당 데이터를 입력하게 할 것인지를 정리한다.

열쇠로 열리는 문을 만든다면, 열쇠는 자신이 어떤 문을 열 수 있는지 알고 있어야 할 것이고,

문은 어떤 열쇠가 자신에게 맞는지 알아야 할 것이다.

열쇠가 문의 정보를 갖고 있고, 문이 열쇠의 정보를 갖고 있다면 이것은 서로 중복된다.

이 경우는 문이나 열쇠 둘 중 하나만 정보를 갖게 한다.

시스템에 대한 설명은 가능한 객관적이고 명확한 언어로 표현한다.



<정리>

* 시스템은 게임의 동작 원리를 규정하는 것이다.


* 시스템을 만들 때에는 기준이 명확해야 한다.


* 만들 게임의 모습을 구체적으로 상상해서 논리적인 기준을 잡는다.


* 숫자에 익숙해져라.


* 디자이너가 원하는 값을 쉽게 적용할 수 있도록 데이터 테이블을 만든다.


* 비슷한 성격을 가진 데이터끼리 묶어서 데이터 구조를 만든다.


* 하나의 데이터는 한곳에서 입력하도록 한다.


* 시스템들 간의 연계성도 고려한다.


'게임 기획서 > 문서 작성' 카테고리의 다른 글

마무리  (0) 2019.04.29
레벨 디자인  (0) 2019.04.29
게임 구조 설계  (0) 2019.04.29
게임 아트  (0) 2019.04.29
프로토타입  (0) 2019.04.29
: