Top

유니티 게임 개발을 위한 절차적 콘텐트 생성 [PCG 기술을 사용한 유니티 RPG 게임 개발]

  • 원서명Procedural Content Generation for Unity Game Development (ISBN 9781785287473)
  • 지은이라이언 왓킨스(Ryan Watkins)
  • 옮긴이이승준
  • ISBN : 9791161750187
  • 30,000원
  • 2017년 06월 30일 펴냄
  • 페이퍼백 | 328쪽 | 188*235mm
  • 시리즈 : acorn+PACKT

책 소개

소스 코드 파일은 여기에서 내려 받으실 수 있습니다.

요약

게임 제작에서 중복 코드를 줄이는 것은 개발자들의 수고를 덜어줄 뿐만 아니라 자질구레한 일에서 해방시켜 더 많은 시간을 창조적인 작업에 힘쓰게 해준다. 맵의 자동 생성, NPC 동작, 아이템 랜덤 발생과 조합 등이 좋은 예라고 할 수 있다. 이러한 자동화 기법은 최근 인공지능과 결합되면서 엄청난 잠재력을 보여주고 있다. 이 책은 그런 자동화 기법인 절차적 콘텐트 생성(PCG) 기술에 대한 전반적인 지식과 실전 예제를 다룬다.

이 책에서 다루는 내용

■ PCG 이론의 이해
■ 의사 난수 사용 학습
■ PCG용 재사용 가능한 알고리즘 제작
■ PCG의 데이터 구조 평가
■ 막대한 양의 콘텐트가 들어간 작은 게임의 개발
■ 일상적인 설계에 시간을 허비하지 않게 하는 콘텐트 생성
■ 게임에 PCG 추가 시기와 방법에 대한 학습
■ PCG의 기초 기술 학습

이 책의 대상 독자

이 책은 유니티 개발 초보자를 염두에 두고 쓰긴 했지만 중급 유니티 개발자에게 가장 알맞다. 유니티 개발과 C# 언어에 익숙하다면 이 책을 최대로 활용할 수 있다. 하지만 초보 사용자에게도 도움이 되는 많은 이론과 프로그래밍 기법 정보가 들어 있다. 이 책 도처에 참조 링크와 정보 팁을 뒀으므로 지식이 부족한 사용자는 참고 자료를 통해 학습 진행에 도움을 받을 수 있다.

이 책의 구성

1장, ‘의사 난수’에서는 절차적 콘텐트 생성(PCG) 이론에 관해 배운다. PCG가 무엇이고 비디오 게임에서 어떻게 사용되는지 살펴본다. 그런 다음 의사 난수(PRN)라는 유용한 무작위 컴포넌트에 관해 학습한다. PRN이 무엇이고 어떻게 사용되고 어떻게 PCG 알고리즘 구현에 도움이 되는지를 다룬다.
2장, ‘로그라이크 게임’에서는 절차적 콘텐트 생성의 우수한 예제인 로그라이크 게임에 관해 배운다. PCG의 기원과 로그라이크 게임의 역사를 다룬 후, 우리가 만들 로그라이크 게임의 유니티 프로젝트 토대를 마련한다.
3장, ‘끝없는 세계의 생성’에서는 2D 로그라이크 게임 구현을 시작한다. 플레이어가 돌아다니는 동안 실시간으로 생성되는 레벨을 만든다. PCG 알고리즘 디자인과 유용한 데이터 하부구조(substructures)를 다룬다. 그런 다음 그것을 합쳐서 게임 세계를 구현해본다.
4장, ‘무작위 던전 생성’에서는 로그라이크 게임의 서브 레벨을 구현한다. 실시간으로 전체 레벨 레이아웃을 생성할 때, 다른 방법으로 레벨 생성에 접근할 것이다. 이 기술에 대해 몇 가지 일반 접근법에 관해 배우고 직접 하나를 구현해본다.
5장, ‘무작위 아이템’에서는 아이템 무작위 생성에 관해 배운다. 여러분이 생성한 아이템에는 각기 다른 특성이 있어서 몇 가지 기술을 사용해 플레이어에게 이런 특성을 알게 한다. 아이템 생성, 상호작용, 인벤토리 저장을 다룬다.
6장, ‘모듈식 무기의 생성’에서는 무작위 모듈식 무기 시스템 지식과 구현 방법에 관해 배운다. 이전 장에서 배운 것에다가 아이템 생성에 대한 더 많은 복잡도를 부여한다.
7장, ‘적응형 난이도’에서는 인공지능(AI) 분야로 넘어가서 AI와 PCG가 얼마나 비슷하고 관련돼 있는지를 배운다. 적응형 난이도에 대한 PCG 아이디어를 배우는데, 한 부분씩 AI와 PCG를 알아본다. 그러고 나서 여러분의 로그라이크 게임에 대해 적응형 난이도 시스템을 구현해본다.
8장, ‘음악 생성’에서는 PCG가 어떻게 게임의 음악과 사운드 콘텐츠에 기여할 수 있는지 보여준다. 음악 이론도 약간 배우게 되는데, 다만 음악 생성에 대한 PCG 알고리즘을 디자인할 정도다. 그러고 나서 실시간으로 음악을 생성할 수 있는, 여러분의 로그라이크 게임용 음악 생성기를 구현해본다.
9장, ‘3D 행성의 생성’에서는 2D 기반 PCG를 3D 기반 PCG로 주제를 전환한다. 우리의 핵심 2D 로그라이크 기능을 끝내고 새 프로젝트로 작업할 것이다. 이 장에서는 3D 객체 생성의 기본을 소개한다. 그러고 나서 3D 행성 생성기를 구현해본다. 게다가 보너스로 최초 인간 제어기를 구현해 여러분이 생성한 세계를 가까이서 살펴본다.
10장, ‘미래의 생성’에서는 오늘날 사용되는 PCG의 가장 일반적인 방법과 이 주제에서 향후 학습에 대한 몇 가지 길을 논의한다. 또한 이 책을 통해 배운 것과 이것이 이 PCG 방법과 어떻게 관련이 있는지에 대해 핵심 몇 가지를 정리해본다. 마지막으로 미래를 위해 이런 PCG 방법을 향상시킬 수 있는 몇 가지 길을 알아본다.

