• 시작하세요! Unity 3D 게임 프로그래밍
  • 유니티를 활용한 3D 게임 개발

  • 수 블랙먼 지음
  • 유윤선 옮김

  • 게임 개발 시리즈 _ 003
  • ISBN: 9788992939874
  • 48,000원 | 2012년 03월 15일 발행 | 1104쪽



유니티 3D는 강력하고 사용하기 쉬운 엔진으로 프로그래밍에 익숙하지 않은 디자이너들조차도 손쉽게 게임을 만들 수 있게 도와준다. 하지만 게임을 만들다 보면 엔진의 지원 기능 부족보다는 스크립트 지식 부족으로 인해 개발에 어려움을 겪는 일이 많다. 이 책에서는 디자이너 관점에서 한 번에 조금씩 스크립트를 소개하고, 재사용할 수 있는 스크립트를 기반으로 유니티 3D를 대상으로 하는 게임 프레임워크를 만든다. 또 줄거리가 있는 게임을 조금씩 완성해 가면서 어드벤처 게임을 통해 살펴볼 수 있는 다양한 이슈들(이를테면 아이템의 상태 관리, 아이템 저장소 기능, 레벨 변화 등)을 자세히 살펴보고, 새로운 이슈가 나올 때마다 프로그래머 관점이 아닌 디자이너 관점에서 손쉽게 문제를 해결하는 법을 알려준다.

캐주얼 게임이 대세인 요즘 어드벤처 게임이란 장르는 조금 거리감이 느껴질 수 있다. 하지만 어드벤처 게임은 그 방대한 스케일만큼이나 다양한 이슈들을 포괄하고 있으므로 게임 개발과 관련한 주제로 다루기 안성맞춤이다. 예를 들어 어드벤처 게임에서 자주 등장하는 아이템의 상태 관리 로직은 캐주얼 게임이든, 1인칭 슈팅 게임이든, 플랫폼 점프 게임이든 모두 필요하다. 이 책에서는 다른 게임에서 충분히 재사용하고 확장할 수 있도록 메타데이터를 기반으로 게임의 상태를 관리한다. 또 다양한 테스트 시나리오를 기반으로 디자이너나 프로그래머가 스크립트 기능을 추가할 때 항상 테스트를 통과할 수 있게끔 해준다. 이 책을 통해 독자들은 직접 작성한 스크립트와 직접 수행한 테스트를 통해 스크립트에 대한 감을 익힐 수 있음은 물론, 유니티의 모범 개발 기법인 프리팹을 활용해 여러 객체를 재사용하고, 궁극적으로 이를 기반으로 제2, 제3의 게임을 개발할 수 있는 토대를 마련할 수 있다.

이 책에서는 유니티 3D와 관련한 거의 모든 주제를 다룬다. 그 중에는 유니티의 기본 사용법부터 기초 스크립트 작성법, 실행 흐름, 3D 객체의 사용법, 콜라이더를 활용한 충돌 감지와 스턴트 대역을 활용한 효과적인 접근 방법 등 거의 모든 내용이 포함된다. 또 이 책의 문제 접근 방식은 유니티 3D 초보자가 처음 유니티 3D를 배울 때 겪기 쉬운 다양한 문제점을 짚어주고 이를 디자이너 관점에서 가장 쉽게 해결할 수 있는 해결책을 제시하는 방식으로 진행된다. 이 책은 유니티 3D 프로그래밍을 전문적으로 다루는 책은 아니지만, 이 책을 통해 독자들은 프로그래밍 배경 지식이 있든 없든 유니티 3D 게임을 개발할 때 필요한 스크립트 지식을 충분히 익힐 수 있다.

유니티 3D는 강력하고 사용하기 쉬운 엔진으로 프로그래밍에 익숙하지 않은 디자이너들조차도 손쉽게 게임을 만들 수 있게 도와준다. 하지만 게임을 만들다 보면 엔진의 지원 기능 부족보다는 스크립트 지식 부족으로 인해 개발에 어려움을 겪는 일이 많다. 이 책에서는 디자이너 관점에서 한 번에 조금씩 스크립트를 소개하고, 재사용할 수 있는 스크립트를 기반으로 유니티 3D를 대상으로 하는 게임 프레임워크를 만든다. 또 줄거리가 있는 게임을 조금씩 완성해 가면서 어드벤처 게임을 통해 살펴볼 수 있는 다양한 이슈들(이를테면 아이템의 상태 관리, 아이템 저장소 기능, 레벨 변화 등)을 자세히 살펴보고, 새로운 이슈가 나올 때마다 프로그래머 관점이 아닌 디자이너 관점에서 손쉽게 문제를 해결하는 법을 알려준다.

