본문 바로가기
대학생활/수업

게임데이터설계 14주차 - 상점 시스템과 게임 데이터

by se.jeon 2023. 6. 14.
728x90
반응형

데이터 값 사용 활용 팁

함수를 사용하더라도 값이 달라지는 함수는 사용해서는 안 된다.

- 일반적인 수학 함수들은 모두 사용이 가능하다. (ex : Sum, Count, If, Average, Match, Index 등)

- 새로고침 시 값이 바뀌는 함수들은 사용하지 않는 것이 좋다. (Rand, Randbetween)

계산식을 사용해도 변환 시에는 값으로 변환된다.

 

데이터를 엑셀 다루듯 셀을 병합하면 절대 안 된다.
데이터는 엑셀 형태를 가질 뿐, xls이 아니다.

병합한 데이터를 클릭해서 확인 해 보면, 맨 왼쪽 위의 칸의 데이터가 지목되는 것을 알 수 있다.

실제로는 병합은 맨 왼쪽 위의 데이터만 남고 전부 사라지는 것이다.

Json과 CSV로 변환할 때, 병합되어 있는 셀은 첫 값을 제외하고 전부 ""(공백)으로 인식된다.

 

컬럼에 동일한 포맷의 값을 사용한다.

데이터를 만드는 이유는 통일성을 위해서이다.

구조가 케이스 바이 케이스가 되면 안 된다. 프로그래머에게도 불편하고, 안정성도 떨어진다.

(ex : 1, 2, 4/ 1/ 2, 6 > 1, 2, 4/ 1, 0, 0/ 2, 6, 0)

 

프로그래머와 협의만 된다면 개수를 미리 지정하고 사용 할 수는 있겠지만, 일반적인 구조는 아니다.

하나의 컬럼에는 하나의 정보만을 담는 것이 올바른 방식.

 

CSV, JSON에서 콤마를 찍으면 String 값으로 자동 변환 시킨다.

XML은 자릿점으로 인식되면 숫자 단위로 인식하여 콤마가 사라지기도 한다. (그렇지 않은 경우 문자열로 인식됨)

하지만, 프로그래머가 처리할 때 이러한 데이터 형태는 문제가 생기기 쉽기 때문에 주의해야 한다.

 

BM (Business Model)

게임 내에서의 BM : 게임 콘텐츠 내의 각종 '가치'들에서 어떻게 돈을 벌 것인가?

잘하면 돈 많이 번다. 현업에서는 매우 중요한, 잘하면 회사에서 모셔 갈 정도로 중요도가 높은 파트.

돈을 버는 게임을 만들 것인지. 재미있는 게임을 만들 것인지.

 

L-라이크 게임 : 돈 버는 게임은 재미없다는 인식

두개는 왜 공존하기가 어려운 것일까.

 

유저의 니즈를 잘 알수록 BM 설계에 유리하다.

- 가챠 BM 설계시, 로또를 왜 사는지 생각 해 보자 : '새 인생'이라는 가치가 부여된 '절대 가치'를 말도 안 되는 푼돈에 노려 볼 수 있기 때문이다.

- 모객 비용과 F2P(부분유료화)의 가치 교환 : 기획자의 BM 설계는 '무형의 가치'를 인식하는 것부터 시작한다.

 

우리는 어떻게 유저에게 가치를 제공할 수 있을까?

1. PvP 게임이라면

  - 컨트롤보다 능력치가 중요한 게임에서 능력치를 파는 행위는 자살행위이다.

  - 하지만... 컨트롤이 중요해서 BM 능력치 효용이 안 느껴지는 것도 문제이다.

2. PvE 게임이라면

  - PvE 게임에서의 성장 BM은 유저가 조금 더 너그럽게 봐주는 경향이 있다.

  - 하지만... 결제 없이는 게임을 할 수 없다는 인식이 생기면 문제가 된다.

 

돈을 잘 벌고 싶지만, 유저들의 반응은 무섭다.

특히 북미 서비스에서는 매우 치명적.

