Top

유니티 C# 스크립팅 마스터하기 [고급 C# 팁과 기법을 통해 배우는 프로 게임 개발]

  • 원서명Mastering Unity Scripting (ISBN 9781784390655)
  • 지은이앨런 쏜(Alan Thorn)
  • 옮긴이장석현
  • ISBN : 9788960778214
  • 35,000원
  • 2016년 01월 27일 펴냄
  • 페이퍼백 | 432쪽 | 188*235mm
  • 시리즈 : acorn+PACKT, 게임 개발 프로그래밍

책 소개

요약

이 책은 유니티에서 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장, '소스 관리 및 유용한 팁’은 좀 더 일반적인 내용을 다룬다. 특정 주제에 국한되지는 않지만, 여기에서 다루는 다양한 팁과 요령은 모두 습득할 필요가 있는 중요한 내용들이다. 명료한 코드를 작성하는 팁, 데이터 직렬화, 소스와 버전 관리 시스템 통합 등의 내용을 살펴본다.

본문에 쓰인 컬러 이미지는 여기에서 내려 받으세요.

저자/역자 소개

지은이의 말

이 책은 유니티에서 C#을 이용한 게임 스크립트를 작성하는 데 필요한 고급 기술과 색다르고 효과적인 방법들에 대해 간략하면서도 집중적으로 탐구해보는 책이다. 유니티에 대한 입문서나 초급자 튜토리얼은 이미 셀 수 없이 많기 때문에 차별화될 수 있도록 좀 더 고급 주제에 집중했으며, 짜임새 있게 구성했다. 따라서 독자가 이미 애셋 임포트나 레벨 디자인, 라이트 매핑, C#이나 자바스크립트를 이용한 기초 스크립트 작성법 등 기본적인 유니티 사용법을 숙지하고 있음을 전제한다. 이 책은 처음부터 디버깅, 인공지능, 사용자 정의 렌더링, 에디터 확장, 애니메이션 및 움직임 등의 주제를 포함해 실용적인 사례와 예제를 살펴보고, 작성한 스크립트를 창의적으로 적용해 복잡한 결과를 만들어내는 방법을 다룬다. 이론상의 추상적 개념과 팁을 설명하기보다 어떠한 이론이 현실적인 예제에 어떻게 적용될 수 있는지를 보여줌으로써 독자의 프로그래밍 지식을 업그레이드하고, 이를 통해 단지 동작하기만 하는 게임 대신 최적화된 게임을 만들 수 있게 하는 것이 주된 목적이다. 이 책을 최대한 활용하려면 각 장을 처음부터 끝까지 순서대로 읽고, 읽는 동안 일반적이고 추상적인 사고방식을 유지하자.
시간과 공간 개념을 아울러 일반적인 원리를 설명하는 각 장마다의 간단한 개별 예제와 설명을 살펴보자. 이 예제들은 내가 사용한 구체적인 내용을 빼고 독자의 필요에 맞게 재사용할 수도 있다. 요컨대 이 책에서 다루는 내용들은 내가 선택한 특정 예제나 사례에만 관련된 것이 아니라, 독자의 프로젝트와 밀접한 내용들이다. 그럼 이제 시작해보자.

지은이 소개

앨런 쏜(Alan Thorn)

런던에 살고 있는 13년 이상의 업계 경력을 가진 게임 개발자 겸 프리랜서 프로그래머이자 저술가다. 2010년에 왁스 리리컬 게임즈(Wax Lyrical Games)를 설립했고 수상 경력에 빛나는 <바론>를 만들었다. 열 개의 동영상 교육 과정을 만들었고, 『Unity 4 Fundamentals: Get Started at Making Games with Unity』(포컬 프레스), 『UDK Game Development』(에이프레스), 『Pro Unity Game Development with C#』(에이프레스) 등 11권의 게임 개발 서적을 저술했다. 또한 영국 국립영화학교(National Film and Television School)에서 게임 디자인 및 개발 과정의 객원 강사로 활동 중이다.
게임과 시뮬레이터, 키오스크, 기능성 게임, 게임 스튜디오나 박물관, 전 세계의 테마파크 등지에 필요한 증강현실 소프트웨어 등 500개 이상의 프로젝트 개발에도 프리랜서로 참여했다. 현재는 데스크톱과 모바일용으로 곧 출시되는 어드벤처 게임인 <메가>를 개발하고 있다. 철학과 요가, 시골길 걷기를 좋아한다. 이메일 주소는 directxuserinterfaces@hotmail.com이다.

