[NDC 14] 가죽 장화를 먹게 해달라니 - 의 자유도 높은 아이템 시스템 구현

59
최호영 왓 스튜디오 / 넥슨코리아 가죽 장화를 먹게 해달라니 <야생의 땅: 듀랑고>의 자유도 높은 아이템 시스템 구현

description

 

Transcript of [NDC 14] 가죽 장화를 먹게 해달라니 - 의 자유도 높은 아이템 시스템 구현

Page 1: [NDC 14] 가죽 장화를 먹게 해달라니 - 의 자유도 높은 아이템 시스템 구현

최호영 왓 스튜디오 / 넥슨코리아

가죽 장화를 먹게 해달라니 <야생의 땅: 듀랑고>의 자유도 높은 아이템 시스템 구현

Page 2: [NDC 14] 가죽 장화를 먹게 해달라니 - 의 자유도 높은 아이템 시스템 구현

저작물 인용

저작권법 제 35조의 3 ‘공정이용’조항 에 따라

교육과 연구 목적으로 이용하고 있습니다.

강연에만 사용되며, 배포판에선 일부 제외될 수 있습니다.

Page 3: [NDC 14] 가죽 장화를 먹게 해달라니 - 의 자유도 높은 아이템 시스템 구현
Page 4: [NDC 14] 가죽 장화를 먹게 해달라니 - 의 자유도 높은 아이템 시스템 구현

아이템 게임 컨텐츠의 기본 블럭

Page 5: [NDC 14] 가죽 장화를 먹게 해달라니 - 의 자유도 높은 아이템 시스템 구현

흔한 아이템부터 시작해 볼까요

Page 6: [NDC 14] 가죽 장화를 먹게 해달라니 - 의 자유도 높은 아이템 시스템 구현
Page 7: [NDC 14] 가죽 장화를 먹게 해달라니 - 의 자유도 높은 아이템 시스템 구현

용도는 사용자가 결정한다

Page 8: [NDC 14] 가죽 장화를 먹게 해달라니 - 의 자유도 높은 아이템 시스템 구현

용도는 개발자가 결정한다 일반적인 게임에서는

Page 9: [NDC 14] 가죽 장화를 먹게 해달라니 - 의 자유도 높은 아이템 시스템 구현

의도에 벗어나는 정보는 독 복잡한 시스템과 정보는 게이머와 디자이너

프로그래머까지 혼란에 빠뜨린다.

Page 10: [NDC 14] 가죽 장화를 먹게 해달라니 - 의 자유도 높은 아이템 시스템 구현

일반적으로는 디자이너도 지나치게 복잡한 시스템은 만들어 달라고

하지 않는다.

Page 11: [NDC 14] 가죽 장화를 먹게 해달라니 - 의 자유도 높은 아이템 시스템 구현
Page 12: [NDC 14] 가죽 장화를 먹게 해달라니 - 의 자유도 높은 아이템 시스템 구현

가죽 장화를 먹게 해주세요 왜죠?

Page 13: [NDC 14] 가죽 장화를 먹게 해달라니 - 의 자유도 높은 아이템 시스템 구현
Page 14: [NDC 14] 가죽 장화를 먹게 해달라니 - 의 자유도 높은 아이템 시스템 구현

위 세션들에 따르자면 자유도와 창발성이 중요하답니다

Page 15: [NDC 14] 가죽 장화를 먹게 해달라니 - 의 자유도 높은 아이템 시스템 구현

그래서, 그게 가죽 장화 먹는 거랑 무슨 상관이 있는데요?

Page 16: [NDC 14] 가죽 장화를 먹게 해달라니 - 의 자유도 높은 아이템 시스템 구현

가죽 장화란?

대표적인 기호품

가죽: 동물의 껍질

장화: 목이 길게 올라오는 신. 가죽이나 고무로 만드는데 비가 올 때나 말을 탈 때에 신는다.

Page 17: [NDC 14] 가죽 장화를 먹게 해달라니 - 의 자유도 높은 아이템 시스템 구현

가죽 칼로리

장화 먹기 싫음 가죽 장화 가죽 장화 가죽탕

먹을 수 있음 자유도

창발성

Page 18: [NDC 14] 가죽 장화를 먹게 해달라니 - 의 자유도 높은 아이템 시스템 구현