살만한 가치가 있는 것이라면 살 수 있다.

 

상점의 구조를 잡기 위해 상점 시스템 사례와 기획 요구사항을 생각 해 본다.

- 상점의 원하는 위치(탭이나 이벤트 팝업창 등)에서 아이템을 판매할 수 있다.

- 판매 아이템의 판매 방식(수량제, 기간제)과 판매 수량을 세팅 할 수 있다.

- 판매 아이템의 판매 방식과 판매 수량에 따라 개별로 가격을 세팅 할 수 있다.

- 구매한 수량제 아이템은 하나의 무더기로 스택되어 관리된다.

- 구매한 기간제 아이템은 스택되지 않고 개별로 관리된다.

- 판매 아이템에 다양한 구매 조건이나 구매 제한을 걸 수 있다.

- 상점에 진열되는 아이템의 순서를 마음대로 지정할 수 있다.

 

상점의 원하는 위치(탭이나 이벤트 팝업창 등)에서 아이템을 판매할 수 있도록 하고 싶다면?

1. 탭이 어떤 아이템을 팔아야 할 지 알고 있다.

    - 탭에 아이템을 배치하는 방식 사용

    - 아이템을 판매하기 위한 테이블을 만들고, 판매 테이블의 Code와 아이템의 Code를 연결해주는 방식을 사용한다.

2. 아이템이 어떤 탭에서 팔려야 할 지 알고 있다.

    - 아이템이 판매 위치를 아는 방식 사용

    - 해당 아이템이 어떤 탭에서 팔려야 할지를 알 수 있는 컬럼을 추가하여 별도 연결 없이 사용하는 방식을 사용한다.

1번 방식이 현업에서 대체로 더 많이 사용되는 방식이다.

 

아이템을 배치하기 위한 '카테고리' 및 '탭'

카테고리가 탭을 가지고 있는 구조.

 

실습 진행

콤포넌트 아이템 제작 + 범주에 포함되는 아이템 5개씩 제작.

- 무기 : 근거리, 원거리

- 방어구 : 물리 방어, 마법 방어

- 탈것 : 이동용, 전투용

- 포션류 : 회복용, 전투용

4개의 카테고리와 2개의 하위 탭을 만든다고 했을 때,

'카테고리'와 '탭'의 관계에 대해 생각 해 보면 카테고리가 여러 개의 탭을 가질 수 있는 "종속 구조"임을 알 수 있다.

 

여러 가지 1개로 묶을 때 어떻게 해야 할까?

비트 연산(한 컬럼에 2개 이상의 값을 탐을 수 있는 방법)도 '종속 구조'이다.

세트 아이템의 데이터를 생각하며 카테고리에 탭을 묶어준다.

카테고리는 탭을 가지고, 탭은 아이템을 가지도록 제작한다.

 

포션 10개를 3개 사고, 포션 100개를 1개 사면 총 포션은 몇 개인가?

130개로 추측 할 수 있지만, 실제로는 그렇지 않다.

아이템 타입이 다르면 다른 것으로 취급되기 때문.

실제로는 포션 10개 아이템 3개, 포션 100개 아이템 1개를 가지고 있는 것이다.

 

이러한 상황을 해결하기 위해 Product_Code를 따로 지정 해 주기도 한다.

 

 

MMORPG의 NPC 상점은 어떻게 되어 있을까?

Category > Tab > Item에서 NPC > Tab(생략 될 수도 있음) > Item으로 바뀔 뿐이다.

 

다양한 재화로 모두 구매 가능하도록 아이템의 가격을 설정 해 보자.

- Gold (게임 재화)

- Cash (유료재화)

- FriendsPoint (우정포인트)

 

판매 위치에 따라서 같은 아이템이라도 가격이 달라져야 하는 경우가 있다면?

- A탭 : 크리스탈 5

- B탭 : 골드 1,000

- C탭 : 우정 포인트 500

 

가격 설정의 가변성 여부가 중요한 이유는 구조가 달라질 수 있기 때문이다.

- Item_Master

- Shop_Tab_Master