캐주얼 게임이 대세인 요즘 어드벤처 게임이란 장르는 조금 거리감이 느껴질 수 있다. 하지만 어드벤처 게임은 그 방대한 스케일만큼이나 다양한 이슈들을 포괄하고 있으므로 게임 개발과 관련한 주제로 다루기 안성맞춤이다. 예를 들어 어드벤처 게임에서 자주 등장하는 아이템의 상태 관리 로직은 캐주얼 게임이든, 1인칭 슈팅 게임이든, 플랫폼 점프 게임이든 모두 필요하다. 이 책에서는 다른 게임에서 충분히 재사용하고 확장할 수 있도록 메타데이터를 기반으로 게임의 상태를 관리한다. 또 다양한 테스트 시나리오를 기반으로 디자이너나 프로그래머가 스크립트 기능을 추가할 때 항상 테스트를 통과할 수 있게끔 해준다. 이 책을 통해 독자들은 직접 작성한 스크립트와 직접 수행한 테스트를 통해 스크립트에 대한 감을 익힐 수 있음은 물론, 유니티의 모범 개발 기법인 프리팹을 활용해 여러 객체를 재사용하고, 궁극적으로 이를 기반으로 제2, 제3의 게임을 개발할 수 있는 토대를 마련할 수 있다.

이 책에서는 유니티 3D와 관련한 거의 모든 주제를 다룬다. 그 중에는 유니티의 기본 사용법부터 기초 스크립트 작성법, 실행 흐름, 3D 객체의 사용법, 콜라이더를 활용한 충돌 감지와 스턴트 대역을 활용한 효과적인 접근 방법 등 거의 모든 내용이 포함된다. 또 이 책의 문제 접근 방식은 유니티 3D 초보자가 처음 유니티 3D를 배울 때 겪기 쉬운 다양한 문제점을 짚어주고 이를 디자이너 관점에서 가장 쉽게 해결할 수 있는 해결책을 제시하는 방식으로 진행된다. 이 책은 유니티 3D 프로그래밍을 전문적으로 다루는 책은 아니지만, 이 책을 통해 독자들은 프로그래밍 배경 지식이 있든 없든 유니티 3D 게임을 개발할 때 필요한 스크립트 지식을 충분히 익힐 수 있다.

시작하세요 유니티 3D 게임 프로그래밍은 유니티 프로그래밍을 처음 배우는 독자들을 위한 최고의 지침서다. 이 책은 3ds 맥스, 마야, 시네마 4D 같은 3d 툴에 익숙한 아티스트나 포토샵, 일러스트레이터 같은 2D 디자이너, 게임 프로그래밍을 좀 더 배우려고 하는 독자, 또 게임 개발 전반에 대해 이해하고 싶은 독자를 위한 책이다.

이 책에서는 디자이너가 쉽게 이해할 수 있게끔 게임 개발과 관련한 핵심 개념을 소개하며 유니티에서 필요한 기본 스크립트 지식을 빠르게 짚어준다. 또 게임 로직과 설계에 대한 튼튼한 기초를 쌓아주는 동시에 Telltale Games에서 만든 원숭이 섬의 비밀 같은 캐주얼 인터랙티브 어드벤처 게임을 독자들이 만들 수 있게 도와준다.

  • 이 책의 1부에서는 게임 상호작용에 필요한 로직을 설명하고 간단한 예제를 통해 앞으로 게임에서 계속해서 확장할 게임 에셋을 생성한다.
  • 이 책의 2부에서는 포인트 클릭 스타일의 1인칭 어드벤처 게임의 기초를 직접 개발한다. 이 과정에서 재사용할 수 있는 상태 관리 스크립트, 로드/저장 기능, 강력한 아이템 저장소 시스템을 개발하고 보너스 기능으로 동적으로 재설정되는 미로와 소형 맵을 만든다.
  • 이 책에서 제공하는 2D와 3D 콘텐츠를 활용해 독자들은 프로젝트를 진행하면서 게임 개발과 관련한 문제를 하나씩 조금씩 살펴보고 인터랙티브 게임 설계 과정에서 필요한 문제 해결 기술을 익힌다.