가죽 장화를 먹게 해주세요 아이템 시스템의 자유도와 창발성을 상징

Page 19: [NDC 14] 가죽 장화를 먹게 해달라니 - 의 자유도 높은 아이템 시스템 구현

다시, 가죽 장화란? 가죽

장화

따뜻함 질김 칼로리

발에 신는 것 방어도

속성: Attribute

특성: Tag

Page 20: [NDC 14] 가죽 장화를 먹게 해달라니 - 의 자유도 높은 아이템 시스템 구현

아이템 = 특성의 조합

Page 21: [NDC 14] 가죽 장화를 먹게 해달라니 - 의 자유도 높은 아이템 시스템 구현

아이템의 생성

기존의 방식은 안 된다

재료의 특성을 유지

랜덤성도 있도록

Page 22: [NDC 14] 가죽 장화를 먹게 해달라니 - 의 자유도 높은 아이템 시스템 구현

같지만 다르다 같은 종류의 특성

비슷한 속성 값

하지만 다르다

Page 23: [NDC 14] 가죽 장화를 먹게 해달라니 - 의 자유도 높은 아이템 시스템 구현

돌연변이 예상치 못한 특성

진짜 돌연변이를 말하는 것은 아니다

계산된 돌연변이

Page 24: [NDC 14] 가죽 장화를 먹게 해달라니 - 의 자유도 높은 아이템 시스템 구현

채집 무에서 유를 창조하는 시스템

제작 속성을 변형, 조합 하는 것

아이템은 어떻게 생성될까?

Page 25: [NDC 14] 가죽 장화를 먹게 해달라니 - 의 자유도 높은 아이템 시스템 구현

소스

특성 1

특성 2 레시피

결과

특성 3

특성 4

채집 대상, 아이템

채집, 제작, 건설 아이템, 건축물

Page 26: [NDC 14] 가죽 장화를 먹게 해달라니 - 의 자유도 높은 아이템 시스템 구현

레시피를 어떻게 하지? 에이 몰라, 일단 스크립트로 해보자

근데 레시피가 너무 case by case 네…

Page 27: [NDC 14] 가죽 장화를 먹게 해달라니 - 의 자유도 높은 아이템 시스템 구현

프로토타입 Prototype Z5

Page 28: [NDC 14] 가죽 장화를 먹게 해달라니 - 의 자유도 높은 아이템 시스템 구현

태그 통나무 특성: 탈 수 있는 깎을 수 있는 속성: 건조 정도 두께 단단함 무게

탈 수 있는 관심 속성: 건조 정도 두께

깎을 수 있는 관심 속성: 두께 단단함

Page 29: [NDC 14] 가죽 장화를 먹게 해달라니 - 의 자유도 높은 아이템 시스템 구현

소나무 소나무 가지 소나무 뿌리 소나무 통나무 송진