가격 설정 관련 컬럼 (재화의 종류, 필요량)

 

포션을 5개 얻고, 다시 10개를 얻었다면?

인벤토리에서 아이템을 스택하려고 할 때 어떻게 동일한 아이템인지 알 수 있을까?

 

아이템 상품을 수량제, 기간제에 따라 구성 해 보자.

 

상점에 장비 아이템 '미리보기' 기능이 있고, 의상의 범위가 다양한 게임에서 바지를 만든다면

바지라는 공통점을 가지더라도 바지의 범주는 다양하게 될 것이다.

바지라는 Item_Main_Type의 값은 같지만, 영역이 다른 아이템이 발생할 수 있다.

바지만의 문제라면 괜찮겠지만, 복잡도를 늘리게 되면 충돌하는 범주가 생기게 된다. (ex : 나팔바지 + 롱부츠)

 

이러한 상황이 발생하면 대체로 4가지 방법 중 하나를 선택하여 사용한다.

1. 부츠를 바지 안에 넣어주는 방식. (부츠가 여러 종류)

2. 부츠를 바지 위에 씌워주는 방식. (바지가 여러 종류)

3. 두 개를 같이 입지 못 하게 하는 방식. (제한의 부여)

4. 둘 다 허용하는 방식. (여러 예외상황 발생 가능)

 

각 부위를 채널링하고, 채널에 대한 비트연산 처리를 통해서 아이템이 중복되지 않도록 해 보자.

충돌할 때 어떠한 리소스가 어떻게 바뀌어야 하는지를 지정한다.

- 머리, 얼굴 상, 얼굴 하, 가슴, 배, 골반, 왼상박, 오른상박, 왼하박, 오른하박, 왼손, 오른손, 왼허벅지, 오른허벅지, 왼종아리, 오른종아리, 왼발, 오른발 ...

 

이러한 처리를 위해 비트연산을 많이 사용한다.

머리(1), 얼굴 상(2), 얼굴 하(4), 가슴(8)...

 

아이템 구매 제한을 걸게 된다면?

- A탭 : 크리스탈 5, 구매 제한 없음

- B탭 : 골드 1,000, 1주일에 3개 구매 제한

- C탭 : 우정 포인트 500, 1일 1개 구매 제한

레벨 수치, 클래스 종류, 아이템 보유 여부, 길드 가입 여부, 퀘스트 클리어 여부 등 다양한 구매 제한 조건을 걸 수 있다.

 

상점에서 원하는 대로 아이템을 배치 해 보자.

상점 기능으로 소팅 기능과 필터링 기능을 제공하는 게임들이 많다.

- 필수품을 앞으로 둘 것인가?

- 신상품을 앞으로 둘 것인가?

- 인기 상품을 앞으로 둘 것인가?

어떤 것을 앞으로 둘 것인지에 대한 명시가 필요하다.

 

일반적으로 소팅에는 우선순위 법칙이 있지만, 상점의 경우 법칙보다 중요한 소트 오더가 필요하다.

- 소트 오더 : 소트오더 값이 낮은 아이템을 우선적으로 배치한다.

- 아이템 등급 : 아이템 등급이 높은 아이템들을 우선적으로 배치한다.

- 아이템 코드 : 아이템 코드가 높은 아이템들을 우선적으로 배치한다.

 

랜덤으로 리스트를 뽑은 후 선택적으로 구매할 수 있는 상점

- League of Legends : 나만의 상점

 

상점의 UI 공간을 자유롭게 변경할 수 있는 UI 시스템(그리드)을 만든다면?

- 듀랑고 : 상점

- Fortnite : 상점

UI 공간도 데이터로 관리 할 수 있다.

 

NPC와의 친밀도를 통해서 판매 아이템의 질이 좋아지는 시스템이 있다면?

- 검은사막 : 친밀도

 

실습 진행

NPC 호감도 퀘스트를 통해 호감도를 얻을 수 있고, 호감도 레벨에 따라서 혜택을 받는 시스템.

728x90
반응형