이 책을 끝마치고 나면 유니티 3D 게임 엔진을 폭넓게 활용할 수 있음은 물론 독자들이 직접 만든 에셋을 활용하는 데 필요한 작업 흐름도 충분히 익힐 수 있다. 또 책에 나온 재사용 가능한 스크립트를 활용해 독자들의 아트 에셋을 기반으로 추가 게임을 만들 수도 있다.

수 블랙먼 (Sue Blackman)

수 블랙먼은 3D 아티스트이면서 인터랙티브 애플리케이션 개발자이며, 남부 캘리포니아에서 강사로도 일하고 있다. 그녀는 Art Institute of California 같은 최고 수준의 커뮤니티 칼리지와 사립 학교에서 10년 넘게 아티스트를 대상으로 3ds 맥스와 게임 수업을 가르쳤으며 액티비전의 자회사 중 한 곳에서 게임 관련 3D 아티스트 리더로 근무했다. 그녀는 보잉, 레이시언, 노스톱 그루먼 같은 포천 1000 기업에서 게임에 기반한 형식을 통해 기능성 게임과 훈련 프로그램을 개발하는 데도 참여했다. 수 블랙만은 거의 10년째 실시간 3D 엔진의 상업용 개발 관련 일을 하고 있다. 그녀는 10년 넘게 여러 권의 3ds 맥스 책에서 아트워크 작업을 도와주거나 집필에 기여하는 작가로 활동했으며 업무용 3D 게임 프로그램의 교육 메뉴얼을 작성하는 등 왕성한 활동을 하고 있다. 또 그녀는 자신이 가장 좋아하는 주제 중 하나인 기능성 게임에 대한 글을 ACM Siggraph에 기고하기도 했다. 그녀의 웹 사이트는 www.3dadventurous.com이다.

유윤선