function(bough, materials, tool){ var bough_origin = materials.wood[0]; bough.attributes.weight = bough_origin.attributes.weight+(Math.random()*0.2); bough.attributes.durationtime = bough_origin.attributes.durationtime; bough.attributes.elasticity = (Math.floor(Math.random()*4)+ bough_origin.attributes.elasticity)*0.9; bough.attributes.solidity = (Math.floor(Math.random()*2) + bough_origin.attributes.solidity *0.9); bough.attributes.thickness = bough_origin.attributes.thickness/2; bough.attributes.dryness = bough_origin.attributes.dryness; bough.attributes.length = Math.floor(Math.random()*3) + 2; bough.attributes.grip = bough_origin.attributes.grip; bough.attributes.sharpness = bough_origin.attributes.sharpness; bough.material = [bough_origin.material]; bough.label = '나뭇가지'; bough.tags = [ 'flammable', 'stick', 'blunt', 'carveable' ]

소나무 가지 생산기 채집 도구: 칼 레시피: 나뭇가지 재질: 소나무

소나무 가지 특성: 탈 수 있는, 둔기, 막대기, 깎을 수 있는 속성: 길이, 유연함 등 재질: 소나무

채집

Page 30: [NDC 14] 가죽 장화를 먹게 해달라니 - 의 자유도 높은 아이템 시스템 구현

제작 소나무 가지 특성: 탈 수 있는, 둔기, 막대기, 깎을 수 있는 속성: 길이, 유연함 등 재질: 소나무

돌날 특성: 날카로운, 날 속성: 날카로움, 단단함 재질: 돌

도끼 레시피 막대기 날 묶을 수 있는

도끼 특성: 도끼, 둔기, 막대기 속성: 유연성, 단단함, 길이, 날카로움, 손에 들 수 있음 재질: 돌, 소나무

Page 31: [NDC 14] 가죽 장화를 먹게 해달라니 - 의 자유도 높은 아이템 시스템 구현

제작 스크립트 function(axe, materials, tool){ var 도끼날 = materials.도끼날.속성 var 막대기 = materials.막대기.속성 axe.속성.날카로움 = 도끼날.날카로움 axe.속성.공격력 = (도끼날.날카로움 + 도끼날.무게) * 막대기.길이 axe.재질 = [materials.도끼날.재질, materials.막대기.재질] axe.tags = [도끼, 둔기, 막대기] }

Page 32: [NDC 14] 가죽 장화를 먹게 해달라니 - 의 자유도 높은 아이템 시스템 구현

그리고 3개월 뒤 프로토타입으로 사내 테스트

Page 33: [NDC 14] 가죽 장화를 먹게 해달라니 - 의 자유도 높은 아이템 시스템 구현

무게: 11.69kg 재료: 돌돌돌돌돌돌돌ㄷ롣롣로로

파워 돌도끼

Page 34: [NDC 14] 가죽 장화를 먹게 해달라니 - 의 자유도 높은 아이템 시스템 구현

무게: 1kg 에너지: 3071 / 100 특이사항: 지방을 지방으로 튀긴 것을 지방으로 튀긴 것을 지방으로 …

파워 튀김

Page 35: [NDC 14] 가죽 장화를 먹게 해달라니 - 의 자유도 높은 아이템 시스템 구현

그 외에도…

공격력이 1억이 넘는 칼

방어력이 너무 높아서 맞을 때 마다 피가 차는 방패

Page 36: [NDC 14] 가죽 장화를 먹게 해달라니 - 의 자유도 높은 아이템 시스템 구현
Page 37: [NDC 14] 가죽 장화를 먹게 해달라니 - 의 자유도 높은 아이템 시스템 구현

데이터 파편화 특성, 재질, 아이템 생성기, 레시피

디자이너가 직접 여러 개의 파일을 수정

Page 38: [NDC 14] 가죽 장화를 먹게 해달라니 - 의 자유도 높은 아이템 시스템 구현

스크립트 디자이너가 직접 코딩

사소한 오타부터 로직 오류까지

Page 39: [NDC 14] 가죽 장화를 먹게 해달라니 - 의 자유도 높은 아이템 시스템 구현

데이터 발산 데이터 컨트롤을 할 수 없음

엄격한 룰을 적용하면 해결할 수는 있지만..

Page 40: [NDC 14] 가죽 장화를 먹게 해달라니 - 의 자유도 높은 아이템 시스템 구현

이대로는 답이 없다

시스템 자체는 재미있다는 평을 많이 받음

고비용의 테스트

디자이너가 과로로 죽어간다

Page 41: [NDC 14] 가죽 장화를 먹게 해달라니 - 의 자유도 높은 아이템 시스템 구현

데이터 구조 변경

통나무 특성: 탈 수 있는 깎을 수 있는

탈 수 있는 속성: 건조 정도 두께

깎을 수 있는 속성: 두께 단단함

태그에 속성값을 묶음

Page 42: [NDC 14] 가죽 장화를 먹게 해달라니 - 의 자유도 높은 아이템 시스템 구현

데이터 입력 툴

웹페이지로 지원

지정된 형식으로 데이터를 작성

스크립트의 syntax오류 검증

Page 43: [NDC 14] 가죽 장화를 먹게 해달라니 - 의 자유도 높은 아이템 시스템 구현

데이터 validation

툴 타임에 데이터를 분석

파편화된 정보를 모아 서로간의 링크가 연결되지 않는 부분들을 확인

Page 44: [NDC 14] 가죽 장화를 먹게 해달라니 - 의 자유도 높은 아이템 시스템 구현

스크립트 validation

아이템 = 특성의 조합

아이템이 실체가 없다?!

Page 45: [NDC 14] 가죽 장화를 먹게 해달라니 - 의 자유도 높은 아이템 시스템 구현

변신 아이템 요구에 따라 내용이 바뀌는 아이템

유의미한 제작 결과를 뱉지는 못하지만 스크립트를 테스트해 볼 수는 있다

Page 46: [NDC 14] 가죽 장화를 먹게 해달라니 - 의 자유도 높은 아이템 시스템 구현

VALIDATOR

Page 47: [NDC 14] 가죽 장화를 먹게 해달라니 - 의 자유도 높은 아이템 시스템 구현

사내 테스트 랩터 빌드

Page 48: [NDC 14] 가죽 장화를 먹게 해달라니 - 의 자유도 높은 아이템 시스템 구현

데이터로 인한 오류의 감소

툴 타임에 데이터 오류 검증

테스트 비용의 대폭 감소

프로그래머의 로드도 대폭 감소

멘붕 감소

Page 49: [NDC 14] 가죽 장화를 먹게 해달라니 - 의 자유도 높은 아이템 시스템 구현

데이터 입력 툴은 실패

데이터를 하나씩 입력하는 방식은 실 작업에선 무리

열심히 만들었지만 실제로는 쓰이지 않음

엑셀과의 호환이나 단순 입력 이상의 기능이 필요

Page 50: [NDC 14] 가죽 장화를 먹게 해달라니 - 의 자유도 높은 아이템 시스템 구현

validation 실패 케이스 발생

스크립트의 자유도를 validator가 커버하지 못함

스크립트 안에서 분기점이 있다면?

스크립트 안에서 랜덤으로 분기를 한다면? 100번쯤 돌리면 되겠죠

Page 51: [NDC 14] 가죽 장화를 먹게 해달라니 - 의 자유도 높은 아이템 시스템 구현

자유도 및 창발적 요소의 감소

사실상 가장 큰 문제

데이터 검증을 위해서 채택한 엄격한 데이터가

재미의 근본을 해침

Page 52: [NDC 14] 가죽 장화를 먹게 해달라니 - 의 자유도 높은 아이템 시스템 구현

세번째 이터레이션 시작 언제나 즐거운 대격변 놀이

Page 53: [NDC 14] 가죽 장화를 먹게 해달라니 - 의 자유도 높은 아이템 시스템 구현

속성 개편

속성을 다시 아이템에 붙임

특성이 관심을 갖지 않는 속성들도 관리하게 함

창발적 제작을 유도하는데 필요

Page 54: [NDC 14] 가죽 장화를 먹게 해달라니 - 의 자유도 높은 아이템 시스템 구현

자동으로 붙는 특성(Tag)

속정 조건을 만족하면 자동으로 붙는 특성

비교적 간단한 규칙으로 유지

레시피와 별개의 시스템으로 창발적 플레이에 기여

Page 55: [NDC 14] 가죽 장화를 먹게 해달라니 - 의 자유도 높은 아이템 시스템 구현

스크립트 전용 인터페이스

item[‘weight’] = slots[‘stick’].avg_of(‘weight’) + slots[‘blade’].avg_of(‘weight’) item.weight = slots.stick.weight + slot.blade.weight

사용법을 최대한 단순하게

필요한 인터페이스만 노출 시키게

Page 56: [NDC 14] 가죽 장화를 먹게 해달라니 - 의 자유도 높은 아이템 시스템 구현

스크립트의 분기점 규격화

분기점을 사용하는 방식을 규격화

분석하여 테스트에 활용할 수 있도록

Page 57: [NDC 14] 가죽 장화를 먹게 해달라니 - 의 자유도 높은 아이템 시스템 구현

발산 검증 툴 (예정)

속성치를 범위로 가질 수 있는 가상의 아이템

채집, 제작의 결과물들을 누적

제작 히스토리에 있는 레시피를 다시 시도할 때 발산을 검증한다

Page 58: [NDC 14] 가죽 장화를 먹게 해달라니 - 의 자유도 높은 아이템 시스템 구현

마무리

아무리 강조해도 부족하지 않은 소통 작업자의 실수를 잡아주는 툴이 필수 빠른 이터레이션에 더 신경을 쓰자

Page 59: [NDC 14] 가죽 장화를 먹게 해달라니 - 의 자유도 높은 아이템 시스템 구현