Top

유니티 4 게임 프로그래밍 [실전 문제 해결을 위한]

  • 원서명Unity 4.x Cookbook (ISBN 9781849690430)
  • 지은이맷 스미스, 치코 케이로즈
  • 옮긴이김세중, 전성빈
  • ISBN : 9788960776173
  • 35,000원
  • 2014년 10월 27일 펴냄
  • 페이퍼백 | 464쪽 | 188*235mm
  • 시리즈 : acorn+PACKT, 게임 개발 프로그래밍

책 소개

요약

유니티 3D 엔진으로 이용해 게임을 개발하려는 프로그래머를 위해, 실제 개발 과정에서 마주치는 사례 위주로 풀어쓴 책이다. 기초부터 고급 테크닉까지 폭넓게 다루고 있기 때문에, 처음 유니티를 접하는 입문자뿐만 아니라 어느 정도 경험을 쌓은 개발자 역시 이 책을 통해 많은 도움을 얻을 수 있다. 책에서 소개하는 예제는 가장 최근에 릴리스된 유니티 4.x 버전에 맞춰져 있기 때문에 최신 경향을 익히는 데도 유용하다.

이 책에서 다루는 내용

유니티 Mecanim 시스템을 이용해 실시간 캐릭터 애니메이션을 향상한다.

카메라, 이미지, 슈리켄(Shuriken) 시스템을 통해 미니맵, 줌 조절, 카메라 전환을 구현한다.

인공지능 기법을 통해 NPC 오브젝트가 서로를 찾고, 따르고, 피하는 움직임을 구현한다. 또한 웨이포인트를 따라가거나, 무리지어 움직이게 만든다.

게임을 마이크로소프트 키넥트(Microsoft Kinect) 카메라와 연결해, 캐릭터를 제어하거나 플레이어의 움직임을 캡처한다.

실시간 레이더, 커스텀 마우스 커서, 아날로그 또는 디지털 시계, 색상 선택 대화상자, 마우스 오버 재질 하이라이트, 그래픽 진행 막대, 인벤토리 클래스 등을 통해 GUI를 향상한다.

이 책의 대상 독자

이 책은 유니티 스크립트와 멀티미디어 기능을 배우고 여러 부분의 게임 기능에 쉽게 적용하기를 원하는 모든 사람을 위해 쓰여졌다. 프로그래머는 멀티미디어 관련 기능을 익힐 수 있을 것이며, 반대로 디자이너는 스크립트를 다루는 방법을 알게 될 것이다. 초보자부터 숙련자까지, 혹은 아티스트에서 코더까지, 게임을 개발하는 사람이라면 누구에게나 유용한 책이다.

이 책의 구성

1장, ‘유니티 4.x 둘러보기’는 유니티 4.x에 익숙하지 않거나 지금 막 처음으로 접한 사용자를 위한 내용을 담고 있다. 1장에서는 소프트웨어 설치, 인터페이스 개념, 사용자 설정, 작업의 흐름에 대해 설명한다.

2장, ‘카메라 사용’은 게임 내에서 시점을 제어하고 개선하는 기법을 설명한다. 특히 단일 시점과 다중 시점을 동시에 고려할 수 있는 방법을 보여줄 것이다.

3장, ‘맵과 재질 생성’은 유니티 4.x에서 맵과 재질을 더 잘 이해할 수 있게 몇 가지 기법을 살펴본다. 3장의 내용은 비단 게임 아티스트가 아니더라도 이미지 편집 기술을 훈련하는 데 많은 도움이 될 것이다.

4장, ‘GUI 만들기’는 GUI(Graphic User Interface)에 인터랙티브한 시각 효과를 더해 게임의 흥미와 재미를 가져오는 방법을 다룬다. 또한 스크롤 휠을 통한 입력, 방향 안내를 위한 나침반, 레이더, 그래픽 인벤토리 아이콘 표시 등에 대해서도 살펴본다.

5장, ‘애니메이션 제어’는 유니티의 새로운 애니메이션 시스템인 Mecanim에 초점을 맞추고, 기본적인 캐릭터 설정부터 절차적 애니메이션과 래그돌 효과까지 모든 부분을 설명한다.

