C#으로 하는 유니티 게임 개발
- 원서명Learning C# by Developing Games with Unity 3D Beginner's Guide (ISBN 9781849696586)
- 지은이테리 노턴
- 옮긴이이유찬
- ISBN : 9788960775770
- 30,000원
- 2014년 06월 30일 펴냄 (절판)
- 페이퍼백 | 344쪽 | 188*235mm
- 시리즈 : acorn+PACKT, 게임 개발 프로그래밍
판매처
- 현재 이 도서는 구매할 수 없습니다.
책 소개
요약
이 책은 프로그래밍에 대한 개념이 없는 사람들을 대상으로 한다. 기존의 프로그래밍 서적이 이해하기 어려운 용어와 문장으로 설명을 하기 때문에 처음 프로그래밍을 시작하는, 특히 게임을 만들어보고자 하는 사람들을 쉽게 질리게 한다. 그러나 이 책은 우리 주변에서 쉽게 볼 수 있는 간단한 예제를 사용해 프로그래밍의 기본 개념을 설명한다. 기존의 프로그래밍 서적에서 설명하는 방법과는 사뭇 달라서 처음에는 익숙하지 않을 수 있지만, 저자가 선별한 예제들을 맛깔스러운 설명과 함께 한 단계씩 따라가다 보면, 어느덧 C#의 기본 개념들을 익히게 될 것이다. 또한 이 책은 특정 게임을 개발하기 위한 기술보다는 하나의 게임이 완성되기까지 각 단계들이 어떻게 서로 연결되고 함께 동작하는지를 설명한다. 즉 게임을 구성하기 위한 큰 그림을 익히는 데 중점을 두고 있다. 마지막으로 게임을 제어하는 데 반드시 필요한 스테이트 머신(state machine)의 개념을 설명하고, 이 개념을 사용해 직접 게임을 제어하는 방법도 상세히 설명하고 있다. C#에 대해서도 그리고 유니티에 대해서도 전문 지식이 없는 초보 게임 개발자들에게는 더할 나위 없이 친절한 게임 입문서라고 할 수 있다.
이 책에서 다루는 내용
■ 변수의 개념과 동작 원리
■ 메소드와 함수의 개념과 정보 처리를 위한 메소드와 함수 사용법
■ 객체, GameObject 컴포넌트, 클래스의 개념
■ 닷 신택스를 이용한 객체들 간의 통신
■ 코드에서 결정(decision)을 수행하는 방법
■ 유니티 프로젝트를 컨트롤하고 구성하기 위한 스테이트 머신(State Machine) 사용법
■ GameObject를 다루기 위한 스크립트 레퍼런스
■ 유니티 물리 엔진을 사용하여 GameObject 충돌과 트리거를 감지하고 이동하는 방법
■ 게임 화면에 정보 표시하는 방법
이 책의 대상 독자
일반적인 프로그래밍이나 스크립트 작성은 물론이고, 어디서부터 시작해야 할지조차 모르겠다면, 이 책을 집어 든 건 최선의 선택이다. 게임을 만들어보고 싶거나 C# 스크립트나 코드 작성 방법을 배워야 하는 독자들에게 이 책은 좋은 안내서가 될 것이다.
이 책의 구성
1장, 숨겨진 스크립트 기술의 발견: 여러분이 스크립트를 작성할 때 잠재적으로 느끼는 공포심을 극복하는 방법을 설명한다. 스크립트를 작성하는 일은 일상생활과 비슷할 정도로 매우 쉬운 작업임을 알게 된다. 또한 유니티의 스크립트 문서를 살펴볼 것이다. 마지막으로, 유니티에서 C# 스크립트를 생성하는 방법도 배워본다.
2장, 유니티 스크립트의 빌딩 블록 소개: 코드를 작성할 때 필요한 두 가지 중요한 빌딩 블록인 변수와 메소드에 대해 설명한다. 2장에서는 변수와 메소드의 개념을 소개한다. 이 2개의 빌딩 블록을 사용해 유니티 컴포넌트에서 사용하는 변수와 메소드의 컨테이너(container)인 ‘클래스’의 개념을 이해할 수 있다. 마지막으로, 닷 신택스(Dot Syntax)를 소개하면서 GameObjects 간의 통신을 설명한다.
3장, 변수의 자세한 활용: 변수를 사용하는 방법을 좀 더 자세하게 설명한다. 데이터를 저장하는 데 변수를 사용하는 방법과, 유니티의 Inspector 패널에 나타나는 컴포넌트 속성(Component properties)으로 변수를 변환하는 방법도 소개한다.
4장, 메소드의 활용: 메소드가 어떻게 GameObjects에 있는 액션(action)을 수행하는지 설명한다. 메소드를 생성하고 사용하는 방법을 좀 더 자세하게 배우게 된다. 또한 유니티에서 가장 자주 사용하는 메소드인 Start() 메소드와 Update() 메소드에 대해서도 알아본다.
5장, 코드에서 조건 결정하기: 게임을 진행하는 동안 수없이 이뤄지는 조건 결정(decision)에 대해 설명한다. 이러한 결정은 일상생활 속에서 하는 결정과 비슷하다. 코드에서 결정을 내리는 여러 가지 방법을 알아보고, 각 방법이 필요한 일반적인 이유도 알아보자.
6장, 객체 통신을 위한 닷 신택스의 사용: 닷 신택스는 사실, 다른 컴포넌트에게 정보를 전달하거나 다른 컴포넌트로부터 정보를 수신하는 간단한 주소(address) 포맷임을 알아본다.
7장, 게임의 한 부분으로 게임플레이 생성하기: 게임플레이(gameplay)를 개발하는 일은 분명 재밌는 작업이지만, 완벽하게 동작하는 게임을 만들려면 여러 파트가 필요하다는 사실을 배우게 된다. 필요한 파트들 중 일부를 살펴보고 스테이트 머신(state machine)을 소개함으로써 모든 파트를 구조화하는 방법을 알아본다.
8장, 스테이트 머신 개발: 간단한 스테이트 머신을 만들어서 스테이트 머신이 어떻게 동작하는지 알아보고, 스테이트 머신을 통해 게임을 제어하는 간단한 방법을 소개한다. 멀티 레벨 게임에서 씬(scene)이 어떻게 변하는지 그리고 다른 씬으로 변할 때 GameObject를 어떻게 처리해야 하는지도 알아본다.
9장, 게임 구축과 기본 구조 실행: 유니티의 스크립트 레퍼런스와 원하는 기능을 찾아볼 수 있는 레퍼런스 메뉴얼을 액세스하고 사용하는 방법을 알려준다. 그러고 나서 스테이트 머신과 3개의 씬을 사용하는 멀티 레벨 게임을 만들어본다. GameObject의 플레이어(player)를 추가하고 플레이어를 제어하는 방법도 살펴볼 것이다.
10장, 움직임, 충돌 그리고 스코어 보관: 유니티의 물리 시스템을 사용해 플레이어를 움직이는 방법과 플레이어의 움직임을 카메라가 어떻게 따라가는지를 설명한다. GUI 스코어 시스템을 개발하고 적(enemy) 객체에게 총을 쏘는 기능, 그리고 어떻게 게임에서 이기고 지는가에 대해 설명한다. 궁극적으로, 분리되어 있는 모든 코드 조각이 어떻게 하나로 합쳐져서 동작하는지를 알아보자.
11장, 새로운 코드 기술 요약: C#으로 프로그래밍하고 객체를 사용해 작업하는 데 필요한 핵심사항들을 되짚어본다. C#의 기본을 이해하기 위해 배우려고 하는 C#과 유니티 기능에 대해 설명한다. 유니티 프로젝트에 스테이트 머신을 함께 사용할 때의 장점에 대해서도 강조해 설명한다. 마지막으로, 좀 더 배우고자 하는 이들에게 유용할 참고자료를 제공한다.
부록 A, 초기 스테이트 머신 파일: 게임에서 스테이트를 변경하는 데 필요한 클래스의 초기 코드를 보여준다. 이 스테이트 머신 클래스는 게임 코드를 구성하고 추가하기 위한 출발점이다.
부록 B, 9장과 10장의 완성된 코드 파일: 완벽한 게임을 플레이하기 위해 사용되는 모든 클래스와 스크립트 파일을 담고 있다.
목차
목차
- 1장 숨겨진 스크립트 기술의 발견
- 이 책을 보는 데 필요한 사전지식
- 스크립트 공포증의 해결
- GameObject의 비헤비어에 대한 교육
- UnityScript 대신에 C# 선택
- C#을 선택한 이유 1: 인터넷상의 방대한 문서
- C#을 선택한 이유 2: 유니티 스크립트와 일반적인 C# 코드 파일을 사용할 수 있는 유연성
- C#을 선택한 이유 3: 특별한 코딩 규칙
- 유니티의 문서
- 이 모든 것을 알아야 하는가?
- 여기서 보여주는 정보는?
- C# 스크립트 파일로 작업하기
- 모노디벨롭 코드 에디터의 소개
- 모노디벨롭과 유니티 사이의 C# 파일 동기화
- Watching for a possible "gotcha" when creating script files in Unity
- 정상적으로 동작하지 않을 때의 수정
- 정리
- 2장 유니티 스크립트의 빌딩 블록 소개
- 함수 대신에 메소드 사용하기
- 스크립트에서 변수가 하는 역할에 대한 이해
- 변수에 이름 붙이기
- 변수의 이름은 단순히 값을 대체한다
- 스크립트에서 메소드의 사용
- 메소드란?
- 이 스크립트 파일 안에 있는 것은 무엇인가?
- 메소드의 이름도 코드를 대체한다
- 클래스 소개
- 유니티의 작은 마법을 사용하면 스크립트는 컴포넌트가 된다
- 마법처럼 보이는 기술적인 것들
- 그 밖의 유니티 마법
- 닷 신택스를 사용한 컴포넌트 간의 통신
- 닷이란?
- 정리
- 3장 변수의 자세한 활용
- 적절한 C# 문장 작성
- 유니티의 Inspector에 있는 컴포넌트 속성의 이해
- 변수는 컴포넌트의 속성이 된다.
- 유니티는 스크립트와 변수 이름을 약간 변경한다
- Inspector 패널에서 속성 값 변경
- Inspector 패널에서 public 변수 보기
- 적절한 변수 이름 작성법
- 소문자로 변수 이름 시작하기
- 여러 단어로 변수 이름 정하기
- 변수와 타입의 선언
- 일반적인 내장 변수 타입
- 변수를 어디에서 선언하는지가 중요하다
- 변수 영역: 변수가 사용되는 위치를 결정한다
- 정리
- 4장 메소드의 활용
- 중괄호를 사용한 메소드 정의
- 스크립트에서의 메소드 사용
- 적절한 메소드 이름 작성법
- 대문자로 메소드 이름 시작하기
- 여러 단어로 메소드 이름 정하기
- 괄호도 메소드 이름의 한 부분이다
- 적절한 메소드의 정의
- 메소드를 정의하기 위한 최소한의 요구 조건
- 괄호의 이해: 괄호가 필요한 이유
- 메소드 매개변수의 설정
- 메소드는 얼마나 많은 매개변수를 가질 수 있는가?
- 메소드의 호출
- 메소드의 괄호에서 인수 사용하기
- 메소드로부터 값 리턴받기
- 메소드 호출은 논리적인 우회다
- 유니티의 Update()와 Start() 메소드 사용
- Start() 메소드는 한 번만 호출된다
- Update() 메소드는 반복해서 호출된다
- 정리
- 5장 코드에서 조건 결정하기
- if 문을 사용한 조건 테스트
- if 조건이 참인지 거짓인지 테스트
- 조건을 변경하기 위한 NOT 오퍼레이터 사용
- if 문에서 여러 조건 체크하기
- 다른 코드를 실행하기 위한 if-else 문 사용
- 사용자 입력에 따른 결정
- 배열, List, Dictionary에 데이터 저장하기
- 배열에 아이템 저장하기
- List에 아이템 저장하기
- Dictionary에 아이템 저장하기
- 컬렉션 이니셜라이저를 사용해 List와 Dictionary에 아이템 추가하기
- 배열, List, Dictionary 데이터에 루프 사용하기
- foreach 루프
- for 루프
- while 루프
- 정리
- if 문을 사용한 조건 테스트
- 6장 객체 통신을 위한 닷 신택스의 사용
- 닷 신택스를 사용하는 것은 주소를 문자로 표기하는 것과 같다
- 닷 신택스에서 닷은 단순화다
- 변수와 메소드를 위한 액세스 지정자 사용하기
- 객체를 사용해 작업한다는 것은 클래스의 액션을 의미한다
- 스크립트에서 닷 신택스 사용하기
- 컴포넌트의 변수와 메소드 액세스하기
- 현재 GameObject의 다른 컴포넌트를 액세스하기
- 다른 GameOjbect의 컴포넌트를 액세스하기
- 드래그앤드롭을 사용하거나 코드를 작성해 GameObject 액세스하기
- 정리
- 닷 신택스를 사용하는 것은 주소를 문자로 표기하는 것과 같다
- 7장 게임의 한 부분으로 게임플레이 생성하기
- 스테이트 머신에 새로 배운 코딩 스킬 적용하기
- 스테이트 머신의 개념 이해
- 스테이트 머신을 사용했을 때의 장점
- 스테이트 머신 로직 플로우
- 게임 제어권을 스테이트에 위임하기
- 원할 때 다른 스테이트로 스위칭하기
- 액티브 스테이트를 계속 파악하기
- 컴포넌트 객체와 C# 객체 생성하기
- 유니티는 씬 뒤에서 컴포넌트를 생성한다
- 객체를 생성하기 위해 클래스를 인스턴스화하기
- C# 인터페이스 소개
- 스테이트 머신과 보장된 인터페이스
- 정리
- 8장 스테이트 머신 개발
- 4개의 스테이트 클래스 생성하기
- StateManager 컨트롤러 셋업
- 상속 예에 대한 학습
- 다시 IStateBase 인터페이스 입력하기
- 스테이트 추가하기
- StateManager 클래스에 OnGUI 추가하기
- 액티브 스테이트의 변경과 씬 제어
- 게임 씬 멈춤
- 씬 변경
- 씬 변경은 기존의 GameObject를 소멸시킨다
- 씬 변경하기
- 클래스 코드 검증
- 정리
- 9장 게임 구축과 기본 구조 실행
- 유니티의 스크립트 문서
- 처음으로 유니티 레퍼런스 매뉴얼 읽기
- 스크립트 레퍼런스에 있는 필요한 코드 예제 찾기
- 스테이트 머신의 셋업과 플레이어 GameObject의 추가
- StateManager의 재시작 메소드 호출
- 플레이어 GameObject 추가
- 스크립트에 게임 데이터 저장하기
- 스플래시 화면 디스플레이
- 플레이어 GameObject 제어
- 플레이어의 색깔 옵션 추가
- 플레이어의 생명 옵션 추가
- 정리
- 유니티의 스크립트 문서
- 10장 움직임, 충돌 그리고 스코어 보관
- 완성된 게임 보기
- 첫 번째 플레이 스테이트에서 플레이 가능한 씬으로 스위칭하기
- 코드를 사용해 Scene1 로드하기
- 다른 뷰 옵션을 위한 카메라 추가
- 새로운 카메라에 스크립트 연결하기
- Rigidbody 물리를 사용한 플레이어의 이동
- 게임을 진행하는 동안 스코어 보관하기
- 스코어 시스템의 초기화
- Scene1 플레이 스테이트에서 스코어 보관하기
- 승리와 패배를 결정하기
- 물체에 총 쏘기
- EnergyPulse 한 발 쏘기
- EnergyPulse를 연속으로 쏘기
- EnergyPulse의 발사
- EnergyPulse 객체 제어
- 정리
- 11장 새로운 코딩 기술 요약
- 유니티 프로젝트의 코딩
- 객체를 사용해 작업하기
- C# 프로그래밍t의 서피스 스크래치
- 더 많은 C# 기능 살펴보기
- 더 많은 유니티 기능 살펴보기
- 스테이트 머신으로 게임 제어하기
- 스테이트 머신을 사용하는 것은 디자인 패턴의 선택이다
- GameObject 레벨에서 스테이트 머신 사용하기
- 작은 C# 코드 조각 사용하기
- 이 책을 끝낸 후에 더 배워야 할 내용
- C# 웹사이트 방문
- 유니티 코딩 웹사이트 방문
- 정리
- 유니티 프로젝트의 코딩
- 부록 A 초기 스테이트 머신 파일
- BeginState
- SetupState
- PlayStateScene1_1
- PlayStateScene1_2
- WonStateScene1
- LostStateScene1
- PlayStateScene2
- WonStateScene2
- LostStateScene2
- StateManager
- IStateBase
- 부록 B 9장과 10장의 완성된 코드 파일
- BeginState
- SetupState
- PlayStateScene1_1
- PlayStateScene1_2
- WonStateScene1
- LostStateScene1
- PlayStateScene2
- WonStateScene2
- LostStateScene2
- StateManager
- PlayerControl
- GameData
- LookAtPlayer
- FollowingPlayer
- EnergyPulsePower
- IStateBase
- 부록 C 깜짝 퀴즈 정답
- 1장, 숨겨진 스크립트 기술의 발견
- 2장, 유니티 스크립트의 빌딩 블록 소개
- 3장, 변수의 자세한 활용
- 4장, 메소드의 활용
- 5장, 코드에서 조건 결정하기
- 6장, 객체 통신을 위한 닷 신택스의 사용
- 7장, 게임의 한 부분으로 게임플레이 생성하기
- 8장, 스테이트 머신 개발
- 9장, 게임 구축과 기본 구조 실행
- 10장, 움직임, 충돌 그리고 스코어 보관
도서 오류 신고
정오표
정오표
[p71 : 12행]
기본적으로 private을 의미하는 public 지정자modifier는 없다.
→ [public 지정자가 없는 경우 기본적으로 private 지정자를 사용한 것으로 간주한다]
[p96 : 9행]
그러나 이것은 대우 단순한 작업이다.
→ [그러나 이것은 매우 단순한 작업이다.]
2015.2.27 수정사항
[p51 : 아래에서 7행]
Main Camera에서 LearningScript를 드래그한다.
->
Learning Script를 Main Camera로 드래그한다.