내일배움캠프 7주차 4일차 TIL - 기능 구상

백흰범·2024년 5월 30일
1

오늘 한 일

  • 챌린지반 과제 풀이
  • 개인 프로젝트 진행 후 제출

작성 중...
이번 TIL은 필자의 생각이 많이 들어있습니다.


기능 구상

기능 구상에 관하여

이 과정은 게임의 기획보다는 좀 더 세부적으로 들어가보는 과정이 담겨져있다.

기능을 구상하게 되는 과정

구상 단계

1. 필요성

2. 흐름 파악

3. 명시화


적용 단계

4. 적용

5. 개선 및 프레임워크 반영



1. 필요성

기능을 구상하기 앞서 사실 그 기능이 필요해야 구상을 하게되지 않을까 생각한다, 설령 지금 당장이 아니더라도 추후에 쓰이게될 것 같은 경우에도 마찬가지다. 물론 필요성이라는 것도 개인의 주관에 따라서 달라지니 팀 프로젝트를 하고 있다면 회의를 통해 필요성을 도출하고 결정해줘야할 필요가 있다.


필요성에서 따져야할 3가지

  • 방향성 -> 지금 개발하는 게임의 방향성에 맞는가?
  • 범용성 -> 여러 게임에 전반적으로 자주 쓰이는 기능인가?
  • 독자성 -> 타 게임들과는 차별성을 가지는가?

방향성

지금 개발하는 게임의 방향성에 맞는가?

마인크래프트


슬레이더 스파이어

두 가지 게임의 아이템 보관법에 대해서 가지고 와보았다. 하나는 필요한 템을 자기가 원하는 대로 넣고, 필요 없으면 템을 버릴 수 있는 (개방적인 인벤토리)이고, 다른 하나는 원하는 아이템만 가지고 오거나 버릴 수 없다. (폐쇄적인 인벤토리) 이렇게 둘이 똑같은 인벤토리임에도 불구하고 서로 다른 기능을 가지게 되는 이유는 게임의 방향성에 있을 것이다. 게임의 방향성에 따라 자유도에 맞춰서 인벤토리를 자유롭게 건들 수 있게 하느냐. 아니면 게임의 난이도 조절과 컨셉에 맞게 인벤토리를 폐쇄적으로 만드느냐는 우리가 개발하고자 하는 게임의 방향성에 따라서 달라지게 될 것이다.



범용성

여러 게임에서 전반적으로 자주 쓰이는 기능인가?

돈스타브


스타듀밸리


타르코프


인벤토리라는 기능이 주로 사용되는 게임들은 아이템이 있고 그 아이템들을 통해서 살아가거나 수익을 내거나와 같이 생존과 자원 관리의 특징을 가진 게임에서 자주 쓰일 것이다. 물론 인벤토리를 생략해도 해당 게임의 특징이 사리지지는 않지만 없으면 많이 아쉬운 느낌이 들 수도 있다.



독자성

기존에 있던 게임들과는 다른 특별한 특징을 가지는가?

백팩 히어로

위 이미지에 대해 설명해주자면 위의 인벤토리가 특별한 이유가 아이템을 단순히 한 칸씩 담는 게 아니라 아이템의 모양에 따라서 차지하는 공간이 다르다. 이 뿐만 아니라 배치된 위치에 따라서 아이템들끼리 서로 버프나 디버프롤 주고받게 되어서 인벤토리 정리에 매우 많은 신경을 써줘야한다. (인벤토리의 공간을 기존과 다르게 더욱 능동적으로 활용했다.)



2. 흐름 파악

그렇다면 그 기능이 필요하다는 게 확실시 된다면, 이제 그 기능의 대략적인 구상을 해볼 차례이다.


데이터 흐름 파악하기

데이터 흐름을 파악하는 것이 제일 먼저 중요하다.
예시로 인벤토리의 데이터 흐름을 생각해보자


기능의 기초적인 흐름 파악

  1. 템을 줍는다 -> 2. 주운 템을 보관한다 -> 3. 보관한 템을 사용한다 -> 4. 사용한 템을 처리한다.

사실 그냥 단순하게 내가 가방을 가지고 있다고 생각하고 내가 그걸 어떻게 흘러가는지를 생각해보면 된다. (설령 가방이 아니더라도 뭔가를 보관하고 들고 다닐 수 있는 거면 죄다 인벤토리라고 파악해도 된다. 추상화)
이렇게 생각하는 과정이 단순해 보일 순 있지만, 사실 이렇게 과정을 잘 나눠줘야 그 다음 과정을 넘어갈 수 있다.


흐름의 구체화 1 (육하원칙)