6장, ‘사운드 재생과 조작’은 사운드 효과를 만들고 음악을 삽입해 게임을 더욱 흥미롭게 만드는 방법을 살펴본다. 또한 재생 제어와 볼륨 제어 기법도 다룬다.

7장, ‘외부 리소스 파일과 디바이스 다루기’는 업데이트 데이터를 가져오거나 웹사이트와 동기화하는 등 어떻게 외부 데이터를 가져와 게임에 적용하는지 알아본다. 마이크로소프트 키넥트 같은 외부 장비는 게임의 상호작용을 완전히 바꿀 수 있는데, 이에 대해서도 살펴볼 것이다.

8장, ‘외부 텍스트 파일과 XML 데이터 다루기’는 텍스트 파일, 특히 XML 텍스트 데이터를 다루는 기법을 정리한다. XML 등 텍스트 기반 데이터는 보편적이고 유용하며, 사람에게나 컴퓨터에게나 인식하기 쉬운 형식이다.

9장, ‘오브젝트 상태와 움직임 제어’는 게임 내에서 컴퓨터가 객체와 캐릭터를 움직이는 경우에 관한 내용이다. 대부분의 게임은 애니메이션을 크게 고려할 필요가 없다. 하지만 인공지능을 통해 방향을 찾아야 할 경우에는 다르다. 9장에서는 이러한 방향 찾기 기법 등을 통해, 게임의 사용자 경험을 풍부하고 흥미롭게 향상하는 법을 다룬다.

10장, ‘추가 기능과 최적화로 개임 개선’은 게임에 추가 기능(일시정지, 슬로우 모션, 3D 입체영상, 보안 기능 등)을 추가하는 기법에 대해 살펴본다. 또한 게임의 효율성과 성능을 향상할 수 있도록 코드를 최적화하는 방법도 다룬다.

11장, ‘유니티 프로 살펴보기’는 유니티 프로(Unity Pro)에 추가된 기능을 간략하게 요약한 장이다. 여기서는 사운드, 텍스처 렌더링, 비디오 텍스처, 이미지 효과 등에 대한 기법을 살펴본다.

저자/역자 소개

저자 서문

게임 개발은 매우 광범위하고 복잡한 작업이다. 게임 개발에서 다루는 분야도 인공지능, 캐릭터 애니메이션, 디지털 그림, 사운드 편집 등 광범위한 주제를 망라한다. 이 모든 분야는 각각 수백 개(혹은 수천 개!)의 멀티미디어와 데이터를 만들어낸다. 이러한 구성요소를 하나의 결과물로 합치기 위해서는 특별한 소프트웨어 애플리케이션, 즉 게임 엔진이 필요하다.

게임 엔진은 많은 사람에게 난해한 영역에 속하는 특수한 소프트웨어다. 워낙 고가인 데가가 유연성도 부족하고 사용하기에 매우 복잡했기 때문이다. 커다란 스튜디오나 인내심 많은 프로그래머들만이 이를 사용했다. 그러던 와중에 유니티가 등장했다.

유니티는 누구나 평등하게 게임을 개발할 수 있게 해준다. 엔진과 멀티미디어 편집 환경은 사용하기에 매우 편리하며 범용적이다. 무료 버전과 인디 버전이 있으며, 프로 버전은 더 많은 기능을 담고 있다. 이 글을 쓰고 있는 동안애도 유니티는 윈도우, 맥, 리눅스, iOS, 안드로이드, 엑스박스(Xbox) 360, 위 유(Wii U), PS3 등에서 게임이 작동할 수 있도록 모듈을 제공하며, 웹 게임에 대해서도 유니티 플러그인을 통해 지원하고 있다.

현재 유니티는 전 세계의 다양한 개발자들이 사용 중이다. 학생이나 취미로 개발하는 사람도 있지만, 대부분은 상업적인 목적으로 유니티를 이용해 수많은 게임을 만들어내며, 그 사용자는 인디 개발자에서 대형 스튜디오에 이르기까지 다양하다(독자 여러분도 분명 지금까지 최소 한 번은 유니티로 만든 작품을 플레이해봤을 것이다).