저자/역자 소개

지은이의 말

절차적 콘텐트 생성(PCG)과 이것을 인기 있는 게임 엔진인 유니티3D(Unity3D)에 적용하는 방법을 다룬 입문서다. PCG는 현대 비디오 게임에서 유행하는 강력한 프로그래밍 기법이다. PCG는 새로운 기법은 아니지만 기술이 발달함에 따라 더 강력해져서 미래 비디오 게임의 걸출한 요소가 될 것으로 보인다.
이 책의 과정을 따라 하면 이론과 실습을 포함한 절차적 콘텐트 생성의 기본을 배울 수 있을 것이다. 먼저 PCG의 개념과 그 사용에 대해 배울 것이다. 그러고 나서 의사 난수와 이것이 PCG와 함께 동작하면서 어떻게 고유한 게임플레이를 만들어내는지에 관해 학습할 것이다.
PCG에 대한 소개를 마친 후 2D 로그라이크 게임의 핵심 기능을 알아보고 본격적으로 제작해볼 것이다. 이 게임은 PCG 기법에 크게 기반을 두기 때문에 PCG 알고리즘 설계와 구현에 대한 경험을 쌓을 수 있을 것이다. 레벨 생성, 아이템 생성, 적응형 난이도, 음악 생성 등을 알아볼 것이며, 마지막으로 3D 객체 생성으로 이동해 3D 행성을 만들어볼 것이다.
이 책의 목적은 몇 가지 단순화한 실습 예제를 통해 PCG 이론에 관해 학습하는 것이다. 이 책을 마치면 PCG 자체를 이해하고 유니티3D를 사용한 PCG 적용법에 대한 기본 지식을 얻게 될 것이다. 이것으로 비디오 게임 개발에서 PCG 기법을 더 학습, 연구하고 연습함으로써 추진력을 얻게 될 것이다.

지은이 소개

라이언 왓킨스(Ryan Watkins)

어릴 때부터 컴퓨터에 빠져 지냈다. 디지털 세계 속에서 비디오 게임의 중요성과 그 게임이 컴퓨팅 생태계에 몰고 온 균형을 일찌감치 배웠다. 비디오 게임은 이미 삶에 재미를 주는 강력한 원천이긴 하지만 우리가 진실이라고 아는 것의 경계를 항상 더 넓히고자 노력했다. 그는 디지털 여행 속에서 만난 많은 비디오 게임과 우정을 쌓았고, 비디오 게임은 그와 게임 제작의 비밀을 나눴다. 그 이후로 그는 현실 세계로 되돌아와 그 비밀을 우리와 공유하고 있다.

옮긴이의 말