1. 템을 줍는다
누가: 플레이어 | 언제: 원할 때 | 어디서: 템이 있는 자리
무엇을: 떨어진 템 | 어떻게: RayCast로 감지해서 특정 입력으로 | 왜: 필요/호기심
2. 주운 템을 보관하다
누가: 인벤토리 | 언제: 플레이어가 템을 주울 때 | 어디서: 인벤토리 역할 오브젝트 or 스크립트에
무엇을: 주운 템을 | 어떻게: 배열, 리스트, Prefab들을 활용해서 | 왜: 나중에 사용하기 위해
3. 보관한 템을 사용하다
누가: 플레이어 | 언제: 원할 때 | 어디서: 필요한 장소에서
무엇을: 필요한 템 | 어떻게: 템을 선택 후 키 또는 마우스 입력 등 | 왜: 필요/호기심
4. 사용한 템을 처리한다
누가: 인벤토리/템 | 언제: 템이 사용됐을 때 | 어디서: 인벤토리에서
무엇을: 사용된 템 | 어떻게: 템의 특징에 따라서 처리(장착, 소모 등) | 왜: 게임의 방향성

아니면 아래와 같은 구상도 가능하다.


흐름의 구체화 2 (필요성)

1. 템을 줍는다
-> 템의 정보
-> 템을 감지하고 가져오는 기능
-> 주워진 템은 사라져야 한다.

2. 주운 템을 보관한다
-> 템을 담을 공간
-> 템을 담는 방식(단일, 스택 및 아이템 배치 위치, 순서 등등)
-> 가지고 있는 템을 출력

3. 보관한 템을 사용한다
-> 사용하고자하는 템의 참조값(주소값),
-> 사용을 위한 입력 방법 (클릭, 키 입력, 버튼 등)

4. 사용한 템을 처리한다
-> 사용한 템의 타입 (장착, 소모품)
-> 사용한 아이템의 타입에 따라 처리해줄 메서드
-> 사용 후 갯수를 감소하거나 템 칸 정리


심지어 위와 같은 구상 과정도 필수적인 부분이라 추가적인 기능을 생각해본다면..
아이템 정리 - 정렬, 버리기, 유저의 직접적인 정리(드래그 앤 드롭)
핫 키 - 버튼 하나만으로 들고 있는 템을 바꾸거나, 소모품을 바로 소비

그리고 추가적으로 게임의 방향성에 따라서 인벤토리의 UI와 가지게 되는 기능도 다양하게 달라질 수 있다.



3. 명시화

데이터의 흐름이 어느 정도 구체화되었다면 이제는 시각화해볼 차례이다.


시각화를 위한 다양한 방법

  • FlowChart
  • UML
  • ERD
  • 그 외의 여러가지 방법


FlowChart

  • 플로우 차트는 순서도 또는 흐름도라고도 불리며 ,어떠한 일을 처리하는 과정을 순서대로 간단한 기호와 도형으로 도식화한 것을 의미한다.

간단한 플로우차트

플로우차트 사용 규칙

플로우 차트를 작성할 때 사용 규칙은 이와 같다.
1 기호의 내부에는 처리할 내용이 들어가야한다.
2 순서는 위에서 아래로, 왼쪽에서 오른쪽을 원칙으로 하며 그 외의 경우는 화살표로 사용해야 한다.
3 흐름선은 서로 교차해도 무관하며 서로 영향을 주지 않는다.
4 흐름선 여러 개가 모여 하나로 합칠 수 있다.
5 기호의 모형은 가로, 세로의 비율은 정하지 않으나 잘 구분할 수 있어야한다.

플로우차트 일반적 기호


인벤토리 기능을 플로우 차트로 나타내보기

... 추후에 작성 바람...



UML

UML 다이어그램은 Unified Modeling Language(통합 모델링 언어)를 사용하여 시스템과 소프트웨어를 시각화하는 방법입니다.
복잡한 소프트웨어 시스템의 설계, 아키텍처 등을 이해하기 위해 UML 다이어그램을 작성합니다.

UML 예시

1. 클래스만 표현

  • 스파르타 코딩 클럽 자료입니다.

2. 필드와 메서드까지 표현


  • 화살표의 방향은 주로 해당 클래스가 대상의 데이터에 접근하게 될 때 표시해준다.
  • 필드와 메서드를 명시하게 될 경우 쓰일 것 같은 필드와 메서드를 잘 구상해줘야한다.
  • ERD도 UML과 비슷한 계열이지만, 데이터의 상호작용을 좀 더 세세하게 표현한 다이어그램이다.

UML을 활용하여 인벤토리 기능 구상해보기

... 추후에 작성 바람 ...



참고 자료

FlowChart

UML




작성하면서 느낀점

역시 뭔가 뚜렷한 기능이나 디자인 패턴에 관한 TIL 작성은 쉬운 편에 속하지만 추상적인 개념들(구상이나, 정의되어있지 않은 지식)에 대해서는 확실히 TIL 작성에 길을 헤매이게 되는 느낌이 많이 든다.

profile
게임 개발 꿈나무

0개의 댓글