이 책은 100가지 이상의 유니티 게임 개발 기법을 담고 있다. 예를 들어 유니티를 이용해 애니메이션과 기본 패키지 시스템 등의 멀티미디어를 다루는 기법을 알아본다. 또한 C# 스크립트를 이용해 데이터 구조와 파일을 다루고, 인공지능 알고리즘을 통해 캐릭터를 조작하는 등 다양한 게임 구성요소를 개발하는 기법 등을 소개한다.

만약 좋은 게임을 편리하게 개발하면서도, 유용한 게임 구성요소를 제작하거나, 개발 중 흔히 발생하는 문제를 해결하고 싶다면, 유니티와 이 책이 큰 도움이 될 것이다.

저자 소개

맷 스미스(Matt Smith)

아일랜드 더블린의 ITB(Institute of Technology Blanchardstown)(www.itb.ie)에서 전산학 교수로 재직 중이다. 1980년(나이를 짐작해보라) ZX80으로 처음 컴퓨터 프로그래밍을 시작했고, 그 이후로 지금까지 프로그래밍을 하고 있다. 1985년에는 처음으로 작사를 했고, 자신의 밴드와 함께 당시 컴퓨터 게임인 ‘Confuzion’(wikipedia.org/wiki/Confuzion)이 담겼던 카세트테이프 뒷면에 수록된 곡을 연주했다.

비즈니스 컴퓨팅(Business Computing)으로 학사를 수료했으며(영국 허더즈필드 대학교(Huddersfield University)), 조금 지루하다고 생각했는지 석사학위는 인공지능으로(스코틀랜드 애버딘 대학교(Aberdeen University)), 박사학위는 영국 OU(Open University)에서 컴퓨터 음악학(Computational Musicology)으로 받았다. 10년 동안 학생으로만 살면서 가산을 탕진한 나머지, 강사와 연구원으로 커리어를 시작했다. 프로그래밍, 인공지능, 웹 개발, 인터랙티브 멀티미디어를 주제로 20년 가까이 강의와 연구를 진행해왔으며, 2002년 아일랜드로 돌아오기 전까지 윈체스터 대학교(Winchester University)와 런던 미들섹스 대학교(Middlesex University)에서 전임강사로 일했다. 최근 들어 그는 학생들에게 플래시 기반 2D 멀티미디어 대신 유니티 기반 3D 게임 개발과 인터랙티브 가상 환경을 주제로 강의를 하고 있다.

자기 관리를 위해 한국의 무술인 태권도를 배우고 있으며(www.maynoothkd.com에 태권도 클럽 사이트를 개설해놓았다), 학부생들은 마이크로소프트 키넥트(Microsoft Kinect) 카메라를 이용해 유니티로 태권도 인터랙티브 ‘교습’을 구현하고 있다. 그의 제자 중 아일랜드-프랑스 출신 학생들이 팀을 이뤄 만든 게임을 www.saintgermes.com에서 플레이해볼 수 있다(사이트를 계속 호스팅하고 있는 기옘(Guillem)에게 감사를!). 현재 맷은 유럽권의 언어와 문화를 편리하게 가르치기 위한 멀티미디어 프로젝트(vocalproject.eu)의 두 기술 전문가 중 한 명이다.

요즘엔 한국어와(태권도를 배우는 데 필요하다) 아일랜드어를(그의 딸 샬럿이 아일랜드어 학교에 들어갔는데, 딸이 번역해주는 그녀의 성적표를 믿을 수 없다…) 배우고자 고군분투 중이다. 2012년 (20년 만에 다시) 피아노 레슨을 받기 시작했고, 2013년 5월 피아노 시험을 볼 계획이다. 저서로는 『Serious Games and Edutainment Applications』(Springer, 2011), 『Musical Imagery』(Routledge, 2001) 등이 있다. 또한 『Music Education: An Artificial Intelligence Approach』(Springer, 1994)의 수석 편집자였으며, 『Internet and World Wide Web: How to Program(3rd Edition)』(Deitel, Deitel & Goldberg, Prentice Hall, 2003)의 기술 감수자이기도 했다.

