책 소개
요약
유니티로 게임을 만들고 싶지만 C# 프로그래밍 언어를 잘 모르는 초보 프로그래머에게 C#을 차근차근 알려준다. 유니티를 사용해 간단한 게임을 만들어가면서 가장 기초적인 개념인 변수와 메소드부터 컬렉션, 흐름 제어, 루프를 거쳐 싱글턴 패턴, 객체지향 프로그램까지 C#의 핵심 개념을 소개한다. 책을 다 읽고 나면 유니티로 게임을 만들 때 쓰이는 프로그래밍 언어인 C#의 기초를 확실하게 다질 수 있다.
이 책에서 다루는 내용
■ 변수, 메소드와 C# 문법의 기초
■ 게임 아이디어를 실제 프로젝트로 바꿔줄 다양한 기술
■ 루프와 컬렉션을 효율적으로 사용해서 코드 양 축소 방법
■ 게임 개발에 객체지향 프로그래밍의 원리 활용
■ 끝없는 레벨 생성
■ 보기 좋고 제대로 동작하는 UI 시스템의 구상과 구현
■ 다른 사용자와의 게임 공유 방법
이 책의 대상 독자
프로그래밍 경험이 없는 초보 유니티 개발자를 대상으로 한다. C# 스크립트나 코드를 작성하는 방법을 배워서 게임을 만들고 싶은 유니티 개발자라면 이 책이 안성맞춤이다.
이 책의 구성
1장, ‘숨겨진 스크립팅 능력 발견과 개발 환경 준비’에서는 유니티 스크립트 작성에 첫 발을 들이면서 느낄 수 있는 마음의 부담을 덜어준다.
2장, ‘유니티 스크립트의 구성 요소’에서는 첫 번째 실행 코드를 만들어봄으로써 코드 작성 기술을 향상하는 데 도움을 준다.
3장, ’변수 탐구’에서는 C# 변수를 만들고 사용하는 방법과 유니티 Inspector에서 변숫값을 수정하는 방법을 배운다.
4장, ‘메소드 탐구’에서는 메소드 안에서 쓰이는 코드 블록과 변수의 중요성을 이해할 수 있도록 메소드의 개념과 활용 방법을 자세하게 살펴본다.
5장, ‘리스트, 배열, 딕셔너리’에서는 다양한 값을 한 번에 저장할 수 있는 리스트, 배열, 딕셔너리 같은 조금 더 복잡한 개념을 알아본다.
6장, ‘루프’에서는 유용한 작업을 할 수 있게 지정한 코드를 반복해서 실행하도록 유니티에 ‘요청’하는 방법을 살펴본다.
7장, ’변수와 메소드를 담는 객체’에서는 코드를 체계적으로 구성하는 방법과 객체지향 프로그래밍이라는 주제를 자세히 알아본다.
8장, ‘아이디어에서 개발에 이르는 과정’에서는 아이디어를 코딩 직전 단계의 프로젝트로 만드는 방법과 복잡한 메카닉을 작게 쪼개는 방법을 배운다.
9장, ’첫 게임을 향한 출발’에서는 아이디어를 실제 유니티 프로젝트로 만든다.
10장, ’GameManager’에서는 싱글턴 기법의 기초와 함께 게임플레이 루프를 사용해서 작업하는 방법을 알아본다.
11장, ‘레벨’에서는 다시 사용할 수 있는 레벨의 조각을 만드는 방법과 레벨 조각을 사용해서 끝없이 플레이할 수 있는 게임을 만드는 방법을 살펴본다.
12장, ‘사용자 인터페이스’에서는 게임의 사용자 인터페이스를 구성하고 구현하는 방법을 설명한다.
13장, ‘콜렉터블과 다음 단계’에서는 콜렉터블과 함께 유니티 세션 중에서 데이터를 저장하는 방법을 중점적으로 알아본다.
본문에 쓰인 컬러 이미지는 여기에서 내려 받으세요.
목차
목차
- 1장. 숨겨진 스크립팅 능력 발견과 개발 환경 준비
- 책을 읽기 전에 알아야 할 내용
- 스크립트 공포증 극복
- 유니티 다운로드
- 무료 라이선스 획득
- 게임 오브젝트에 행동 추가
- 유니티 문서고
- 스크립팅 레퍼런스를 전부 알아야 할까?
- C# 문서는 어디서 찾아야 하지? C# 문서가 필요하긴 할까?
- 도움을 청할 수 있는 유니티 커뮤니티
- C# 스크립트 파일
- 너무 많은 파일로 인한 혼란
- Project 탭의 모습이 다른 이유
- C# 스크립트 파일 생성
- MonoDevelop 코드 편집기
- MonoDevelop과 유니티의 C# 파일 동기화
- MonoDevelop에서 LearningScript 파일 열기
- 파란색으로 나타나는 네임스페이스
- 녹색으로 나타나는 클래스 정의
- 유니티에서 스크립트 파일을 만들 때 주의할 점
- 동기화 문제 수정
- 게임 오브젝트에 스크립트 추가
- 인스턴스
- 요약
- 2장. 유니티 스크립트의 구성 요소
- 변수의 개념과 역할
- 변수의 이름을 짓는 법
- 변수 이름은 값의 대용품일 뿐이다
- 변수의 동작 방식
- 선언
- 대입
- Play 클릭!
- 변수 값 변경
- 퍼블릭 변수를 사용할 때 주의할 점
- 메소드
- “함수”가 아닌 “메소드”라는 용어를 사용하는 이유
- 메소드 이름도 대용품이다
- 클래스
- 상속
- Start(), Update(), Awake() 메소드와 실행 순서
- 닷 문법을 사용해서 정보를 주고받는 컴포넌트
- 닷의 정체
- 의사 결정 코드
- 조건을 뒤집는 부정 논리 연산자
- If 문으로 여러 개의 조건 확인
- 복잡한 의사 결정에 쓰이는 else if
- 사용자의 입력을 바탕으로 의사 결정
- 종이와 연필은 강력한 도구다
- 요약
- 변수의 개념과 역할
- 3장. 변수 탐구
- 올바른 C# 문 작성 방법
- 유니티 Inspector에 나타나는 컴포넌트의 속성
- 컴포넌트의 속성으로 바뀌는 변수
- 스크립트 이름과 변수 이름이 살짝 바뀌는 이유
- Inspector 창에서 속성의 값 변경
- Inspector 창에 퍼블릭 변수 표시
- 프라이빗 변수
- 변수 이름을 제대로 짓는 방법
- 소문자로 시작하는 변수 이름
- 여러 단어로 이뤄지는 변수 이름
- 변수와 변수 형식 선언
- 가장 많이 쓰이는 기본 변수 형식
- 변수를 선언하면서 값 대입
- 변수를 선언하는 위치의 중요성
- 변수를 사용할 수 있는 위치를 결정하는 변수의 범위
- 요약
- 4장. 메소드 탐구
- 스크립트에서 메소드 활용
- 메소드 이름을 제대로 짓는 방법
- 대문자로 시작하는 메소드 이름
- 여러 단어로 이뤄지는 메소드 이름
- 괄호도 메소드 이름의 일부다
- 올바른 메소드 정의
- 메소드 정의의 최소 요건
- 괄호가 필요한 이유
- 메소드의 파라미터 지정
- 파라미터의 수
- 메소드에서 값 리턴
- 값 리턴
- 예제 코드
- 값 리턴
- 요약
- 5장. 리스트, 배열, 딕셔너리
- 배열
- 배열 선언
- 리스트에 아이템 저장
- 리스트의 기본 연산
- List<T>와 배열
- 배열이나 List<T>에서 데이터를 가져오는 방법
- 크기 확인
- ArrayList
- 딕셔너리
- 해시테이블의 값 접근
- 해시테이블의 내용을 확인하는 방법
- 요약
- 배열
- 6장. 루프
- 루프
- foreach 루프
- for 루프
- 예제
- while 루프
- while 루프와 for 루프
- 루프와 다른 문의 혼용
- 모듈로
- 배열 안의 데이터 검색
- 루프 중단
- 요약
- 7장. 변수와 메소드를 담는 객체
- 객체 활용
- 몇 가지 사실
- 예제
- 객체의 인스턴스화
- 갈 길이 멀다
- 객체 안의 메소드 활용
- 사용자 정의 생성자
- 오버로딩
- 요약
- 객체 활용
- 8장. 아이디어에서 개발에 이르는 과정
- 처음부터 끝없는 구상의 늪에 빠지지 말자
- 아이디어
- 게임의 메카닉과 핵심 요소
- 복잡한 아이디어를 작게 나누기
- 신비한 행성의 제이크 게임의 기능 목록
- 자동 레벨 생성
- 2D 캐릭터 애니메이션
- 물리
- 마우스와 터치 제어
- 수집 대상과 장애물
- 점수
- 사용자 인터페이스
- 타깃 플랫폼
- 화면 해상도
- 요약
- 9장. 첫 게임을 향한 출발
- 새로운 유니티 프로젝트 설정
- 백업
- 프로젝트를 깔끔하게 유지하는 방법
- 플레이어 프리팹 준비
- Rigidbody2D
- CircleCollider2D
- PlayerController
- 사용자 입력
- 점프
- Animator
- 달리기
- 예제 코드
- PlayerController.cs
- 요약
- 새로운 유니티 프로젝트 설정
- 10장. GameManager
- 게임플레이 루프
- 싱글턴 클래스
- 게임 시작
- 입력 키 설정
- 트리거
- 게임 다시 시작
- 플레이어의 시작 위치 설정
- 예제 코드
- 요약
- 11장. 레벨
- 자동 생성한 레벨과 의도적으로 만든 레벨
- 레벨 청크 생성
- LevelGenerator 클래스 구상
- LevelGenerator 작성
- 주석 작성
- 레벨 조각의 복사본 생성
- 인스턴스화
- Vector3
- LevelGenerator 테스트
- 레벨 확장
- 예제 코드
- 요약
- 자동 생성한 레벨과 의도적으로 만든 레벨
- 12장. 사용자 인터페이스
- 유니티 UI
- 뷰
- 깔끔한 뷰 UI 구성
- 화면 해상도
- 이벤트 인식
- 버튼
- 간단한 버튼의 구성
- 이미지
- Button 컴포넌트
- 상호작용
- 버튼 액션
- Canvas를 감추거나 표시하는 방법
- 참조 예외
- 게임 뷰
- 게임 오버
- 예제 코드
- 요약
- 13장. 콜렉터블 그리고 다음 단계
- 콜렉터블
- 동전 프리팹
- Collectable 클래스
- 최고 점수와 데이터 유지
- Update 함수와 UI 값
- 다음 단계
- 예제 코드
도서 오류 신고
정오표
정오표
[p.153 : 본문 1행]
매운 간단한
->
매우 간단한
[p.185 : 2문단 2행]
inMenu
->
메뉴 상태
[p.201 : 2문단 3행]
PlayerPieceBasic
->
LevelPieceBasic
[p.201 : 2문단 4행]
오브젝트는 GroundLayer에 배치해야
->
오브젝트는 GroundLayer로 설정해야
[p.236 : 3행]
KillCollider
->
KillTrigger
[p.247 : 밑에서 1행]
Player 클래스에
->
플레이어 클래스(PlayerController)에
[p.242 : 밑에서 3문단 첫 행]
Chapter 12
->
Chapter 13