책 소개
요약
이 책은 유니티에서 C#을 이용해 게임 스크립트를 작성하는 데 필요한 고급 기술들을 집중적으로 탐구해보는 중급자용 안내서다. C#과 유니티에 대한 기초적인 이해가 있는 독자를 대상으로 디버깅, 인공지능, 사용자 정의 렌더링, 에디터 기능 확장, 애니메이션 등을 비롯한 실용적 주제 및 사례에 대한 스크립트 작성을 다룬다.
이 책에서 다루는 내용
■ 클래스 상속, 인터페이스, 싱글턴, static 오브젝트 등 C#의 핵심 개념에 대한 이해
■ NPC를 위한 효과적인 인공지능 구현
■ 코드 최적화를 목표로 하는 이벤트 주도적 프로그래밍 활용 개발법
■ 탄탄한 디버깅 및 진단 기법 습득
■ 실용적인 환경에서 모노 프레임워크와 LINQ의 개념 이해
■ 후처리 효과를 위한 렌더링 기능 사용자화
■ 시야 코딩, 뷰 테스트, 다른 유용한 알고리즘들
■ 특성 등의 개념을 활용한 코드 품질 향상
이 책의 대상 독자
이 책은 학생, 교사, 전문가 등 유니티와 스크립트 작성에 대한 기본적인 내용은 숙지하고 있는 독자들을 위한 중급자용 안내서다. 유니티를 짧은 시간 동안 사용해본 독자뿐만 아니라 유니티 숙련자라고 하더라도 게임 개발 공정을 향상시키기 위한 중요하고 가치 있는 내용들을 얻어갈 수 있을 것이다.
이 책의 구성
1장, ‘유니티 C# 복습’에서는 C#의 기초와 유니티에서의 스크립트 작성을 간추려서 다룬다. 기초적인 내용에 대해 포괄적으로 설명하는 대신, 기초를 배운 적이 있지만 한동안 코딩을 쉬었거나 뒤에 나올 내용을 살펴보기 전에 빠른 복습을 원하는 독자에게 필요할 만한 내용들을 다룬다. 스크립트 작성에 필요한 기초 내용들(클래스, 상속, 프로퍼티, 다형성 등)을 숙지하고 있는 독자라면 1장은 건너뛰어도 좋다.
2장, ‘디버깅’에서는 디버깅에 대해 깊게 다룬다. 오류가 발생했을 때 찾아서 성공적으로 고칠 수 있는 능력을 갖춰야 견고하면서도 효과적인 코드를 작성할 수 있다. 때문에 디버깅은 무척 중요한 기술이다. 2장에서는 기초에만 그치지 않고 모노디벨롭 인터페이스를 통한 디버깅을 심도 있게 설명하고, 유용한 오류 기록 시스템을 만들어본다.
3장, ‘싱글턴과 정적 멤버, 게임오브젝트와 월드’에서는 게임오브젝트에 대한 접근, 변경, 관리를 둘러싼 폭넓은 기능들을 살펴본다. 구체적으로, 전역 접근이 가능하고 계속 유지되는 오브젝트를 만들기 위해 싱글턴 디자인 패턴을 살펴보고, 검색, 리스트, 정렬, 오브젝트 배치에 대한 여러 가지 기법들도 살펴본다. 그리고 신뢰도 높은 결과를 만들어내기 위해 하나로 통합된 게임 월드나 좌표 공간에서 오브젝트를 처리하는 유니티 스크립트를 작성해본다.
4장, ‘이벤트 주도적 프로그래밍’에서는 게임 최적화를 위해 구조를 재구성할 때 중요한 방법인 이벤트 주도적 프로그래밍에 대해 알아본다. 업데이트나 빈번히 발생하는 이벤트 안의 큰 부하를 일으키는 작업들을 이벤트 시스템으로 옮김으로써 절약한 시간은 다른 작업을 수행하는 데 가치 있게 사용할 수 있다.
5장, ‘카메라, 렌더링, 씬’에서는 카메라 동작에 대해 단순히 겉핥기만 하는 것이 아니라, 카메라의 구조와 렌더링되는 출력 결과를 직접 조정함으로써 카메라가 어떻게 동작하는지 깊이 들여다본다. 프러스텀(frustum) 검사, 컬링, 시야, 직교 투영, 깊이와 레이어, 후처리 효과 등을 설명한다.
6장, ‘모노를 이용한 개발’에서는 모노 라이브러리와 여기에 포함된 딕셔너리, 리스트, 스택 등의 유용한 클래스들을 살펴보고, 문자열과 정규식, LINQ 등의 다른 기능과 개념에 대해서도 알아본다. 6장을 통해 대량의 데이터를 빠르고 효과적으로 처리하는 방법을 배울 수 있다.
7장, ‘인공지능’에서는 인공지능 프로젝트를 만들기 위해 앞 장에서 다루었던 모든 내용들을 활용한다. 돌아다니기, 추격하기, 순찰하기, 공격하기, 회피하기, 체력 회복 아이템 찾기 등 다양한 동작을 수행하는 영리한 적을 만들어보며, 이 캐릭터를 만드는 과정을 통해 시야 문제와 근접 감지, 경로 탐색을 설명한다.
8장, ‘유니티 에디터 사용자화’에서는 유니티 에디터에 초점을 맞춘다. 유니티 에디터는 여러 기능들로 가득 차 있지만 더 많은 기능이 필요할 때도 있다. 먼저 에디터 클래스를 만드는 방법을 배우고, 에디터가 다른 방법으로 동작하도록 혹은 더 잘 동작하도록 에디터 자체를 사용자화하는 방법을 익힌다. 인스펙터에 표시되는 프로퍼티를 사용자화하고, 에디터 사용자화를 통해 게임에서 다중 언어 간 전환에 필요한 모든 기능을 갖춘 현지화 시스템을 만든다.
9장, ‘텍스처, 모델, 2D를 이용한 구현’에서는 스프라이트, 텍스처, GUI 구성 요소 등 2D 구성 요소를 이용해 할 수 있는 여러 가지 것들을 살펴본다. 3D 게임에서도 2D 구성 요소는 중요한 임무를 맡고 있으므로, 다양한 2D 관련 문제들과 효과적이면서 강력한 해결책들을 함께 알아본다.
10장, '소스 관리 및 유용한 팁’은 좀 더 일반적인 내용을 다룬다. 특정 주제에 국한되지는 않지만, 여기에서 다루는 다양한 팁과 요령은 모두 습득할 필요가 있는 중요한 내용들이다. 명료한 코드를 작성하는 팁, 데이터 직렬화, 소스와 버전 관리 시스템 통합 등의 내용을 살펴본다.
본문에 쓰인 컬러 이미지는 여기에서 내려 받으세요.
목차
목차
- 1장 유니티 C# 복습
- C#을 선택하는 이유
- 스크립트 파일 생성
- 스크립트 인스턴스화
- 변수
- 조건문
- if문
- switch문
- 배열
- 반복문
- foreach문
- for문
- while 반복문
- 무한 루프
- 함수
- 이벤트
- 클래스와 개체지향 프로그래밍
- 클래스와 상속
- 클래스와 다형성
- C# 프로퍼티
- 주석 남기기
- 변수 표시
- ? 연산자
- SendMessage와 BroadcastMessage
- 요약
- 2장 디버깅
- 컴파일 오류와 콘솔
- Debug.Log를 이용한 디버깅: 개발자 지정 메시지
- ToString 메소드 재정의
- 시각적 디버깅
- 오류 기록
- 에디터 디버깅
- 프로파일러
- 모노디벨롭을 이용한 디버깅
- Watch 창
- 계속하기와 단계별 실행
- 호출 스택
- Immediate 창
- 조건 중단점
- 추적점
- 요약
- 3장 싱글턴과 정적 멤버, 게임오브젝트와 월드
- 게임오브젝트
- 컴포넌트 상호작용
- GetComponent
- 여러 개의 컴포넌트에 접근
- 컴포넌트와 메시지
- 게임오브젝트와 월드
- 게임오브젝트 찾기
- 오브젝트 비교
- 가장 가까운 오브젝트 찾기
- 지정한 형식의 오브젝트 모두 찾기
- 게임오브젝트 간 경로 만들기
- 오브젝트 계층에 접근
- 월드 및 시간과 업데이트
- 규칙 1: 프레임은 소중한 것이다
- 규칙 2: 움직임은 시간과 비례해야 한다
- 소멸되지 않는 오브젝트
- 싱글턴 오브젝트와 정적 멤버
- 요약
- 4장 이벤트 주도적 프로그래밍
- 이벤트
- 이벤트 관리
- 인터페이스를 통해 이벤트 관리
- 이벤트 매니저 만들기
- 모노디벨롭에서 #region과 #endregion을 이용한 코드 접어두기
- 이벤트 매니저 활용
- 델리게이트를 이용한 대안
- MonoBehaviour 이벤트
- 마우스 및 탭 이벤트
- 애플리케이션 포커스 상태에 따른 멈추기
- 요약
- 5장 카메라, 렌더링, 씬
- 카메라 기즈모
- 보이기
- 오브젝트 가시성 감지
- 오브젝트 가시성에 대해 좀 더 살펴보기
- 프러스텀 검사: 렌더러
- 프러스텀 검사: 점
- 프러스텀 검사: 오클루전
- 카메라 시야: 앞뒤 판별
- 직교 카메라
- 카메라 렌더링과 후처리
- 카메라 진동
- 카메라와 애니메이션
- 추적 카메라
- 카메라와 곡선
- 카메라 경로: iTween
- 요약
- 6장 모노를 이용한 개발
- 리스트와 컬렉션
- List 클래스
- Dictionary 클래스
- Stack 클래스
- IEnumerable과 IEnumerator
- IEnumerator를 이용해 적을 차례로 순회
- 문자열과 정규식
- 널, 빈 문자열, 여백
- 문자열 비교
- 문자열 서식 지정
- 문자열 순회
- 문자열 생성
- 문자열 찾기
- 정규식
- 가변 개수 파라미터
- 통합 언어 쿼리
- LINQ와 정규식
- 텍스트 데이터 애셋 다루기
- 텍스트 애셋: 정적 로딩
- 리스트와 컬렉션
- 텍스트 애셋: 로컬 파일 로딩
- 텍스트 애셋: INI 파일 로딩
- 텍스트 애셋: CSV 파일 로딩
- 텍스트 애셋: 웹 로딩
- 요약
- 게임에서의 인공지능
- 프로젝트 구성
- 내비게이션 메시 굽기
- NPC 에이전트 만들기
- 메카님에서의 유한 상태 머신
- C#에서의 유한 상태 머신
- Idle 상태 만들기
- Patrol 상태 만들기
- Chase 상태 만들기
- Attack 상태 만들기
- Seek-Health 상태 만들기
- 요약
- 일괄 이름 변경
- C# 특성과 리플렉션
- 색상 혼합
- 프로퍼티 노출
- 현지화
- 요약
- 스카이박스
- 절차적 메시 생성
- UV 애니메이션: 텍스처 스크롤
- 텍스처 그리기
- 1단계: 텍스처 혼합 쉐이더 만들기
- 2단계: 텍스처 그리기 스크립트 만들기
- 3단계: 텍스처 그리기 설정
- 요약
- 깃: 버전 관리
- 1단계: 다운로드
- 2단계: 유니티 프로젝트 준비
- 3단계: 버전 관리를 위한 유니티 설정
- 4단계: 깃 저장소 만들기
- 5단계: 무시할 파일 지정
- 6단계: 첫 커밋 수행
- 7단계: 파일 변경
- 8단계: 저장소에서 파일 가져오기
- 9단계: 저장소 탐색
- 리소스 폴더와 외부 파일
- 애셋번들과 외부 파일
- 지속되는 데이터와 게임 저장
- 요약
도서 오류 신고
정오표
정오표
[p.136 : 소스코드13행]
AllComponents = GetComponents<
->
AllComponents = GetComponents
[p.137 : 본문 3행]
BroadcastMeesage
->
BroadcastMessage
[ p.141 : 4행 ]
GameObject.FindObjectsWithTag
->
GameObject.FindGameObjectsWithTag
[p.251 : 본문1행]
IEnumrable
->
IEnumerable
[p.305 : 아래에서 9행]
적을 이 상태에서 빠져나가도록 하는 유일한 조건은 Chase 상태에서 플레이어를 발견하는 것이다.
->
적이 이 상태에서 빠져나갈 수 있는 유일한 조건은 플레이어를 발견해 Chase 상태가 되는 것뿐이다.