치코 케이로즈(Chico Queiroz)

브라질 리우데자네이루에서 멀티미디어 디자이너로 일하고 있다. 2000년 커뮤니케이션/광고로 학위를 받은 직후(PUC-Rio(Pontifical Catholic University of Rio de Janeiro)) LocZ Multimedia에서 플래시와 디렉터를 이용한 홍보용 게임과 웹 게임을 개발하기 시작했다. 현재는 폭스바겐(Volkswagen)이나 파르말라트(Parmalat) 등의 클라이언트를 위해 게임 디자인 및 개발을 담당하고 있으며, 동시에 자체적인 타이틀로도 게임을 만들고 있다.

디지털 게임 디자인으로 석사학위를 받았는데(영국 UCA(University for the Creative Arts)), 그의 졸업 프로젝트는 ‘London Serious Games Showcase’나 FILE 같은 이벤트와 축제에 전시됐다. 학술 컨퍼런스나 gameology.org, gamasutra.com, gamecareerguide.com 등의 웹사이트에 논문을 기고하기도 했다.

SBGames 2009에서 큐레이션과 조직을 맡아, 비디오 게임과 예술 간의 관계를 보여주고자 시도했다. SBGames는 ‘Special Commission of Games and Digital Entertainment of the Computing Brazilian Society’의 주관으로 매년 열리는 컨퍼런스다. 치코는 현재 PUC-Rio 내의 컴퓨터 그래픽스 테크놀로지 그룹(Computer Graphics Technology Group)(TecGraf)에서 디지털 디자이너로 재직 중이다. 이곳에서 유니티를 이용해 인터랙티브한 프레젠테이션과 시각화 프로그램을 위한 프로토타입을 개발했다. 또한 PUC-Rio의 교수로서 디자인 학부생을 대상으로 3D 모델링과 게임 기술/CG를 가르치고 있으며, 학기 프로젝트를 위해 유니티 엔진을 활용하고 있다.

옮긴이의 말

PC가 게임 시장의 주도권을 아케이드 게임기에서 뺏어왔듯이, 이제는 모바일 기기가 그 주도권을 가져오고 있다. 수많은 게임이 모바일로 쏟아져 나오고 PC 게임 못지않게 많은 수익을 얻고 있기도 하다. 이러한 모바일 게임 시장에서 제1의 엔진을 꼽자면 단연 유니티 3D라고 할 수 있다.

유니티 3D는 그 압도적인 편리함으로 대부분의 3D 모바일 게임 개발에 이용되며, 최근 들어서는 2D 게임에도 유니티 엔진을 도입하고 있다. 이러한 추세에 맞추어 유니티도 2D 기능을 지속적으로 강화하고 있으니 유니티 엔진의 독주는 당분간 계속될 것으로 보인다.

유니티 3D는 편리한 C# 환경 위에서 개발을 하고 그 결과물을 PC와 안드로이드, iOS 등 대부분의 플랫폼에서 실행할 수 있다는 장점이 있다. 또한 아티스트 친화적인 통합 UI를 제공하며, 엔진 자체가 리소스 제작 방법을 몇 가지로 강제하고 있어서 엔진 활용의 자유도는 떨어지는 대신 매우 빠르게 배울 수 있다. 프로그래머에게도 각 플랫폼마다 따로 개발하는 수고로움을 어느 정도 덜어준다.

유니티 3D는 모바일 게임 시대 이전부터 꾸준히 개발되어 왔으나, 그동안은 큰 인지도를 얻지 못하다가 모바일 시장이 커짐에 따라 급격히 발전했다. 따라서 활용해야 하는 곳은 많은데 정작 숙련된 사람은 그렇게 많지 않은 것이 현실이다. 그렇다고 엔진에 익숙해지기 위해 맨바닥에서부터 시행착오를 거치며 학습하는 방법을 택하기엔 시간이 너무 많이 든다.

이 책은 그런 사람을 위해 유니티 3D 엔진을 사용함에 있어 흔하게 맞닥트리는 상황과 그 해결법을 간단히 제시한다. 따라서 유니티 3D에 익숙해지고 싶은 독자는 이 책을 한 번 쭉 훑어보고, 실제로 개발하는 도중에 문제가 발생하면 책의 내용을 참고하며 실마리를 얻을 수 있을 것이다. 즉 한 번 보고 말 것이 아니라, 항상 가까이에 두고 뒤져보기에도 좋은 책이다.