옮긴이의 말

유니티는 이제 더 이상 설명이 필요 없을 정도로 널리 사용되는 게임 엔진이자 개발 도구다. 비단 프로그래머뿐 아니라 게임 디자이너와 아티스트에게도 비교적 진입 장벽이 낮은 편이고, 유니티의 기능을 활용하기 위한 책과 참고 자료들이 수없이 많아 가장 대중적인 게임 엔진으로서의 이점도 누릴 수 있다.
유니티와 관련해 개인적으로 한 가지 아쉬운 점이 있다면 초급자를 위한 유니티 입문서와 튜토리얼 등은 손쉽게 찾아볼 수 있는 반면, 초급자가 중•고급자로 넘어가기 위해 필요한 지식을 전달하는 책과 자료는 상대적으로 찾아보기 어렵다는 것이다. 초급자를 위한 내용들을 습득한 이후 바로 고급자에게 특화된 내용을 다룬 저술이나 논문 등을 따라가기란 다소 벅찬데, 그 내용상의 간극을 독자 스스로가 자료를 찾아가며 채워야 하는 것이 지금까지의 현실이었다.
이 책은 유니티에서 C#을 이용해 스크립트를 작성할 때 필요한 중•고급 기술들에 대해 집중적으로 탐구해보는 중급자용 안내서다. 유니티 활용을 다루는 초급서와 C# 및 닷넷(.NET)에 대한 초급서를 살펴봤다면, 이 책에서 다루는 실용적인 예제들을 통해 유니티에서 C#을 좀 더 적극적으로 활용하는 아이디어를 얻어볼 것을 권한다.

옮긴이 소개

장석현

2002년부터 넥슨, 네오위즈 등의 회사에서 다수의 온라인 게임을 만든 게임 개발자다. 2011년부터 유니티 엔진을 이용한 멀티플랫폼 게임 개발 프로젝트들에서 일했다. 에이콘출판사가 펴낸 『Unity로 하는 2D 게임 개발』(2014년), 『유니티 2D 게임 만들기』(2015년)를 번역했다.

목차

목차
  • 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 파일 로딩
    • 텍스트 애셋: 웹 로딩
  • 요약

  • 7장 인공지능
    • 게임에서의 인공지능
    • 프로젝트 구성
    • 내비게이션 메시 굽기
    • NPC 에이전트 만들기
    • 메카님에서의 유한 상태 머신
    • C#에서의 유한 상태 머신
    • Idle 상태 만들기
    • Patrol 상태 만들기
    • Chase 상태 만들기
    • Attack 상태 만들기
    • Seek-Health 상태 만들기
    • 요약

  • 8장 유니티 에디터 사용자화
    • 일괄 이름 변경
    • C# 특성과 리플렉션
    • 색상 혼합
    • 프로퍼티 노출
    • 현지화
    • 요약

  • 9장 텍스처, 모델, 2D를 이용한 구현
    • 스카이박스
    • 절차적 메시 생성
    • UV 애니메이션: 텍스처 스크롤
    • 텍스처 그리기
      • 1단계: 텍스처 혼합 쉐이더 만들기
      • 2단계: 텍스처 그리기 스크립트 만들기
      • 3단계: 텍스처 그리기 설정
    • 요약

  • 10장 소스 관리 및 유용한 팁
    • 깃: 버전 관리
      • 1단계: 다운로드
      • 2단계: 유니티 프로젝트 준비
      • 3단계: 버전 관리를 위한 유니티 설정
      • 4단계: 깃 저장소 만들기
      • 5단계: 무시할 파일 지정
      • 6단계: 첫 커밋 수행
      • 7단계: 파일 변경
      • 8단계: 저장소에서 파일 가져오기
      • 9단계: 저장소 탐색
    • 리소스 폴더와 외부 파일
    • 애셋번들과 외부 파일
    • 지속되는 데이터와 게임 저장
    • 요약
  • 도서 오류 신고

    도서 오류 신고

    에이콘출판사에 관심을 가져 주셔서 고맙습니다. 도서의 오탈자 정보를 알려주시면 다음 개정판 인쇄 시 반영하겠습니다.

    오탈자 정보는 다음과 같이 입력해 주시면 됩니다.

    (예시) p.100 아래에서 3행 : '몇일'동안 -> 며칠동안

    정오표

    정오표

    [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 상태가 되는 것뿐이다.