게임 제작에서 많은 중복 코드를 줄이는 것은 개발자들의 수고를 덜 뿐만 아니라 자질구레한 일에서 해방시켜 더 많은 시간을 창조적인 작업에 힘쓰게 해준다. 맵의 자동 생성, NPC 동작, 아이템 랜덤 발생과 조합 등이 좋은 예라고 할 수 있다. 이러한 자동화 기법은 최근에 인공지능과 결합되면서 엄청난 잠재력을 보여준다. 그런 자동화 기법 중에서 절차적 콘텐트 생성(PCG) 기술은 과거 RPG 게임에서부터 게임 개발자들이 널리 애용해 온 것이다.
하지만 PCG 기술에 대해 변변한 서적이 없고 문서로는 C/C++에 편중돼 있는 데다가 인터넷에서는 단편적인 정보들이 여기저기 흩어져 있어 전반적인 PCG 지식을 얻기까지 언어 장벽과 함께 시간과 노력이 크게 들 수 밖에 없었다. 이제 이렇게 한 권의 책으로 유니티 개발자들에게 전할 수 있어 이 역자는 기쁘게 생각한다.
독자가 생소하게 느낄 만한 전문용어에 대해서는 주석을 달아 놓아 손쉽게 관련 용어를 접하게 했다. 이 책으로 PCG 기술을 습득해 자신의 게임에 멋진 기능을 구현하길 바란다. 아울러 게임 제작에 대한 사고의 틀이 더욱 넓어질 것을 기대한다.

옮긴이 소개

이승준

한아시스템에서 소프트웨어 엔지니어로 근무했으며, 현재 프리랜서로 일하고 있다. 『Boogazine JFC PROGRAMMING』, 『Boogazine Visual J++ 6.0』, 『Java Workshop 2.0 21일 완성』을 집필했고, 편저한 책으로 『JAVA 서블릿 & JSP 프로그래밍 한꺼번에 끝내기』, 『XML 기본+활용 마스터하기』를 편저했다. 또한 에이콘출판사에서 출간한 『(개정판) C & C++ 시큐어 코딩』(2015), 『닷넷 개발자를 위한 AngularJS』, 『파이썬 분산 컴퓨팅』(2016), 『Angular 2 컴포넌트 마스터』(2017)를 번역했다.

목차

목차
  • 1장. 의사 난수
  • __PCG 소개
  • __PCG 사용법
  • __PCG의 적용
  • __의사 난수
  • __무작위 대 의사 난수
  • ____PCG에서의 PRN
  • __도전
  • __요약

  • 2장. 로그라이크 게임
  • __로그라이크 게임 소개
  • __왜 로그라이크인가?
  • __직접 만들어보는 로그라이크 프로젝트
  • __프로젝트 셋업
  • ____기반 프로젝트의 임포트
  • ____파일 개요
  • ____애니메이션
  • __요약

  • 3장. 끝없는 세계의 생성
  • __데이터 구조 선택
  • ____배열
  • ____링크트 리스트
  • ____딕셔네리
  • __PCG 알고리즘 개요
  • __신 셋업
  • ____플레이어 위치
  • ____카메라 이동
  • ____레이어
  • __초기 게임 보드
  • ____연결 코드
  • ____PCG 게임 보드
  • __요약

  • 4장. 무작위 던전 생성
  • __알고리즘 설계
  • ____알고리즘 개요
  • ____그리드
  • ____필수 경로
  • ____무작위 경로와 챔버
  • ____그리드의 나머지 채움
  • ____입구와 출구 제작
  • ____알고리즘 정리
  • __데이터 구조
  • ____원래 위치로의 복귀
  • ____큐
  • ____프리팹 셋업
  • ____출구 표시
  • __DungeonManager
  • __BoardManager
  • __Player
  • __GameManager
  • __유니티 편집기에서 할 작업
  • __던전 시드
  • __도전
  • __요약

  • 5장. 무작위 아이템
  • __게임 세계에서의 헬스 아이템 생성
  • ____헬스 아이템 생성 구현
  • __던전에서의 아이템 생성
  • ____Chest 프리팹
  • ____Chest 구현
  • ____아이템 상자 생성
  • ____Item 프리팹
  • ____Item 코드
  • ____플레이어에 아이템과의 상호작용 추가
  • __요약

  • 6장. 모듈식 무기의 생성
  • __모듈이 있는 PCG
  • ____모듈식 PCG의 통계
  • ____새 스프라이트의 제작과 설정
  • ____여러 개의 이미지 프리팹 제작
  • __모듈식 무기 스크립트
  • __생성 지점 추가하기
  • __무기 획득
  • __스크립트를 통한 무기 애니메이션 추가
  • __캐릭터의 방향 추가
  • __요약

  • 7장. 적응형 난이도
  • __스프라이트 셋업
  • __세계 보드에서의 적 추가
  • __던전 보드에서의 적 추가
  • __적과의 전투
  • __적응형 난이도
  • ____적 AI
  • ____완료
  • __요약

  • 8장. 음악 생성
  • __음악 개념
  • ____템포
  • ____멜로디
  • __반복
  • ____베이스 라인
  • ____긴장감의 추가
  • __요약

  • 9장. 3D 행성의 생성
  • __세 번째 차원의 추가
  • ____3D 대 2D
  • ____기하학 지식
  • ____유니티 프리미티브 구 작업
  • ____구의 생성
  • ____무작위화 추가
  • ____좋지 않은 시간 복잡도와 공간 복잡도
  • __멀티 메쉬 행성
  • __행성 탐험
  • __요약

  • 10장. 미래의 생성
  • __모델
  • __아이템
  • __레벨
  • __텍스처
  • __지형
  • __물리학
  • __애니메이션
  • __AI
  • __스토리
  • __플레이어 샌드박스
  • __요약