나는 실제로 유니티 3D를 이용해 게임을 개발했으며, 지금도 나날이 발전하는 기능을 놓치지 않고 이용하고자 노력 중이다. 이 책이 유니티 3D를 사용하려는 사람과 이미 이용 중인 초심자에게도 도움이 되기를 바란다.

옮긴이 소개

김세중

연세대학교 컴퓨터과학과를 졸업했다. YNK 코리아(현 플레이위드)에서 3D 온라인 MORPG를 개발하고 컴퍼니원헌드레드에서 유니티 3D를 이용해 3D 모바일 MORPG <메탈브레이커>를 개발했다. 1인 개발한 2D 퍼즐 게임 을 운영 중이며, 현재 산호세에 있는 Kong Studios, Inc에서 2D 퍼즐 RPG를 개발 중이다.

전성빈

연세대학교 기계공학과를 졸업하고, 동 대학원에서 이미지 프로세싱을 주제로 박사 과정을 수행 중이다. 웹 프로그래밍을 이용한 지식의 구조화에 꾸준한 관심을 갖고 있다.

목차

목차
  • 1장 유니티 4.x 둘러보기
  • __소개
  • __유니티 4.x 설치
  • __초기 환경 설정
  • __사용자 인터페이스 이해와 최적화
  • __생성된 애셋을 프리팹으로 저장하기
  • __유니티 콘텐츠 둘러보기
  • __사용자 콘텐츠 가져오기
  • __프로젝트에 유니티 패키지 가져오기
  • __프로젝트에 사용자 패키지 가져오기
  • __프로젝트에서 사용자 패키지 내보내기
  • __퀵 리스트에 사용자 패키지 추가하기
  • __프로젝트 브라우저 사용

  • 2장 카메라 사용
  • __소개
  • __PIP 효과 만들기
  • __카메라 전환
  • __렌즈 플레어 효과 꾸미기
  • __화면 콘텐츠로 텍스처 만들기
  • __망원 카메라로 줌 조절
  • __관찰 카메라 만들기
  • __슈리켄을 이용해 파티클 효과 만들기
  • __미니맵 표시

  • 3장 맵과 재질 생성
  • __소개
  • __반사 재질 생성
  • __발광 재질 생성
  • __스페큘러 텍스처 맵 생성
  • __투명 텍스처 맵 생성
  • __쿠키 텍스처를 이용한 흐린 풍경 시뮬레이션
  • __색상 선택 대화상자 생성
  • __GUI로 실시간 텍스처 혼합
  • __마우스로 재질 하이라이팅
  • __재질 배열을 이용한 텍스처 애니메이션(비디오 흉내 내기 등)
  • __재질 컬링 비활성화

  • 4장 GUI 만들기
  • __소개
  • __디지털 시계 표시
  • __아날로그 시계 표시
  • __나침반으로 플레이어 방향 표시
  • __레이더로 오브젝트의 상대 위치 표시
  • __이미지로 특정 정수 값 표시
  • __이미지로 특정 부동소수점 및 범위 값 표시
  • __디지털 카운트다운 타이머 표시
  • __시각적으로 카운트다운 타이머 표시(5, 4, 3, 2, 1 - 발사)
  • __원형 차트 스타일로 카운트다운 타이머 표시
  • __스르르 사라지는 메시지 표시
  • __오브젝트 선택 시 인벤토리 텍스트 표시
  • __오브젝트 선택 시 인벤토리 아이콘 표시
  • __PickUp 클래스를 통한 일반적인 인벤토리 관리
  • __마우스 휠로 스크롤바 제어
  • __마우스 커서 아이콘 변경

  • 5장 애니메이션 제어
  • __소개
  • __캐릭터 아바타 설정과 정지 애니메이션
  • __루트 모션과 블렌드 트리를 이용해 캐릭터 움직이기
  • __레이어와 마스크로 애니메이션 조합
  • __스크립트로 루트 모션 오버라이딩
  • __움직이는 캐릭터에 강체 요소 추가하기
  • __움직이는 캐릭터로 오브젝트 던지기
  • __캐릭터에 래그돌 효과 적용
  • __캐릭터 몸통을 회전해 조준하기

  • 6장 사운드 재생과 조작
  • __소개
  • __애니메이션 속도에 오디오 피치 맞추기
  • __볼륨 컨트롤 추가하기
  • __리버브 존을 통한 터널 환경 시뮬레이션
  • __오디오 클립 중복 재생 방지
  • __오브젝트가 자동적으로 파괴될 때까지 오디오 재생하기
  • __다이내믹 사운드트랙 만들기

  • 7장 외부 리소스 파일과 디바이스 다루기
  • __소개
  • __외부 리소스 파일 로딩: 유니티 기본 리소스 이용
  • __외부 리소스 파일 로딩: 유니티 리소스 폴더에 파일 직접 저장
  • __외부 리소스 파일 로딩: 인터넷에서 파일 다운로드
  • __플레이어 데이터 입출력: 정적 속성 이용
  • __플레이어 데이터 입출력: PlayerPrefs 이용
  • __게임 스크린샷 저장
  • __Zigfu 샘플을 이용해 마이크로소프트 키넥트로 유니티 캐릭터 조종하기
  • __마이크로소프트 키넥트 컨트롤러로 캐릭터 애니메이션 구현하기
  • __마이크로소프트 키넥트 컨트롤러로 움직임을 저장해 모션 캡처 구현하기
  • __PHP/MySQL로 순위표 만들기

  • 8장 외부 텍스트 파일과 XML 데이터 다루기
  • __소개
  • __TextAsset 공용 변수를 사용해 외부 텍스트 파일 불러오기
  • __C# 파일 스트림을 사용해 외부 텍스트 파일 불러오기
  • __C# 파일 스트림으로 외부 텍스트 파일 저장하기
  • __외부 XML 파일 불러오고 파싱하기
  • __XMLWriter를 사용해 XML 텍스트 데이터 생성하기
  • __직렬화를 통해 XML 텍스트 데이터 자동 생성하기
  • __XMLDocument.Save()로 XML 데이터를 텍스트 파일에 저장하기

  • 9장 오브젝트 상태와 움직임 제어
  • __소개
  • __플레이어 컨트롤로 정육면체 움직임 제어
  • __오브젝트 시선 방향 제어
  • __오브젝트 상호 움직임 제어(찾기, 도망가기, 쫓아가기)
  • __무리진 오브젝트 그룹 움직임 제어
  • __초기 속도를 통한 오브젝트 발사 효과 구현
  • __무작위 스폰 지점 만들기
  • __가장 가까운 스폰 지점 찾기
  • __순서대로 웨이포인트 따라가기
  • __상태를 통한 오브젝트 행동 제어
  • __상태 패턴을 통한 복잡한 오브젝트 행동 제어

  • 10장 추가 기능과 최적화로 게임 개선
  • __소개
  • __게임 일시정지
  • __슬로우 모션 구현
  • __편광 투과를 이용한 3D 입체화면 구현
  • __모르는 서버의 게임 실행 차단
  • __코드 프로파일링을 통해 성능 ‘병목현상’ 찾기
  • __자동 ‘소거’를 통해 오브젝트 숫자 줄이기
  • __오브젝트 중단을 통해 활성 오브젝트 숫자 줄이기
  • __델리게이트와 이벤트를 통한 효율성 향상(그리고 SendMessage 방지!)
  • __코루틴을 통해 메소드를 주기적이고 독립적으로 실행하기
  • __코루틴으로 긴 계산을 여러 프레임으로 분산하기

  • 11장 유니티 프로 살펴보기
  • __소개
  • __심도를 통해 동적으로 오브젝트 포커싱하기
  • __백미러 만들기
  • __씬 내부에 동영상 재생하기
  • __오디오 필터로 수중 환경 시뮬레이션하기
  • __외부 동영상 파일 불러와 재생하기

도서 오류 신고

도서 오류 신고

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

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

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