작가의 말
이 책은 유니티에서 C#을 이용한 게임 스크립트를 작성하는 데 필요한 고급 기술과 색다르고 효과적인 방법들에 대해 간략하면서도 집중적으로 탐구해보는 책이다. 유니티에 대한 입문서나 초급자 튜토리얼은 이미 셀 수 없이 많기 때문에 차별화될 수 있도록 좀 더 고급 주제에 집중했으며, 짜임새 있게 구성했다. 따라서 독자가 이미 애셋 임포트나 레벨 디자인, 라이트 매핑, C#이나 자바스크립트를 이용한 기초 스크립트 작성법 등 기본적인 유니티 사용법을 숙지하고 있음을 전제한다. 이 책은 처음부터 디버깅, 인공지능, 사용자 정의 렌더링, 에디터 확장, 애니메이션 및 움직임 등의 주제를 포함해 실용적인 사례와 예제를 살펴보고, 작성한 스크립트를 창의적으로 적용해 복잡한 결과를 만들어내는 방법을 다룬다. 이론상의 추상적 개념과 팁을 설명하기보다 어떠한 이론이 현실적인 예제에 어떻게 적용될 수 있는지를 보여줌으로써 독자의 프로그래밍 지식을 업그레이드하고, 이를 통해 단지 동작하기만 하는 게임 대신 최적화된 게임을 만들 수 있게 하는 것이 주된 목적이다. 이 책을 최대한 활용하려면 각 장을 처음부터 끝까지 순서대로 읽고, 읽는 동안 일반적이고 추상적인 사고방식을 유지하자.
시간과 공간 개념을 아울러 일반적인 원리를 설명하는 각 장마다의 간단한 개별 예제와 설명을 살펴보자. 이 예제들은 내가 사용한 구체적인 내용을 빼고 독자의 필요에 맞게 재사용할 수도 있다. 요컨대 이 책에서 다루는 내용들은 내가 선택한 특정 예제나 사례에만 관련된 것이 아니라, 독자의 프로젝트와 밀접한 내용들이다. 그럼 이제 시작해보자. - 저자 앨런 쏜
유니티는 이제 더 이상 설명이 필요 없을 정도로 널리 사용되는 게임 엔진이자 개발 도구다. 비단 프로그래머뿐 아니라 게임 디자이너와 아티스트에게도 비교적 진입 장벽이 낮은 편이고, 유니티의 기능을 활용하기 위한 책과 참고 자료들이 수없이 많아 가장 대중적인 게임 엔진으로서의 이점도 누릴 수 있다.
유니티와 관련해 개인적으로 한 가지 아쉬운 점이 있다면 초급자를 위한 유니티 입문서와 튜토리얼 등은 손쉽게 찾아볼 수 있는 반면, 초급자가 중ㆍ고급자로 넘어가기 위해 필요한 지식을 전달하는 책과 자료는 상대적으로 찾아보기 어렵다는 것이다. 초급자를 위한 내용들을 습득한 이후 바로 고급자에게 특화된 내용을 다룬 저술이나 논문 등을 따라가기란 다소 벅찬데, 그 내용상의 간극을 독자 스스로가 자료를 찾아가며 채워야 하는 것이 지금까지의 현실이었다.
이 책은 유니티에서 C#을 이용해 스크립트를 작성할 때 필요한 중ㆍ고급 기술들에 대해 집중적으로 탐구해보는 중급자용 안내서다. 유니티 활용을 다루는 초급서와 C# 및 닷넷(.NET)에 대한 초급서를 살펴봤다면, 이 책에서 다루는 실용적인 예제들을 통해 유니티에서 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장, '소스 관리 및 유용한 팁’은 좀 더 일반적인 내용을 다룬다. 특정 주제에 국한되지는 않지만, 여기에서 다루는 다양한 팁과 요령은 모두 습득할 필요가 있는 중요한 내용들이다. 명료한 코드를 작성하는 팁, 데이터 직렬화, 소스와 버전 관리 시스템 통합 등의 내용을 살펴본다.