책 소개
요약
인디 게임 개발에서 가장 많은 사랑을 받고 있는 게임 장르가 있다면 주저 없이 플랫포머 장르라고 할 수 있다. 이 책은 유니티를 이용해 2D 플랫포머 장르 게임을 처음부터 끝까지 만드는 방법에 대해 다룬다. 유니티 설정, 캐릭터 이동, 게임 플레이 로직(적, 장애물, 움직이는 장애물 등), 사운드, GUI까지 모두 설명한다. 또한 게임 개발에 필요한 모든 미디어 데이터(그래픽, 사운드)를 제공하므로 누구나 쉽게 따라 하면서 플랫포머 장르의 게임을 만들어 볼 수 있다.
이 책에서 다루는 내용
■ 유니티 개발 환경 설정, 툴 사용법
■ 애셋 제작과 임포트와 게임에 사용할 패키지 추가
■ 게임 스프라이트 설정, 유니티 2D 툴을 사용한 아틀라스 제작
■ 키프레임을 이용한 스프라이트 애니메이션, 애니메이션 컨트롤러, 스크립팅
■ 2D 게임 월드 제작의 처음부터 끝까지
■ 플레이어 컨트롤 설정
■ 올바르게 동작하는 움직임 제작
■ 플레이어 물리, 충돌체 설정
■ 클래식 게임 플레이어 제작 및 적용
■ 위험 요소 구현, 난이도 조절
■ 게임에 오디오, 파티클 이펙트 적용
■ 게임 인터페이스, 메뉴 제작
■ 부드러운 에러 핸들링을 위한 디버그 코드 작성
■ 게임 리소스 구성, 퍼포먼스 향상을 위한 최적화
■ 웹에서 플레이 가능한 게임 배포
이 책의 대상 독자
이 책은 게임을 처음부터 끝까지 만들어보는 과정을 배우고 싶은 사람들을 위해 쓰여졌다. 가령 초기 게임 아이디어부터 시작해, 계획, 디자인, 게임 제작, 배포하는 과정을 모두 포함하고 있다. 또한 유니티를 처음 사용하거나 유니티의 2D 기능을 배우고자 하는 사람에게 도움이 될 것이다. 스프라이트를 만들고 이를 이용해 스프라이트 아틀라스, 2D 물리, 게임 스크립트, 오디오, 애니메이션 제작에 이르는 모든 과정을 배울 수 있다. 유니티의 거의 모든 부분에 대해 자세히 살펴본다.
이 책의 구성
1장, 유니티 개발 환경 구축 유니티의 인터페이스, 프로젝트 계층 구조, 초기 프로젝트 설정을 다룬다.
2장, 애셋 구축 게임에서 사용할 게임 애셋들을 임포트하고 유니티 엔진이 어떻게 게임오브젝트(GameObject)를 사용하는지 이해한다. 게임 컴포넌트가 어떻게 동작하는지 기본 개념을 배우고, 복잡한 동작을 위해 어떻게 구성하는지 배운다. 마지막으로 서드파티 애셋, 패키지를 어떻게 임포트해서 게임 환경에 접목시키는지도 배운다.
3장, 2D 스프라이트 제작 2D 게임 플레이 제작을 위한 스프라이트 에디터, 유니티 프로에 있는 기능 몇 가지를 배운다.
4장, 게임 월드 제작 이미 만들어진 프리팹 게임오브젝트를 이용해 게임 플레이어가 돌아다닐 월드를 만든다. 게임오브젝트를 배치하려면 트랜스폼 툴을 어떻게 사용하는지, 레이어를 이용한 스프라이트 정렬은 어떻게 하는지를 알아본다. 마지막으로 스프라이트를 그룹화하고 부모-자식 관계의 설정, 씬 뷰, 계층 구조에서 이런 것을 관리하기 쉬운 이름 규칙을 배운다.
5장, 기본 이동, 플레이어 컨트롤 스크립트를 만드는 방법과 사용자 입력에 따라 게임오브젝트를 움직이는 함수, 게임에 필요한 메커니즘을 어떻게 스크립트로 제작하는지 배운다. 마지막으로 유니티에서 사용하는 프로그래밍 언어의 장, 단점을 간단히 알아보고 스크립트를 디버깅하는 방법에 대해 배운다.
6장, 씬에 애니메이션 추가 게임오브젝트와 스프라이트를 위해 애니메이션을 어떻게 설정하고 만드는지 배운다. 트랜스폼과 프레임 애니메이션의 차이점을 설명하고 애니메이터 상태 기계를 이용해 2D 스프라이트 행위를 어떻게 만드는지 배운다. 여기서 우리 게임에서 사용될 캐릭터의 메커니즘을 만든다.
7장, 플레이어 물리와 충돌체 설정 2D, 3D 게임오브젝트에 어떻게 물리를 추가하는지 배운다. 게임오브젝트에 충돌체를 설정하고 최고의 퍼포먼스를 내기 위해 어떤 작업을 해야 하는지 알아본다. 마지막으로 게임오브젝트에 힘을 반영해 어떻게 동적인 장면을 만들 수 있는지 배운다.
8장, 게임 플레이 시스템 제작과 적용 게임 플레이를 위한 요소, 예를 들어 집을 수 있는 아이템, 체크 포인트, 리스폰 같은 것을 어떻게 만드는지를 배운다. 유니티의 트리거 시스템을 어떻게 사용하는지 배우며, 게임 플레이에 관련된 게임 디자인 이론에 대해서도 간략하게 알아본다.
9장, 적 만들기와 난이도 조절 기본적인 적 만드는 방법과 어떻게 스크립트를 작성하는지 배운다. 데미지 처리를 위해 데미지 스크립트를 작성하고 스포닝(Spawning) 로직을 통해 적을 언제 생성하는지 배운다. 마지막으로 게임 플레이에 관련된 난이도 조절에 대한 이론을 배운다.
10장, 메뉴 제작과 인터페이스 다루기 게임에 필요한 가장 기본적인 메뉴와 더불어 게임 내 플레이어 HUD를 어떻게 만드는지 배운다. 메뉴에 따라 사용자 입력을 어떻게 처리하는지도 알아본다.
11장, 게임오브젝트에 이펙트 적용 애니메이션, 이펙트, 오디오와 같은 애셋들을 더 추가해서 어떻게 게임을 더 돋보이게 하는지를 배운다. 유니티 파티클 시스템에 대해 배우고, 오디오 리스너와 이펙트를 어떻게 게임 요소에 추가하는지 배운다.
12장, 프로젝트 구성과 최적화 다양한 플랫폼에 게임을 배포하려면 최적화가 필요한데 이를 위한 최적화 팁과 권고 사항들을 알아본다. 마지막으로 프로젝트를 구성하는 팁과 파일 처리에 대해 알아본다.
13장, 모든 것을 합치기 우리가 만든 게임을 유니티 웹 플레이어, 다른 플랫폼으로 어떻게 배포하는지를 배운다. 또한 성공적인 게임 출시와 수익을 위한 모범 사례들을 알아본다. 마지막으로 게임을 웹으로 어떻게 출시하는지 배운다.
14장, UGUI 14장은 보너스 장으로 유니티 4.6에 추가된 UGUI 시스템에 대해 배운다. UGUI 인터페이스와 관련된 컴포넌트, 마지막으로 새로운 Rect 트랜스폼 컴포넌트에 대해 배운다.
목차
목차
- 소개
- 유니티 소개
- 유니티의 다운로드와 설치
- 프로젝트 위자드
- Open Project 탭
- Create New Project 탭
- 패키지
- 프로젝트 설정
- 프로젝트 구조
- 폴더 구조화
- 파일 이름 규약
- 유니티 소개
- 1장 유니티 개발 환경 구축
- Welcome Screen
- 유니티 인터페이스
- 메뉴
- 툴바
- Hierarchy
- Inspector
- Project 브라우저
- Scene 뷰
- Game 뷰
- 요약
- 연습 문제
- 2장 애셋 구축
- 파일 포맷
- 3D 포맷
- 2D 파일 포맷
- 애셋 임포트
- 유니티 내부 애셋 임포트
- 이미 제작된 애셋을 파일 브라우저에서 임포트하기
- 애셋 생성
- 임포트 패키지
- 유니티 패키지
- 사용자 패키지
- 게임오브젝트
- 첫 번째 게임오브젝트
- 게임오브젝트 생성
- 컴포넌트
- 컴포넌트 생성
- 컴포넌트 지정
- 프리팹
- 요약
- 연습 문제
- 파일 포맷
- 3장 스프라이트 제작
- 2D 작업하기
- 2D 행동
- 2D 작업 공간
- 스프라이트 빌드
- 임포트 세팅
- Pixels To Units
- 스프라이트 에디터
- 스프라이트 패킹
- 패킹 태그
- 스프라이트 패커
- 추가적인 스프라이트 리소스 패킹
- 요약
- 연습 문제
- 2D 작업하기
- 4장 게임 월드 제작
- 레벨 디자인 101
- 씬 설정
- 로드맵 만들기
- 세부 사항 추가
- 씬 둘러보기
- 씬 기즈모
- 원근법과 등거리법의 비교
- 카메라 조작
- 유니티에서 오브젝트 조작
- 트랜스폼 툴
- Z 깊이
- 세팅
- 첫 번째 레벨
- 게임오브젝트 수동으로 위치시키기
- 게임오브젝트 배치를 위한 스냅 세팅의 사용
- 그리드 스내핑을 통한 게임오브젝트 위치 잡기
- 효율적인 레벨 디자인
- 정렬 요소 추가
- 계속하기
- 요약
- 연습 문제
- 레벨 디자인 101
- 5장 기본 이동, 플레이어 컨트롤
- 유니티3D 코딩
- 세 언어
- ‘올바른’ 언어 선택하기
- 세 언어
- 플레이어를 ‘움직이게’ 만들자
- 이동 처리를 위한 방법
- PlayerController의 생성과 연결
- 추적 카메라 세팅
- 인풋 매니저 소개
- 에러 처리 및 디버깅
- 예외 처리
- Try-Catch-Finally: 우아한 예외 처리법
- 여러분의 친구 Debug.Log( )
- 브레이크 포인트를 이용한 게임 중단
- 요약
- 연습 문제
- 유니티3D 코딩
- 6장 씬에 애니메이션 추가
- 애니메이션을 위한 몇 가지 룰
- 애니메이션 원리들
- 2D 애니메이션과 3D 애니메이션의 비교
- 트랜스폼과 프레임 애니메이션의 비교
- 스크립트 애니메이션
- 애니메이션 임포트
- 애니메이션 생성
- 애니메이션 컴포넌트
- 애니메이션 클립
- 애니메이션 윈도우
- 애니메이션 이벤트
- 애니메이션 상태
- 애니메이터 컨트롤러
- 애니메이터 컴포넌트
- Animator 윈도우
- 플레이어 컨트롤러 편집하기
- 상태 기계 작업하기
- 전이
- Any State
- 블렌드 트리
- 요약
- 연습 문제
- 애니메이션을 위한 몇 가지 룰
- 7장 플레이어 물리, 충돌체 설정
- 물리의 이해
- 질량
- 중력
- 2D와 3D의 차이
- 6DoF
- Z-깊이
- 회전
- 2D 물리 세팅
- 일반 물리 세팅
- 레이어 컬리전 매트릭스
- 강체
- 충돌체
- 원 충돌체
- 박스 충돌체
- 모서리 충돌체
- 다각형 충돌체
- 피직스 메터리얼
- 콘스트레인트
- 요약
- 연습 문제
- 물리의 이해
- 8장 게임 플레이 시스템 제작, 적용
- 유니티의 트리거 볼륨
- Trigger2D 함수
- 게임오브젝트에 트리거 컴포넌트 추가하기
- 체크 포인트 만들기
- Checkpoint 컴포넌트 스크립트
- 체크 포인트 트리거의 크기 조절과 배치
- 리스폰과 함께 체크 포인트 사용하기
- 구덩이 트리거 볼륨 준비하기
- Pit Trigger 컴포넌트 스크립트
- 수집품 만들기
- 수집을 위한 공중에 있는 코인 준비
- CoinPickup 컴포넌트 스크립트
- 수집을 위한 뻥! 터지는 코인 준비하기
- 코인 박스 프리팹 준비하기
- Coin Box 컴포넌트 스크립트
- CoinSpawner 컴포넌트 스크립트
- 모든 것을 합치기
- 다듬기
- 플레이어 상태 추적
- 요약
- 연습 문제
- 유니티의 트리거 볼륨
- 9장 적 만들기와 난이도 조절
- 적 만들기
- 슬라임 게임오브젝트 준비하기
- 상속과 EnemyController 컴포넌트
- Enemy Slime 컴포넌트 스크립트
- 레벨에 벽 추가하기
- 슬라임들끼리 충돌 처리하기
- 슬라임에 애니메이션 추가하기
- 데미지 입히기
- PlayerStats 컴포넌트에 데미지 처리 기능 추가하기
- 데미지 트리거 만들기
- 플레이어 통과하기
- 구덩이에 데미지 기능 추가하기
- 무적 기능 추가하기
- 고전적인 방법으로 무적을 표현하기
- 플레이어 죽음 처리
- 플랫포밍의 확장
- 움직이는 플랫폼 프리팹 준비하기
- Flight Point 컴포넌트 스크립트
- 두 번째 적 만들기
- Fly Enemy 게임오브젝트 준비하기
- Fly Enemy에 애니메이션 추가하기
- FlyController 컴포넌트 스크립트
- FlightPoints 스크립트 수정하기
- 적 배치하기 유지하기
- 스폰 트리거 준비하기
- SpawnTrigger 컴포넌트 스크립트
- 도전에 대한 몇 마디
- 요약
- 연습 문제
- 적 만들기
- 10장 메뉴 제작과 인터페이스 다루기
- UI 디자인
- 다이어제틱
- 비다이어제틱
- 메타
- 스페이셜
- 유니티 네이티브 GUI
- GUI 스타일
- GUI 스킨
- GUI 컨트롤
- 조합 컨트롤
- GUI 클래스
- GUI 레이아웃
- GUI 텍스트
- GUI 텍스처
- 스플레시 스크린 만들기
- 타이틀 스크린
- 게임 오버 스크린
- 게임 승리 스크린
- HUD
- 외관 만들기
- 스크립트 만들기
- 요약
- 연습 문제
- UI 디자인
- 11장 게임오브젝트에 이펙트 적용
- 슈리켄 파티클 시스템 도입
- 알아야 할 용어들
- 파티클 시스템 만들기
- 파티클 시스템의 모듈, 속성
- 기본 파티클 시스템 속성
- 다른 파티클 시스템 모듈들
- 파티클 시스템 커브
- 게임에 파티클 이펙트 추가하기
- 코인 박스를 위한 파티클 이펙트 만들기
- 코인 박스 파티클 이펙트 사용하기
- 데미지를 위한 파티클 이펙트 만들기
- 코드로 데미지 파티클 시스템 호출하기
- 파티클을 가지고 놀아 보자
- 유니티의 오디오 시스템
- 오디오 소스 컴포넌트
- 오디오 리스너 컴포넌트
- 오디오 리버브 존 컴포넌트
- 플레이어에 사운드 추가하기
- 걷기 애니메이션에 사운드 추가하기
- 점프 이벤트에 사운드 추가하기
- 데미지 이벤트에 사운드 추가하기
- 수집 아이템에 사운드 추가하기
- 코인 박스에 사운드 추가하기
- 코인 먹을 때 사운드 추가하기
- applying some extra polish
- 카메라 로직 정리하기
- 죽음 처리 개선하기
- 요약
- 연습 문제
- 슈리켄 파티클 시스템 도입
- 12장 프로젝트 구성, 최적화
- 애셋 구성
- 프리팹 구성하기
- 라벨
- 계층
- 스크립트와 코드 구성
- 스크립트 파일 관리하기
- 코드 관리하기
- 최적화
- 프리팹
- 물리
- 드로우 콜
- 스프라이트
- 삼각형 개수
- 배칭
- 렌더링 통계 윈도우
- 요약
- 연습 문제
- 애셋 구성
- 13장 모든 것을 합치기
- 레벨 묶기
- 승리 트리거 프리팹 준비하기
- 승리 트리거 스크립트 만들기
- 코인 값 복구하기
- 인트로 스크린 사용하기
- 승리, 실패: 게임 재시작
- 게임 오버에서 게임으로 되돌아가기
- 게임 클리어에서 다시 시작하기
- 게임 빌드, 배포하기
- 웹 플레이어를 위한 빌드 세팅
- PC, 맥, 리눅스 스탠드 얼론 빌드 세팅
- 크로스플랫폼 플레이어 세팅
- 웹 플레이어의 플레이어 세팅
- 우리가 설정할 것들
- 웹 플레이어를 위한 게임 빌드
- 게임을 웹에 올리기
- 배포 후 처리
- 앞으로 나아가기
- 고려할 만한 개선점
- 유료화 모델
- 마지막으로
- 레벨 묶기
- 14장 UGUI
- UGUI 컴포넌트들
- 예제 인터페이스 만들기
- Canvas 컴포넌트
- Rect Transform
- UI Rect 도구
- 마스크 추가
- 이벤트 시스템, 이벤트 트리거
- 요약
- 부록 자바스크립트 코드 예제
- Player 스크립트
- Collectible 스크립트
- Enemy 스크립트
- 게임 시스템 스크립트
- GUI 스크립트
- 위험 요소 스크립트
- 시스템 스크립트
도서 오류 신고
정오표
정오표
2015. 9. 30 수정사항
[목차: 10장]
스플레시 스크린 만들기 -> 스플래시 스크린 만들기
[p.30: 하단 각주 1]
이 책의 연습 문제 해답이 -> 이 책의 강의용 문제와 해답이
※ 각 장의 마지막에 있는 연습 문제는 책의 내용을 이해한 후 정리해보는 실습 예제에 해당하므로 해답이 제공되지 않는 점 양해 부탁드립니다.
혼동을 드려 죄송합니다.
[p. 298: 7, 9, 10, 16, 17행]
스플레시 -> 스플래시
[p. 315: 아래에서 3행]
스플레시 -> 스플래시
[p. 358: 연습 문제 1행]
이 펙트 -> 이펙트
[p. 431: 아래에서 4행]
유티에서 -> 유니티에서
[p. 459: 왼쪽단 아래에서 4행]
스플레시 스크린 -> 스플래시 스크린