인디 개발자이자 프리랜서 번역가로 활동 중이다. 이따금 http://joshy21.com/weblog에 번역과 상관없는 글을 올리고 있다. 역서로는 『시작하세요! 안드로이드 게임 프로그래밍(위키북스)』, 『시작하세요! 아이폰 4 프로그래밍(위키북스)』, 『플래시 빌더 4 & 플렉스 4 바이블(위키북스)』, 『쉽고 빠르게 익히는 CSS3(위키북스)』, 『스프링 시큐리티 3(위키북스)』, 『시작하세요! 아이패드 프로그래밍(위키북스)』, 『플래시 게임 마스터(에이콘출판사)』, 『Adobe AIR 인 액션(위키북스)』, 『스프링 3 레시피(위키북스, 공역)』, 『액션스크립트 3.0 완벽가이드(인사이트, 공역)』 등이 있다.

  • 01장 장르 살펴보기
    • 역사적인 참고 자료
      • 그래픽 어드벤처
      • 루카스아츠 타이틀
      • 실시간 게임으로의 빠른 변화
    • 이 장르가 사람들을 끌어들이는 이유
    • 흥미로운 장소와 재미있는 해결책
      • 스타일의 정의
      • 환경 나누기
      • 시차 효과
      • 애니메이션
      • 도전 과제, 임무, 퍼즐
    • 어드벤처 장르에 무슨 일이 일어난 걸까?
    • 최근 어드벤처 게임의 성공
    • 게임의 재미와 사람 성격의 본질
    • 왜 나만의 게임을 만들어야 하나?
      • 다양한 역할
    • 인디 개발자에게 적합한 두 가지 게임 형식
      • 1인칭 게임
      • 캐릭터
      • 두 게임 형식의 공통 요소
    • 1인칭 게임의 디자인 고려 사항
    • 이야기와 과제의 개발
    • 실시간 게임과 프리렌더링 게임의 비교
    • 정리
    •  
  • 02장 유니티 UI의 기본 — 시작하기
    • 유니티 설치와 시작
    • 새 프로젝트 또는 장면의 로딩과 생성
    • 레이아웃
      • 장면 창
      • 게임 창
      • 계층 뷰
      • 프로젝트 뷰
      • 인스펙터
    • 툴바
    • 메뉴
      • 파일
      • 편집
      • 에셋
      • 게임 객체
      • 컴포넌트 메뉴
      • 지형 메뉴
      • 창 메뉴
      • 도움말 메뉴
    • 간단한 객체의 생성
    • 선택과 포커스
    • 객체의 변형
    • 스냅
      • 정점 스냅
    • 장면 툴
      • 스냅을 활용하지 않는 정렬
    • 조명
    • 3D 객체
      • 메시
      • 메시의 하위 객체
      • 매핑
    • 재료
    • 정리
    •  
  • 03장 스크립트에 발 담그기
    • 스크립트란?
    • 스크립트의 구성 요소
      • 함수
      • 변수
      • 게임에서 객체 집기
    • 마우스로 집은 횟수 세기
    • 조건과 상태
      • 조건문의 구조
    • 계산 순서
    • 정리
    •  
  • 04장 지형 생성 - 테스트 환경의 생성
    • 장면의 플라이쓰루 내비게이션
    • 지형
    • 페인트 텍스처
    • 트리
      • 하늘
      • 다시 트리로
      • 패키지
    • 세부 표현
      • 커스텀 지형 에셋의 생성
      • 내보내기 vs. 네이티브 형식 사용하기
    • 지형 설정
    • 섀도우
    • 안개
    • 정리
    •  
  • 05장 내비게이션과 기능
    • 내비게이션
    • 플랫폼 가지고 놀기
    • 충돌 벽
    • 첫 번째 빌드
    • 정리
    •  
  • 06장 커서 제어
    • 커서 가시성
    • 커스텀 커서
    • GUI 레이어
      • 텍스처 임포터
      • 힌트 색상
      • 커서 위치
      • GUITexture 커서의 관리
    • 객체 간 통신
    • 마우스 오버 커서 변화
      • 거리 확인
    • 중간 빌드
    • 마우스 오버에 대한 객체 반응
    • 새 기능의 옵션화
    • 이동 도중 마우스 오버 기능의 제한
    • 정리
    •  
  • 07장 액션 객체
    • 에셋 임포트
    • 임포트
    • FBX 임포터
      • 개별 객체에 대한 상세 제어
      • 개별 변형
      • 복잡한 계층 구조
      • 부모 지정
    • 재료의 설정
      • 열쇠
      • 나무 상자
    • 섀도우
      • 정적 객체
    • 콜라이더
    • 애니메이션
      • Store in Root 접근
    • 효과음의 추가
    • 두 상태 애니메이션의 설정
    • 유니티의 애니메이션 뷰 활용
      • 임포트한 애니메이션의 수정
    • 다른 객체의 애니메이션 트리거
    • 한계점
    • 정리
    •  
  • 08장 상태 관리
    • 가능성의 식별
      • 플롯에 대한 소개
      • 진행 과정
      • 액션 아이템
      • 스턴트 대역
    • 플로우 차트의 개발
      • 상태 메타데이터 전환 액션의 분리
    • 상호작용 및 상태의 정의
      • 상태 전환의 시각화
      • 상태 다이어그램
    • 결과의 판단
    • 조회 테이블
    • 문자열 파싱
    • 객체 조회 스크립트
    • 액션 관련 메시지
    • 정리
    •  
  • 09장 객체 메타데이터
    • 상태 관련 메타데이터
      • 존재 상태/위치
      • 가시성 타입
      • 게임 참고 문서
    • 현재 상태
    • 다시 살펴보는 마우스 집기
    • 메타데이터의 추가
    • 정리
    •  
  • 10장 메시지 텍스트
    • GUI 스킨
      • 운영체제 폰트 지원
    • 텍스트 가시성
    • 객체 메타 데이터의 활용
    • 액션의 처리
      • 실제 적용
      • 오디오 관리
      • 애니메이션의 처리
      • 시작 값의 로드
      • 폰트와 텍스트에 대한 상세 설명
      • 액션 메시지의 활성화
      • 동적인 읽기 시간
      • 마지막 보정
    • 정리
    •  
  • 11장 아이템 저장소 로직
    • 레이어
    • 커서 변환
      • 몇 가지 개선점
    • 아이템 저장소 화면
    • 조회 테이블의 확장
      • 디버깅
    • 아이템 저장소 아이콘의 추가
    • 2D 객체의 처리
    • 정리
    •  
  • 12장 아이템 저장소 관리
    • 태그
    • 아이템 저장소 레이아웃
    • 아이템 저장소 오버플로우
    • 한계 범위 설정
      • 아이템 그리드 저장소의 제한
      • 화살표 제한
    • 아이템 저장소에서의 객체 추가 및 제거
      • 아이템 저장소에서의 객체 제거
      • 아이템 저장소에 객체 추가
      • 아이템의 조합
      • 잘못된 집기
    • 정리
    •  
  • 13장 기본 기능 마무리
    • 3D 객체 가시성의 처리
      • 키 프레임 없는 페이드 효과의 개발
      • 가시성 변경으로 인한 부작용
      • 콜라이더 처리
      • 일치하는 커서가 없는 경우의 처리
    • 랜덤 응답
    • 3D 장면에서의 커서 드롭
      • 가시성 제어 함수의 개발
      • 다시 살펴보는 액션 메시지
      • 페이드 효과의 재확인
    • 객체 간 상호작용
      • 장면상의 객체 배치
    • 특수 사례
      • 확장 가능 코드
      • 상태 변화가 없는 응답
      • 보물 상자 시퀀스의 활성화
      • 읽을 자료
      • 메시지 숨기기
    • 정리
    •  
  • 14장 게임 요구사항 다루기
    • 드롭 박스
      • 꽃 살리기
      • 절두체 컬링
      • 묘약병 붓기
      • 묘약병의 가시성 문제 해결
      • 마법 일으키기
      • 게임 객체의 소멸 처리
      • 프리팹의 활성화
    • 카메라 포커스
      • 카메라 위치 조정 메타데이터
      • 카메라 강제 위치 조정 스크립트의 작성
    • 최종 에셋의 임포트
      • Structures 불러오기
      • 재료와 광원 매핑
      • 지하
      • 사원 속으로
      • 홀로그램 이미지
      • 발코니
      • 토피 열매 얻기
      • 재미 요소들
      • 폭포
      • 재단의 가디언
      • 가디언
    • 정리
    •  
  • 15장 미로와 최종 레벨
    • 미로의 기하
      • 미로의 관리
      • 드롭 지점
      • 트랩 검사
      • 빼앗긴 무기
    • 나머지 가능성의 처리
      • 사용자 재설정
      • 서랍 활성화
      • 이스터 에그
      • 동굴 입구
    • 최종 레벨
      • 트리 생성기
      • 서 있는 비석
      • 상급
      • 바람의 손길
      • 최종 지형
      • 최종 시퀀스
      • 환경 효과
      • 애니메이션 이벤트
      • 반짝이는 효과의 추가
      • 여러 개의 토피 열매
      • 레벨 로드
    • 정리
    •  
  • 16장 메뉴와 레벨
    • 메뉴 접근 - 소메뉴
      • 확인 대화상자
      • 메뉴 모드의 추적
      • 메인 메뉴
      • 설정 메뉴
      • 플레이어 설정
      • 컨트롤 채우기
      • 색상 설정
    • 오디오 마무리
      • 효과음
      • 배경음
      • 음악
      • 음성 또는 대화 볼륨
    • 메뉴용 커스텀 스킨
      • 장면 이동과 장면 내 상호작용 중단 및 메뉴 마무리
      • 실시간 배경
    • 시작 메뉴/레벨
      • 배경의 관리
      • 레벨 변경
    • 저장/불러오기
      • 게임 데이터의 저장
      • 저장된 데이터의 로드
      • 정리 작업
    • 마침내, 다시 처음으로
    • 이제 게임이 완성됐나?
    • 최종 작업
      • 퍼블리싱
    • 퍼블리싱
    • 정리
    •  
  • 17장 기본 지식 넘어서기
    • 추가 기능
      • HUD 점수/순위
      • 힌트/난이도
      • 여러 번의 저장 기능
      • 물리 이론과 발사체
      • 데이터 보관
      • 추가 콘텐츠
    • 1인칭에서 3인칭으로의 전환
      • 캐릭터
      • 카메라
      • 캐릭터 대화
      • 대화 트리
      • 캐릭터 대체
    • 모바일 플랫폼에 대한 디자인 고려사항
      • 라이선스, 하드웨어, 셋업
      • 스크립트 작성
      • 내비게이션과 입력
      • 셰이더와 텍스처
      • 다각형 개수
      • 배치 처리
      • 콜라이더
      • 메뉴와 GUI
      • 기타 사항
    • 디자인 문서
      • 간략한 스토리
      • 상세 스토리
      • 게임의 목적
      • 게임의 타깃 플랫폼
      • 차별성과 시장성
      • 조작과 장면 이동
      • 게임 방식
      • 평가 방식, 점수 계산, 게임에 이기는 법
      • 레벨 설계
      • 시각 스타일
      • 사용자 인터페이스
      • 캐릭터와 액션 객체
      • 환경과 비상호작용 객체
      • 효과음
      • 음악
      • 음성
    • 정리
    •  
  • 18장 SSE 셰이더 그래프
    • SSE BetterLightmap 셰이더 그래프
    • SSE ReflectiveAlpha 셰이더 그래프
    • SSE ReflectiveCutout 셰이더 그래프
    •  
  • 부록 키 코드

예제코드 관련 GitHub 페이지

참고 자료

관련 글