Published by Ji&Son Inc. Printed in Korea. Unityによる3Dゲ-ム : iphone/android/webで ゲ-ムプログラミング (JAPAN ISBN 978-4873115061) Authorized translation from the Japanese language edition of Unityによる3Dゲ- ム. 2011 the Translation is published and sold by permission of O Reilly Japan, Inc., the owner of all right to publish and sell the same. Copyright c2011 Yoshiyuki Miyagawa, Daisuke Mutoh, O Reilly Japan, Inc. Korean-language edition copyright c2012 by Ji&Son Inc. All right reserved. 이 책의 한국어 판 저작권은 O Reilly Japan사와 독점 계약에 의해 주식회사 지앤선에 있습니다. 신저작권법에 의해 한국 내에서 보호를 받는 저작물이므로 무단전재와 복제 를 금합니다. 이 책에서 사용하는 시스템명, 제품명은 각각 회사의 상표 또는 등록 상표입니다. ii 유니티 3D
이 책의 출판에 즈음해 저희 팀은 Unity에 대해서 열심히 혼을 쏟아왔습니다. 그 결과, 지금 전 세계 50만이상 의 개발자가 대단히 훌륭한 게임을 만들기 위해서 Unity를 사용하고 있습니다. 이번에 Unity에 대한 한국어 책이 출판되어 한국의 개발자 여러분께서 Unity를 보다 가벼운 마 음으로 배우실 수 있게 되어 제 가슴도 두근거립니다! Unity Technologies, CEO David Helgason 안녕하세요. Unity Technologies의 오오마에라고 합니다. 저도 이 책을 손에 들고 계신 당신과 마찬가지로 어린 시절부터 비디오 게임을 만드는 것이 꿈으로 열심히 프로그래 밍을 공부해 왔습니다. 그 결과, 몇 개의 게임을 만들고 소원이 이루어져 게임 회사에서 일할 수 있는 기회를 얻었고, PS2나 PS3, Xbox 360과 같은 게임기를 중심으로 작은 게 임부터 큰 게임까지 몇 개의 프로젝트에 참여할 기회를 얻을 수 있었습니다. 하지만 십 수년간은 즐거웠습니다만 평탄한 길만은 아니었고, 또 날이 지날수록 고속화 되어 가는 기술의 내용에 문이 점점 좁아지는 위기감을 항상 느껴 왔습니다. 그럴 때 Unity를 만 났고, 누구라도 가벼운 마음으로 자유롭게 게임을 만들 수 있는 세계 가 바로 근처까 지 와있구나! 라고 생각하게 되었습니다. 그 후, 연이 닿아서 Unity를 한국의 개발자 여 러분께 소개하는 도움을 드리게 되었습니다. 누구라도 Rich한 3D 콘텐츠를 만들 수 있다 라고 하는 것이 Unity의 미션입니다. 다 만, 아쉽게도 현재 한국의 개발자가 Unity를 자유롭게 사용하기 위해서는 영어라는 장 이 책의 출판에 즈음해 iii
벽을 넘어야만 합니다. 저자인 두 사람이 이 책을 집필함으로 인해 이 장벽이 크게 낮 아지는 것뿐만 아니라, 게임은 어떻게 만들어야 좋을까? 라는 장벽도 낮아졌다고 생 각합니다. 게임을 만드는 것은 간단한 것만 있지는 않습니다. 하지만 이 책을 기회로 게임은 결국 만들 수 있는 거네! 라고 느끼는 개발자가 늘어 재미있는 많은 게임이 발표되기를 기대하고 있습니다. Unity에 보다 빨리 주목하고 그 사용방법을 익혀서, 지금부터 참여할 여러분을 위해 이 책을 집필한 미야가와 요시유키 씨와 무토 다이스케 씨, O Reilly Japan의 미야가와 나 오키 씨에게 이 자리를 빌려서 감사드립니다. Unity Technologies 일본 담당 디렉터 오오마에 히로키 iv 유니티 3D
머리말 여러분, 안녕하세요. 저는 꽤 긴 시간 동안 게임을 개발하고 있는 미야가와라고 합니다. 오랜 옛날인 20여년 전에 슈퍼 패미콤으로 성검전설2 (스퀘어 [현 스퀘어 에닉스])라는 타이틀로 프로그래머 생업에 들어와서, 최근에는 독립해서 주식회사 제페트라는 회사에서 iphone용게 임( LightBike2, Pocket Vegas, iyamato 등)을 만들어 왔습니다. 특히 최근의 타이 틀은 아주 적은 소수의 개발자로도 일선 급의 퀄리티를 갖는 톱 타이틀과 생사를 겨루는 싸움 을하며, 어떻게 하면 효율성 있게 높은 퀄리티의앱을 만들 수 있을까에 대해서 기술 공유 토 론의 장에 자주 나가고 있습니다. 그리고 창피하지만 저의 회사는 종업원이 없습니다. 구성원 1명(저뿐)인 극소의 영세 기업입 니다. 그래도 매년 몇 가지의 게임을 개발하거나 책을 쓰거나 강연을 하던 중 어떻게 하면 혼자서 그렇게 가능하십니까? 라는 질문을 받을 때가 있습니다.그 이유 중의 몇 가지는 Unity와 같 은 안성맞춤 의 게임 개발 환경의 덕을 보았다고 생각합니다. Unity를 사용하기 시작한 때는 아직 일본에서 사용 예를 들어본 적이 없는 게임 엔진이었지만, 잘 다듬어져 있었기 때문에 아주 시작하기 쉬웠고, 가벼움에 감동하였습니다. 그 때 시간을 필요로 한 것을 말해보면 모든 매뉴얼이 영어였던 것입니다. 해석에 수고가 들 고, 그 거대한 정보에 약해져서 얼마나 문서와 씨름해야 제가 만들고 싶은 게임을 만들 수 있 게 될까 쩔쩔매었던 기억이 있습니다. 그러던 중 이번에 일본어로 이 책을 쓸 기회를 얻었습니다. Unity를 아직 경험하지 못한 분이나 해보려 하였으나 인터넷 상의 정보가 조금 어려워서 손을 대지 못했던 분에게 이 책을 한 손에 들고 기본을 익히면서 최소한의 설명으로 게임 만들기를 체험하게 하고, Unity를 익숙하게 사 용할 수 있는 자신감을 짧은 시간에 가지게 해드리고 싶은 생각에 이 책을 쓰게 되었습니다. 머리말 v
뭐라 해도 Unity는 무료이므로 이 머리말 을 읽고 흥미가 생기셨다면 어서 다운로드 하여 이 대로 2장까지 읽어서 신시대의 게임 만들기의 뛰어남을 반드시 체험해 봐 주세요. 아, 게임 은 이렇게 만들면 되는구나 라고 눈이 열릴 때까지의 문턱이 낮아진 것과 돈이 들지 않는 것 도 Unity가 일으킨 혁명의 하나입니다. 조금 감을 잡았다면 각 장에서 실습하고 있는 내용을 벗어나서 생각나는 아이디어를 실현하는 참맛을맛봐주세요. 아이디어를 형태로 만들면 다른 사람에게 보여주고 싶은 것도 아주 자연스러운 것입니다. Unity로 만든 게임은 간단하게 웹에 공개할 수 있고, 만든 게임을 투고할 사이트도 있습니다(이 책의 샘플 게임도 투고 사이트를 이용하여 정리하였습니다). 간단히 말하면 Web용으로 게임을 저장하고, 투고 사이트에 올리는 것만으로도 자기가 만든 게임을 세계에 공개할 수 있습니다. 이렇게 사용하기 쉬운 환경이라면 생각한 것을 금방 손쉽게 구현할 수 있고, 시사 자료는 동영 상을 찍어 YouTube나 니코니코 동영상 에 업로드 하면 주목 받을 수 있습니다. 또 게임 개발 에 입문하기 쉬운 것은 물론, 게임 공개도 정말 간단해서 사용자를 기쁘게 하기 위한 길이 단 축된 것은 동기 유지에 큰 힘을 발휘한다고 생각합니다. 환경이 있어도, 그림이나 사운드는 내가 만들 수 없어 라는 사람도 포기하지 않아도 됩니다. Unity에는 Asset Store 라는 소재를 업로드 / 다운로드 할 수 있는 사이트까지 있으므로 다양한 프로 레벨의 그래픽, 사운드를 쉽게 손에 넣을 수 있습니다. Asset Store 소재는 무료인 것과 유 료인 것이 있습니다만, 이들을 보면서 두근거리는 중에 나는 그래픽을 만들 수 없으니까 라는 소극적인 생각은 점점 작아지고 오히려 자신이 생각한 주제에 사용할 수 있는 소재를 만나 면 시장에서 물 좋은 생선을 산 요리사와 같은 열정으로 개발에 몰입할 수 있을 것입니다. 이러한 혁명적인 환경 덕분에 이미 50만명(!)이나 되는 사람들이 Unity의 사용자가 되어 3D 게임 개발의 문턱을 넘어서고 있습니다. 이 사람들 중에는 입문자만 있는 것이 아닙니다. 다 수의 게임 개발의 프로도 종래의 환경에서 Unity로 갈아타고 있습니다. Unity는 훌륭한 프로 레벨의 게임을 만드는 환경으로, 예전 같으면 엄청난 돈이 드는 일선 급 의 게임을 만드는 풀 세트를 누구나 손에 넣을 수 있습니다. 프로 급의 개발자라면 더더욱 놓 칠 수 없는 선택이라고 강조하고 싶습니다. Unity를 업무에 사용하지 않거나 사용하거나 상관없이 앞서 언급한 것처럼 아주 작은 절차로 게임의 형태를 준비하고, 몇 번의 클릭으로 게임을 투고 공개할 수 있는 공정이나, Asset http://www.nicovideo.jp/ 일본의 동영상 공유 사이트 Asset이란 그래픽이나 사운드 등의 게임용 부품을 말합니다. vi 유니티 3D
Store 등의 커뮤니티에 모이는 사람들, 업로드 되는 데이터의 물량, 충실한 열정은 눈여겨볼 가 치가 있습니다. 이 후의 게임 개발의 현장에는 많은 Unity 경험자 가 올 것이므로 개요만이 라도 파악해 두면 도움이 될 기회가 있을 것입니다. 물론, 시원스럽게 Unity로 갈아타는 편이 낫다라고 판단하는 사람이 많은 것도 사실입니다. 그 러한 판단을 위해서는 실습해 보는 것이 가장 좋으므로 여기까지 읽으셨으면 2장, 3장까지 실 습해 봅시다. 프로라면 1시간 정도면 될 것입니다. 또, 이 책에서는 Unity는 어떻게 되어 있나? 라는 독자도 보기 좋도록 중급 이상의 사람이 알아야 하는 응용적인 것은 생략하고, 모든 장에 Major한 기능 소개를 하였습니다. 따라서 읽 기 시작해서 10~15분 정도면 개요를 파악할 수 있을 것입니다. 보다 깊게 알고 싶을 때는 공식 커뮤니티나 Asset Store가 강력한 정보의 보고가 될 것입니다. 일본어의 경우 는 Facebook 페 이지에서 정보 교환이 활발히 이뤄지고 있으므로 적극적으로 참여하면 좋을 것입니다. Unity 사용자가 서로를 돕는 곳 (unityuserj@groups.facebook.com) 그리고 머리말의 마지막으로 한 가지 큰 주의점을 말하고자 합니다. 게임 개발은 진행하면 진행할수록 여러 가지 문제와 만나게 됩니다. 반드시 나온다고 해도 좋 을 것입니다. 앞서 Unity를 사용하면 아주 편해진다고 썼지만 고난이 없어지는 것은 아닙니 다. 그리고 어떤 고난을 만날지는 각각의 사람에 따라 다릅니다. 당연한 이야기입니다만, 고난을 넘어서기 위해서는 동기를 어떻게 유지하는지가 매우 중요합 니다. 벽에 부딪혔을 때는 혼자서 떠안고 있지 마세요. 거대한 수의 Unity 사용자가 있는 것, 의지할 수 있는 커뮤니티가 있는 것, 벽에 부딪혔을 때 바로 공개하고 같이 고민해 줄 사용자 가있는것등한걸음, 두 걸음 앞에는 열린 세계가 있는 것을 생각하여 발걸음을 멈추지 말고 진행합시다. Unity가 열어준 길은 앞서 간 많은 사람들에 의해 다져져 있고, 그리고 그 많은 사람들이 그 길 을 걷고 있습니다. 게임 개발에 꿈을 가진 적이 있다면 반드시 계속 가볼 만한 가치가 있는 길 이라고 생각합니다. 2011년 8월 4일 미야가와 요시유키 http://www.unity3dkorea.com/http://www.facebook.com/groups/ 172155986199569/ 머리말 vii
이책의구성 이 책의 구성은 아래와 같습니다. 1장 Unity란 Unity로 어떤것을만들수있는가, 또 실제로 만들어져 있는가를 소개합니다. Web, iphone, Android, PSP(PlayStation Portable), Wii, Xbox 360, PS3(PlayStation3)를 위한 애플리케이션을 아주 간단한 절차로 개발하고 배포할 수 있는 Unity의 가능성을 피부 로 느껴 주세요. 이 장에서는 우선 Unity의 개요에 대해서 설명합니다. 그리고 Unity를 실제로 인스톨하고 시작하여 초기화면을 표시해 보겠습니다. 2장 모든 것의 기본, 무대와 배우와 대본(스크립트) Unity를 설치하고 바로 게임을 만들어 보고 싶다! 라는 기분은 굉장히 중요합니다. 이 장에서는 이렇게 게임을 만드는구나! 를 속공으로 실감할 수 있도록 최소한의 설명 으로 Scene을 구축해 보겠습니다. 지면과 플레이어와 그것을 비추는 조명이라고 하는 최소 구성의 Scene의 설정 방법에 대해서 설명하고, 플레이어에게는 인간의 조작에 대 응하는 대본 (스크립트) 을 부여해 조작에 반응하는 묘미를 느껴보세요. 3장 물리 시뮬레이션 된 오브젝트 배치 이 장에서는 Unity에 처음부터 준비되어 있는 Primitive(상자, 구체, Cylinder, Plane)를 다룹니다. Scene에 플레이어 이외의 오브젝트(간단한 상자나 구체 등)를 소도구로 배 치하고, 이들 오브젝트에 물리 속성을 부여함으로 조작 플레이어에 닿으면 움직이는 등 viii 유니티 3D
의 설정 방법을 설명합니다. 간단한 예로 슈퍼 마리오와 비슷한 장치를 만드는 방법을 소개하고, 게임 디자인이나 컨셉트 디자인을 Unity상에서 바로 시험할 수 있는 재미를 느껴보겠습니다. Primitive만으로 충분한 세계를 구축할 수 있다는 것을 체험해 보겠습 니다. 4장 그래픽 배치하기 이 장에서는 Scene속에 배치된 오브젝트에 텍스처를 입혀 보겠습니다. Unity의 샘플 Asset을 import 하고, 게임에서 자주 등장하는 벽이나 지면 등의 텍스처를 활용하여 사 용할 수 있는 소도구 오브젝트도 배치하는 등 프로다워 보이는 Scene도 간단하게 만들 수있는 Unity의 묘미를 느껴보겠습니다. 5장 사운드 이 장에서는 Unity의 샘플Asset을 import하여 게임이 시작되었을 때의 음악이나, 플레 이어가 점프 또는 착지하였을 때 울리는 효과음 등을 입혀 보겠습니다. 사운드를 입히 면 퀄리티가 한 단계 올라갑니다. 6장 스크립트 게임 만들기의 기본인 무대 디자인(레벨 디자인)이 가능하게 되었다면, 다음은 게임 전 체를 조립하여 무대와 무대를 잇는 방법, 스크립트를 조합하는 방법을 배웁니다. 이 장 에서는 기본인 타이틀 화면 게임 중의 Scene 게임 오버 타이틀 화면 이라는 Scene의 전이를 작성합니다. 7장 전체를 보았다면, 더욱 게임답게 이 장에서는 지금까지 Primitive 등의 간단한 조형이었던 가상의 플레이어를 드디어 사 람 모양의 모델로 바꿔서 액션에 맞는 움직임을 시켜 보겠습니다. 게임 중의 세계를 효 율적으로 작성하기 위한 Prefab 이나 Hierarchy 같은 개념과 기능도 소개, 실습 하겠습니다. 이책의구성 ix
8장 애니메이션 애니메이션이라고 하면 캐릭터를 상상하는 사람도 많을 것이라 생각합니다만, 이 장에서 는우선기초중의기초 Parameter의 캐릭터 조작의 개요 를 설명하고, 슈퍼 마리오 브라더스 등에서 익숙한 이동하는 마루나 카메라 애니메이션을 작성해 보겠습니다. 9장 Lighting 이 장에서는 배치할 수 있는 조명의 종류에 대해서 설명합니다. Specular나 Spot light 등 Shader 에 의해 달라지는 동작 내용에 대해서 배웁니다. 10장 렌더링 앞 장까지 실습해 온 텍스처나 조명에 더해서 영상을 보다 풍부하게 하기 위한 Shader 나 Unity가 지원하는 몇 가지의 렌더링 기법에 대해서 설명합니다. Shader를 조절함으 로써 물체에 요철 등의 질감을 더하거나 보다 실제적인 그림자나 조명을 부여하는 기법 을 소개합니다. 11장 풍선 터뜨리기 게임 만들기 이 장에서는 배워 온 것을 응용해서 공중에 떠있는 풍선을 화살로 맞추는 게임을 만들 어 보겠습니다. 간단하지만 게임으로 완결된 것을 만들어 보겠습니다. 12장 파티클 11장에서 만든 풍선에 터지는(탄이 닿고 사라지는) 순간의 이펙트를 부여해 보겠습니 다. 그리고 탄이 물체에 닿았는지를 알기 쉽게 하기 위해서 충돌 시에 파티클이 나도록 하는 것을 실습하고, 파티클이 게임을 알기 쉽게 하는 모습을 소개합니다. 13장 플랫폼에 출력하기 x 유니티 3D
이 장에서는 Windows/Mac 이외에 모바일을 위한 환경에서의 빌드와 실행의 순서를, 준비를 포함해서 해보겠습니다. 14장 플랫폼과 라이선스별 차이 모바일 환경에서는 실시간 Time Shadow를 사용할 수 없는 것과 Unity의 라이선스 별 로 제한이나 장점을 설명합니다. 도입을 생각할 때에 자신에게 맞는 라이선스를 잘 이 해합시다. 15장 게임 엔진의 숨겨진 진가 Unity를 사용하여 제작할 때 무엇인가 곤란한 경우에 직면하였을 경우 그것이 이미 다 른 누군가가 곤란하여 커뮤니티에 질문하였거나 답변이 있는 경우가 많습니다. 보다 좋은 해결책 등의 정보를 얼마나 빨리 손에 넣을 수 있는지가 순조로운 제작의 열쇠라 고 할 수 있습니다. 이러한 도움이 되는 유용한 사이트가 Unity 공식 커뮤니티 이외에 도 다수 있습니다. 이 장에서는 Web에서 정보를 모으는 방법을 소개합니다. 영어에 좌 절하면 안됩니다! 사용상의 주의 이 책에서 소개하는 모든 스크립트, 툴, 조작 절차나 리소스는 동작함을 확인하였습니다 만, 저자는 이들이 독자의 환경에서도 정확하게 동작하는 것에 대해서는 보증하지 않습 니다. 또 이들을 사용함으로 인해 발생하는 손해에 대해서 필자들은 책임지지 않습니 다. 이 책의 정보는 자기 책임하에 이용하시기 바라며, 제품 레벨의 신뢰성이 요구되는 환경에서 이용하는 경우는 다시 한번 동작 확인을 하실 것을 강력하게 추천 드립니다. 이 책은 독자 여러분의 작업을 도와드리기 위해 집필되었습니다. 원칙적으로 이 책에 서 소개하는 코드는 독자 여러분의 프로그램이나 문서 등에서 자유롭게 사용하셔도 상 관없습니다. 코드는 대부분 그대로 복사하여 서적이나 기사 등을 작성하는데 이용하시 지않는한, 특별히 허가를 받으실 필요도 없습니다. 예를 들어, 이 책의 코드 일부분을 사용해서 프로그램을 작성하거나, 질문을 받았을 때에 이 책의 기술이나 샘플 코드를 인용해서 답변하거나 하는 경우에 허가는 필요하지 않습니다. 하지만 오라일리의 서적 이책의구성 xi
으로부터 샘플 코드를 복사한 CD-ROM을 판매 및 배포하거나, 이책중의샘플코드의 대부분을 복사해서 제품의 문서에 포함하거나 하는 경우에는 미리 허가를 받아주세요. 이 책의 내용을 인용할 경우는 출처(서명, 저자, 출판사, ISBN 등의 정보)를 명기해 주 세요. 위에서 언급한 바와 같은 조건 외에 샘플 코드를 사용하고 싶은 경우는 japan@oreilly.co.jp에 가벼운 마음으로 상담해 주세요. xii 유니티 3D
이 책의 내용은 최대한의 노력을 다해서 검증 및 확인하고 있으나 실수, 부정확한 점, 오해나 혼란을 일으킬 수 있는 표현, 단순한 오타 등이 눈에 띌 수 있습니다. 이 책을 읽 으면서 느낀 점은 이 후의 개정판에 개선할 수 있도록 저희에게 알려주세요. 장래의 개 정에 관한 제안 등도 환영합니다. 연락처는 아래와 같습니다. 주식회사 오라일리재팬 우편번호 160-0002 東 京 都 新 宿 區 坂 町 26 番 地 27 インテリジェントプラザビル1F 전화 03-3356-5227 FAX 03-3356-5261 전자메일 japan@oreilly.co.jp 이 책에 대한 정오표나 추가 정보 등은 다음 Web 사이트를 참조해 주세요. 이 책의 샘 플 프로그램도 여기에서 다운로드 할 수 있습니다. http://www.oreilly.co.jp/books/97848731150614 이책의샘플게임은UnityGames 사이트에서 실행해 보실 수 있습니다. UnityBasic 이라는 키워드로 검색해 주세요. 소스 코드에의 링크도 있으므로 여기에서 샘플 프로 그램을 다운로드 할 수 있습니다. http://unity-games.appspot.com/ 이 책에 관한 기술적인 질문이나 의견은 다음 메일 주소로 보내 주세요. japan@oreilly.co.jp 오라일리에 관한 그 밖의 정보(문헌, 회의, 리소스 센터, O Reilly Network에 관한정 보)는 다음의 O`Reilly의 웹 사이트를 참조해 주세요. http://www.oreilly.co.jp/ http://www.oreilly.com/ (영어) 이책의구성 xiii
감사의 말 미야가와 요시유키 이 책의 집필에 있어서 활발하게 개최되고 있는 모든 개발 스터디에서 열의와 성의를 가지고 참여하시는 모든 분께 감사드립니다. 충실한 자료나 내용을 갖추는데 수고를 아끼지 않는 개발자 여러분의 뜨거운 의지가 이 책과 같은 큰 일을 책임지고 맡을 수 있 게 한 원동력이 되었습니다. 또 Unity에관한강연, 등단의 기회를 여러모로 준비해주신 IGDA의 아라타 씨, 오노 씨 도 감사합니다. 덕분에 일본에서 Unity Technologies의 여러분과 실제로 만나거나 대 화할 수 있었고, 이렇게 책을 쓰게 되는데 하나의 경위가 되었습니다. 이 책의 샘플 게임을 업로드할 수 있도록 UnityGames의 사용을 허가해주신 이즈미 씨 와안도씨, 쾌히 승낙해 주셔서 감사합니다. UnityGames는 Unity를 배우는 일본어 리 소스로써 훌륭한 사이트입니다. 그리고 이 책의 기획을 해주신 오라일리 재팬의 미야가와 요시유키 씨, 같이 집필하는 것을 흔쾌히 허락해주신 무토 씨, Unity가 세계에서 일본에서 점점 보급되는 중, 이타 이밍에 이러한 책을 낼 기회를 얻은 것은 굉장히 멋진 일이라고 생각하며, 두 사람이 만 나지 않았다면 절대로 이뤄낼 수 없는 것이었습니다. Unity Technologies사의 CEO David. 로바다야끼 맛있었습니다. 잘 먹었습니다. 창업 자 두 분의 이야기를 직접 들을 수 있었던 것, 기술은 물론이고 브레이크 전 나날의 헝 그리 정신이 가득했던 이야기를 들을 수 있었던 것, 자원하여 강연을 몇 번이나 해도 좋 았다고 생각했던 훌륭한 수확이었습니다. 그리고 Unity Technologies 일본 지부 담당의 오오마에 씨. 아주 속속들이 스스럼없이 xiv 유니티 3D
질문해서 미안했습니다. 유럽과 미국에 스스럼없이 개발 교류가 가능한 동료가 있는 것만큼 고마운 것은 없습니다. 마지막으로 가족 모두. 정말로 가족을 희생하게 하고 날마다 반복해서 일해서 미안합 니다. 가끔씩 소풍 등으로 즐겁게 노는 모습을 보면 고마운 마음이 들었습니다. 가족에 대한 감사를 어떻게 써야 하는지 다른 책을 보니 이혼 상담소에 가지 않아줘서 고마 워 라던지, 어디나 궁지에 몰리는 것은 자주 있는 것 같습니다. 마감 기일이 있는 일을 하고 있는 자의 숙명에 지금껏 그래 줬듯이 계속 옆에 있어 주시길. 무토 다이스케 제가 게임 제작을 본격적으로 시작하려고 했던 시기는 아직 C++과 기본적인 라이브러 리를 사용한 게임을 지도에 만들어 가는 것이 주류였습니다. 게임 제작에도 익숙해지 고 게임의 개발은 더 편해지겠구나 생각하면서 여러 가지 개발 기술을 찾고 있던 중에 알게된것이Unity입니다. 당시 Unity의 개발 환경은 Mac만을 사용할 수 있었으므로, Unity를 사용하기 위해서 Mac환경을 준비해서 Mac 사용자가 되었습니다. Unity를 사용하기 시작하였지만 Unity 자체가 아직 인터넷 상에서도 그다지 알려져 있 지 않았습니다. 특히 일본에서 Unity를 알고있는, 혹은 사용하고 있는 사람은 그다지 없는 상황이었습니다. Unity를 혼자만이 아니라 더욱 많은 사람에게 알리고 게임 제 작의 즐거움을 모두에게 느끼게 해주고 싶다 이러한 생각으로 지금까지 나름의 보급 활동을 해 왔습니다. 이러한 Unity입니다만 지금은 유명 뉴스 사이트에서도 자주 이름 을 올리게 되었고, 개발자를 위한 이벤트가 있으면 거기에는 Unity의 세션이 마련되어 만원이 되거나 제가 상상한 이상으로 활기와 열기도 있어 Unity의 사용자는 매일 늘어 나고 있습니다. 또 이전에는 빈약했던 일본어 기술 정보를 발견하는 기회도 늘고 있습 니다. 이러한 상황 중에 Unity를 보다 많은 사람들이 사용하게 하기 위해서는 아직 Unity를 감사의 말 xv
모르는 층의 사람들에게 정보를 전달하지 않으면 안되겠다. 라는 생각을 하던 차에, Unity를 사용한 게임 제작의 입문서인 이 책의 집필 이야기를 듣게 되었습니다. 집필 의뢰를 받아들인 이유는 종이 매체의 서적인 경우 예전의 제가 그랬던 것처럼 지나치는 기분으로 서점에 발을 들여 놓았을때이책이눈에들어와 이거, 재미있게 만들어 볼 수있을것같네.게임한번만들어볼까? 하고 손에 들 수 있을지도 모르고, 우연 혹 은 운명적으로 Unity를 알게 되는 기회가 늘지 않을까 생각했기 때문입니다. 이런 정열 을 품고서 집필 작업에 들어갔고, 그것은 마치 마라톤과 같이 결코 편한 길은 아니었습 니다. 저는 예전부터 서점에 드나들며 지금까지 많은 정보를 서적으로부터 얻었습니다. 그것 이 양식이 되어 지금이 있다고 해도 과장이 아닙니다만, 제가 쓸 순서가 되었다고는 상 상조차 하지 못했습니다. 이 책을 기획한 오라일리 재팬의 미야가와 나오키 씨에게는 이러한 기회를 주셔서 감 사하고 있습니다. 또 같이 집필한 주식회사 제페트 대표이사이신 미야가와 요시유키 씨에게는 저의 담당 부분을 포함해서 많은 도움을 받았습니다. 감사합니다. 그리고 두 분의 지원에 더해서 신세를 지고 있는 주위의 많은 분들에 의한 후의는 물론, Unity를 북돋우려 활동을 하고 계신 분들의 모습에서 활력을 얻었고, 지금부터 Unity를알게되 신분, 그리고 이 책을 여러분께 들려 드리고 싶은 바램이 제 등을 밀어주어 목표까지 도달할 수 있었습니다. 모든 분께 깊이 감사드립니다. 이 책은 게임 제작이 처음이어도 쉽게 시작할 수 있고, 실습을 통해서 단계별로 배워 갈 수 있는 구성으로 되어 있습니다. 소년 시절의 저와 마찬가지로 게임을 가지고 놀 며 나도 만들어 보고 싶다 라는 꿈을 가진 분에게 이 책을 드려 게임을 만드는 것 은 어렵지 않네. 재미있다. 라고 느낄 수 있게 된다면 행복하겠습니다. 그것이 저의 숙원입니다. xvi 유니티 3D
저자 소개 미야가와 요시유키 주식회사 제페트1 (http://www.geppetto.co.jp/) 대표이사. 게임 프로그래머. 게이 머. 20년 전, 고교 2학년 때에 17만엔을 아르바이트로 모아서 당시 Sharp사 컴퓨터 X68000 을 구입. 기술 서적을 매월 구입하여 꾸준히 소프트웨어 개발을 독학. 18 세 때 주식회사 스퀘어(현재 스퀘어 에닉스)에 입사. 당시 처음 고졸 정사원이 되어 성검전설, 제노기어스, 크로노 크로스 등으로 영상 기술을 개척, 파이널 판타지 XI 에서 메인 프로그래머를 담당. 그 후, 주식회사 제페트를 설립. 현재는 iphone용 게임 개발에 주력하여 iyamato, PocketVegas, LightBike2 등으 로 히트를 더해, 항상 새로운 경지를 개척하고 재미있는 것에 도전하는 나날을 보내 고있다. twitter.com/hotmiyacchi 무토 다이스케 프리랜서 소프트웨어 개발자. IT Web 관련 소프트웨어, 서비스 개발 외 일본에서는 가장 처음으로 Unity를 사용하고 여러 가지 조건에서 활용하고 있다. Unity로 개발한 게임의 대표작은 LIghtBike2 (iphone/ipad 대응). 취미는 게임을 철들기 전부터 접 해온 내추럴 본 게이머인 것. 또, 정신력과 기술도 중시하여 스포츠나 운동에도 습관적 으로 부지런히 힘쓰고 있다. 자주하는 활동으로는 자신만의 일을 이루는 것, 상호의 지 지를 신조로 하고, 강한뜻아래사이트(http://dai2pon.net/)나 서클MURAKATO.NET 을 통해서 의욕적으로 활동 중. 현재, http://www.appbankgames.net/ 로 사명을 변경하였다. 저자 소개 xvii
역자 서문 누구라도 Rich한 3D 콘텐츠를 만들 수 있다. 라는 것이 Unity의 미션입니다. 저는 일본에서 프로그래머로의 삶을 시작하였습니다. 일본에서 같이 일하던 동료에게 여러 가지 모습을 보았는데, 그중 가장 놀랐던 것 중 하나가 엑셀을 가지고 매우 다양 한 일들을 하고 있다는 것이었습니다. 다양한 매크로를 활용하여 이렇게도 사용할 수 있구나! 하고 매우 놀랐던 기억이 있습니다. 심플하게 보이는 툴이지만 목적과 활용하 는 숙련도에 따라 다양한 가치를 가져다주는 것을 깨닫는 순간이었습니다. 최근에 스마트 폰과 스마트 TV의 등장으로 양질의 3D 콘텐츠가 보급될 수 있는 환경이 만들어졌습니다. 게임뿐만 아니라 다양한 형태의 인터페이스가 요구되는 시대입니다. 게임이 실행될 수 있는 좋은 플랫폼이 마련되었고 그에 맞는 하드웨어도 등장하였습니 다. 이제 필요한 것은 그것을 활용할 좋은 콘텐츠입니다. 앞서 언급한 Unity의 미션은 누구라도 Rich한 3D 콘텐츠를 만들 수 있게 하는 데 있습니 다. 앞서 엑셀이 비즈니스 목적에 필요한 기능을 다른 솔루션보다 충실히 제공하였다면, Unity는 3D 콘텐츠를 만들어내는데 다른 엔진보다 훌륭한 기능을 제공하고 있습니다. 이책은3D 게임 제작 과정을 영화 제작에 비유하여 설명합니다. 배우를 정하고, 무대 를 만들며, 시나리오를 작성하고, 사운드를 울리고, 조명을 비추고, 화면과 화면을 잇 고, 시작과 엔딩을 작성하는 방법 등을 순서대로 설명합니다. 이 책은 Unity를 경험해 보지 못한 분이나 게임 개발의 과정이 궁금한 입문자에게는 좋은 가이드가 될 것이라고 확신합니다. 이책은Unity는 3.4 버전 기반으로 설명되어 있으나 소개되는 프로젝트는 3.5 이상의 Unity에서 실행하는 데 문제가 없습니다. 프로젝트를 열었을 때 요구하는 업그레이드 버튼을 간단히 클릭만 하면 됩니다. xviii 유니티 3D
좋은 책을 번역할 기회를 주신 지앤선의 김지영 이사님과 기획부터 출간까지 수고 많으 셨던 김대현 대리님께 감사드립니다. 그리고 퇴근 후 늦게까지 번역하느라 신경을 써 주지 못했지만, 예쁘고 귀한 유하를 잘 낳아주고 길러준 사랑하는 아내 은영에게 감사 의 마음과 사랑을 전합니다. 남종환 역자 소개 남종환 일본에서 프로그래머 삶을 시작하였고 현재는 SGA 에서 보안 관제 솔루션을 개발하 고있다. 국가 주요 기관에 적용된 보안 관제 솔루션의 3D 시각화에서 Unity의 가능성을 보았다. 차세대 보안 관제 모델을 연구 중이며 사랑하는 아내 은영 그리고 이제 100일이 된 유 하와 즐겁게 살아가고 있다. 역자 소개 xix
차례 이 책의 출판에 즈음해 ⅲ 머리말 Ⅴ 이 책의 구성 ⅷ 감사의 말 ⅹⅳ 저자소개 ⅹⅶ 역자 서문 ⅹⅷ 역자 소개 ⅹⅸ CHAPTER 01 Unity란? 1 1.1 Unity의 입수 2 1.2 최초 시작 3 1.3 이 책의 샘플 게임 4 CHAPTER 02 모든 것의 기본, 무대와 배우와 대본(스크립트) 6 2.0 샘플 게임의 실행 6 2.1 게임의 신규 작성 7 2.2 오브젝트의 생성 9 2.3 위치의 조절 11 2.4 편집 화면의 카메라 조작 13 xx 유니티 3D
2.5 오브젝트에의 컴포넌트 추가 14 2.6 Unity로 게임을 만드는 과정의 정리 16 2.7 대본은 JavaScript 16 CHAPTER 03 물리 시뮬레이션 된 오브젝트 배치 19 3.0 샘플 게임의 실행 19 3.1 Primitive 20 3.1.1 Primitive의 작성 20 3.1.2 미리보기 22 3.2 Rigidbody 컴포넌트 23 3.2.1 Rigidbody 컴포넌트의 추가 24 3.2.2 Rigidbody를 누르는 스크립트의 추가 26 3.2.3 스크립트 컴포넌트의 추가 32 3.2.4 미리보기 33 3.3 플레이어를 따라 다니는 카메라 만들기 34 3.4 자발적으로 움직이는 오브젝트 만들기 36 3.4.1 다리 Primitive의 작성 37 3.4.2 다리의 이동 38 3.4.3 회전의 추가 41 3.4.4 다리 건너편에 섬 만들기 43 3.4.5 회전하는 다리 미리보기 45 3.5 맺음말 46 CHAPTER 04 그래픽 배치하기 47 4.0 샘플 게임의 실행 47 차 례 xxi
4.1 텍스처의 적용 48 4.1.1 Material의 작성 48 4.1.2 텍스처의 준비 50 4.1.3 Material에 텍스처를 적용 53 4.1.4 오브젝트에 Material 적용하기 55 4.2 3D 모델의 배치 57 4.2.1 3D 모델이란? 57 4.2.2 Unity Asset Store 58 4.2.3 벽의 배치 66 4.2.4 가로등의 배치 71 4.2.5 토관의 배치 73 4.3 알고리즘으로 만드는 텍스처(Allegorithmic Substances) 74 4.4 맺음말 78 CHAPTER 05 사운드 79 5.0 샘플 게임의 실행 80 5.1 오브젝트에 Audio Listener 컴포넌트를 추가 80 5.2 회전 다리에 소리 입히기 81 5.2.1 The Freesound Project 82 5.2.2 음성 파일의 추가 89 5.2.3 Audio Asset의 Setup 91 5.3 발소리를 내기 93 5.3.1 발소리 스크립트 93 5.3.2 Bootcamp 프로젝트의 Sound Asset의 활용 94 5.3.3 미리보기 108 5.4 MUSIC 109 5.4.1 게임 음악 110 xxii 유니티 3D
5.4.2 BGM의 입수 110 5.4.3 BGM의 삽입 113 5.4.4 공장 섬의 BGM 삽입 119 5.4.5 미리보기 120 5.5 맺음말 121 CHAPTER 06 스크립트 123 6.0 샘플 게임의 실행 123 6.1 타이틀 화면이나 게임 오버를 연결하는 스크립트 124 6.2 타이틀 화면을 만들고 UI 작성하기 124 6.2.1 UI 스크립트의 작성 125 6.3 게임 오버 만들기 133 6.3.1 플레이어 사망 판정하기 134 6.3.2 함수의 오버 라이드와 MonoBehaviour 136 6.3.3 다른 스크립트 내의 함수의 호출(플레이어 측의 함수의 호출)137 6.4 맺음말 139 CHAPTER 07 전체를 보았다면, 더욱 게임답게 141 7.0 샘플 게임의 실행 141 7.1 캐릭터를 모델로 142 7.1.1 Scene에 캐릭터 모델을 추가 142 7.1.2 캐릭터 모델 바꾸기 143 7.1.3 Character Controller의 수정 146 7.1.4 캐릭터에 애니메이션 추가하기 147 7.1.5 캐릭터 애니메이션 스크립트의 적용 148 차 례 xxiii
7.2 Projector에 의한 유사 그림자 152 7.2.1 Projector 패키지 153 7.2.2 Projector 프로퍼티 155 7.3 장치의 추가 161 7.3.1 Floor의 작성 162 7.3.2 Floor의 회전 165 7.3.3 다수의 회전 Floor 배치 171 7.3.4 목표 Floor의 배치 172 7.3.5 DeadZone의 확대 173 7.3.6 텍스처의 할당 174 7.3.7 3D 모델의 활용 177 7.4 Skybox(스카이 박스) 178 7.5 맺음말 183 CHAPTER 08 애니메이션 185 8.0 샘플 게임의 실행 186 8.1 애니메이션의 원리 186 8.1.1 Animation 컴포넌트와 Animation Clip 187 8.1.2 Animation Clip의 작성 188 8.1.3 Wrap Mode(랩 모드) 198 8.1.4 Animation 뷰의 기본 조작 201 8.2 전진 후퇴 리프트의 작성 205 8.2.1 자식 오브젝트의 Animation 207 8.2.2 Tangent(탄젠트) 214 8.2.3 리프트의 복사 219 8.3 카메라 애니메이션 223 8.3.1 섬을 Prefab으로 만들기 223 xxiv 유니티 3D
8.3.2 카메라 애니메이션의 작성 229 8.4 맺음말 236 CHAPTER 09 Lighting 237 9.0 샘플 게임의 실행 238 9.1 밤 분위기 표현 238 9.1.1 Ambient Light(환경 광)의 배치 239 9.1.2 Fade Out을 사용한 Skybox로 전환 240 9.2 고속도로의 작성 244 9.2.1 도로의 배치 245 9.2.2 가로등의 설치 248 9.2.3 자동차의 배치 259 9.2.4 평행 광원 268 9.3 맺음말 276 CHAPTER 10 렌더링 277 10.0 샘플 게임의 실행 277 10.1 Shader(셰이더) 278 10.1.1 Diffuse Shader 279 10.1.2 Bumped Diffuse Shader 280 10.1.3 Specular Shader 282 10.1.4 Bumped Specular Shader 285 10.2 Rendering Path(렌더링 패스) 287 10.2.1 Rendering Path의 지정 288 10.2.2. Rendering Path의 종류 289 차 례 xxv
10.3 Lightmapping(라이트 매핑) 293 10.3.1 Lightmapping이란? 293 10.3.2 Lightmap의 생성과 준비 294 10.3.3 Lightmap의 생성 299 10.3.4 미리보기 302 10.4 맺음말 303 CHAPTER 11 풍선 터뜨리기 게임 만들기 304 11.0 샘플 게임의 실행 304 11.1 게임의 사양 305 11.2 캐릭터 카메라의 기본적인 설정 306 11.3 무대 Set의 배치 309 11.3.1 Floor의 배치 310 11.3.2 벽의 배치 312 11.3.3 Lighting 315 11.4 플레이어용 검 만들기 318 11.4.1 모델의 입수 318 11.4.2 검 Prefab의 작성 318 11.4.3 발사 스크립트 324 11.4.4 풍선의 작성 326 11.4.5 스코어와 Stage Clear 330 11.5 맺음말 334 CHAPTER 12 파티클 335 12.0 샘플 게임의 실행 336 xxvi 유니티 3D
12.1 Particle System 오브젝트 336 12.2 곤충 만들기 338 12.3 충돌하는 불꽃 만들기 342 12.3.1 파티클의 작성 343 12.3.2 Prefab의 작성 349 12.3.3 스크립트의 추가 350 12.4 폭발 효과내기 351 12.4.1 부모 오브젝트의 작성 352 12.4.2 섬광의 파티클 354 12.4.3 불꽃 파티클 359 12.4.4 연기의 파티클 366 12.4.5 폭발 Prefab 372 12.4.6 풍선에 배치 374 12.4.7 폭발 미리보기 376 12.5 내리는 눈의 작성 376 12.5.1 파티클의 작성 377 12.6 맺음말 380 CHAPTER 13 플랫폼에 출력하기 381 13.0 샘플 게임의 실행 381 13.1 빌드 382 13.1.1 Standalone으로 빌드 382 13.1.2 Web Player에의 빌드 385 13.1.3 ios에의 빌드 387 13.1.4 Android에의 빌드 403 13.2 모바일 대응 407 13.2.1 표시 방향의 변경 407 13.2.2 UI(User Interface)의 변경 408 차 례 xxvii
13.3 Unity Remote 413 13.4 맺음말 413 CHAPTER 14 플랫폼과 라이선스별 차이 414 14.1 메모리의 한계 414 14.2 실시간 그림자 415 14.3 라이선스에 따른 차이 415 14.3.1 표준 기능 416 14.3.2 Pro 버전의 기능 1 : 강화된 최적화 416 14.3.3 Pro 버전의 기능 2 : 공동 작업 기능 417 14.4 맺음말 418 CHAPTER15 게임 엔진의 숨겨진 진가 419 15.1 정보 수집의 세 가지 기둥 420 15.1.1 Unity 공식 커뮤니티 420 15.1.2 영어에 좌절 금지 421 15.1.3 무수히 많은 정리 사이트 422 15.2 게임을 만드는 새로운 방법 : Asset Store 423 15.3 맺음말 425 맺으면서 426 찾아보기 428 xxviii 유니티 3D