도서 오류 신고

도서 오류 신고

에이콘출판사에 관심을 가져 주셔서 고맙습니다. 도서의 오탈자 정보를 알려주시면 다음 개정판 인쇄 시 반영하겠습니다.

오탈자 정보는 다음과 같이 입력해 주시면 됩니다.

(예시) p.100 아래에서 3행 : '몇일'동안 -> 며칠동안

정오표

정오표

[p.123 : 코드 17번행]
string t

TileType t

[p.129 : 코드 88번행]
Vector2(tile.Value.x, tile.Value.y);

Vector2(tile.Key.x, tile.Key.y);

[p.130 : 코드 105번행]
(newRPathPos, newRPathPos);

(newRPathPos, TileType.empty);

[p.131 : 위에서 2행]
여기 점검은 필수 PathTile로부터 경로를 생성할 것인지 1/5 확률로 결정한다.

여기 if 문에서는 1/5 확률로 필수 PathTile에서 경로를 생성할 것인지 결정한다.

[p.134 : 코드 146번행]

[p.134 : 코드 148번행]
(tile.Value.x, tile.Value.y, 0f)

(tile.Key.x, tile.Key.y, 0f)

[p.191: 코드 26번행]
다음 코드 추가
}

[p.211: 코드 11번행]
다음 코드 추가
private SpriteRenderer spriteRenderer;

[p.211: 코드 22번행]
protected override void AttemptMove

protected override bool AttemptMove

[p.211 코드 18번행]
다음 코드 추가
spriteRenderer = GetComponent ();

[p.211: 코드 30번행 바로 아래]
다음 코드 추가
return true;

[p.212: 코드 50번행 바로 아래]
다음 코드 추가

[p.215: 1번행]
편집하기 위해 BoardManager.cs 스크립트를 연다.

편집하기 위해 GameManager.cs 스크립트를 열어 위쪽에 public int enemySpawnRatio = 20;를 추가하고 나서 BoardManager.cs 스크립트를 연다.

[p.216 : 코드 9행]
(추가 설명) public bool checkValideTile 함수는 GameManager가 아니라 BoardManager에 속해 있어야 한다.


* 아래 내용은 원문에는 없지만 내용이 생략돼 있어 독자의 이해를 돕기 위해 역자가 추가한 문장이다.

[p.141: 아래에서 5행]
다음 문장 추가
▶ 4. Exit 타일을 드래그해 inspector 탭에 있는 Board Manager의 Exit 필드에 놓는다.

[p.219: 위에서 10행]
'이제 적과 세계 보드 생성 구현에 대해 충분히 작업했다.' 문장 앞에 아래 문장 추가
▶ Enemy 프리팹을 드래그해 inspector 탭에 있는 Board Manager의 Enemy 필드에 놓는다.

[p.226: 코드 위쪽 3행]
'이것은 그리 어렵지 않을 것이다.' 문장 뒤에 아래 문장 추가
▶ 먼저 MovingObject.cs에서 boxCollider 변수의 접근 모드를 private에서 public으로 변경한다.


* 유니티 2017.1.x 버전의 경우 2장에서 No cameras rendering 오류, 4장에서 Exit 트리거가 안 먹히는 오류가 발생할 수 있다.
유니티 버그로 추정되며 유니티에서는 패치 버전을 내놓고있지만 그래도 해결이 안되면 다운로드 소스 파일에 해결책 txt 파일을 포함시켰으니 참고하기 바란다.