유니티 게임프로그래밍 개발입문 방법 로드맵

알아야할 두 가지

Unity 게임개발(프로그래밍)에서는 가장 크게는 아래와 같은 것을 알아야합니다.

  • C# 언어
  • 닷넷 프레임워크 API
  • 유니티 게임엔진 에디터
  • 유니티 프레임워크 API

두 가지로 줄인다면 프레임워크는 어차피 포함되는 것이니 C#유니티에 대해서 알아야하죠.

프로그래밍이란 걸 해본적 없는, 혹은 다른분야를 찍먹정도만 해봐서 잘 모르겠는 사람을 위해 이 두가지를 어떻게 공부할 것인가의 로드맵을 제시해보려합니다.

비주얼 스크립팅, 코드없이 게임을 만든다?

유니티도 뒤늦게 비주얼 스크립팅을 지원하게 되었는데요. 비주얼 스크립팅이란 문자(코드)로 프로그래밍을 작성하는 대신 네모상자에 줄을 이어서 프로그래밍하는 것으로, Bolt(볼트), 플레이메이커 같은 에셋이 비주얼 스크립팅입니다. 언리얼에서는 블루프린트라고 하죠.

그런데 언리얼의 블루프린트도 그렇지만 그 것의 지위는 유니티에서는 늦게 지원한탓에 형편없습니다. 그리고 블루프린트나 유니티의 비주얼 스크립팅이나 원초적인 문제가 있는데요. 그것은 비주얼스크립팅을 배우는 것또한 만만치 않다는 것입니다. 결국 API에 상응하는 어떤 기능의 네모가 있는지 그 네모가 어떻게 작동하는지 알아야하는 방대한 지식이 필요합니다.

게다가 비주얼스크립팅으로 프로그래밍을 익히면 타인과 협업이 거의 불가하고(아무도 안하니까), 인터넷 카페등에도 질문하기 어려우며, 애초에 그것을 가르쳐주는 강의도 문자코딩에 비해서 상대도 안되게 적습니다. 결국 누구의 도움도 못받고 머리가 깨지게 되죠.

개인적으로 비주얼 스크립팅의 단점은 하루종일 떠들 수도 있으나 다음기회에 하기로하고 여러분들은 반드시 C#으로 시작하고 끝내시기 바랍니다. 만일 누군가 C#은 죽어도 못하겠고 비주얼스크립팅으로 하면안되냐고 묻는다면 저는 차라리 2D게임개발이 목표라면 게임메이커나 RPG메이커(쯔꾸르) 같은 보다 쉬운툴을 사용하여 게임을 만들라고 하겠습니다.

비주얼 스크립팅의 기능은 단지 기획자정도의 포지션에서 간단히 실험적으로 이것저것 해보는 용도로만 쓸 것을 추천합니다. 유니티 테크놀로지 측도 더이상 코드없이 게임만든다는 꿀빠는 소리로 사람들 현혹하는 걸 멈추고 차라리 유니티 엔진 버그나잡고, 쓰기쉬운 편의기능, 컴포넌트를 만들거나 더 훌륭한 튜토리얼을 만드는등 다른 것에 집중할 수 있길 바랍니다.

유니티 C#은 원래 C#과 다르다?

인터넷에 이런 말이 떠돌던데 전혀 그렇지 않습니다. 이것은 언어와 프레임워크(API)가 무엇인지, 그 관계가 어떻게 되는지 모르기때문에 하는 말일 뿐입니다. 유니티는 분명 정상적인 C#으로 프로그래밍 하는 것입니다. 다만 C# 최신기능 중에 지원안되는 몇가지가 있을 뿐이죠.

C# 먼저? 유니티 먼저?

많은 사람들이 C#은 모른채 유니티먼저 맨땅에 헤딩하면 된다고 말합니다. 은유적인 표현이긴하지만 그러다 머리가 먼저 깨질 수도 있습니다. 프로그래머의 길을 가기위해, C#을 공부하지 않은채로 유니티를 하다가는 6개월 걸릴 거 3년걸릴지도 모를 일입니다.

개인적으로는 C#을 먼저 할 것을 권유하지만, 대부분의 사람들이 C#을 하다가 어려워서 중간에 그만두는 사람이 많습니다. 그리고 C#책이든 강좌든 사실 유니티와 상관없이 순수하게 C# 언어 문법 자체에대해서만 가르치는 게 많습니다.

언어문법책은 단지 그 언어를 가르쳐줄뿐 언어학습단계 자체는 사실 게임개발과 무관하기때문이죠. 유니티가 C#을 사용하는 것이지 C#이 유니티를 위해 존재하는 건 아니기때문입니다. 이것은 C++과 언리얼도 마찮가지고 모든 언어가 그렇습니다.

게임개발을 하려고 하는 사람이 C#만 일주일 공부하고있자면 흥미를 잃기 일 쑤입니다. 도통 이게 게임개발과 무슨 상관인지 알 길이 없죠. 네, 상관없는 것이 맞습니다. 유니티로 넘어가고나서야 비로소 관계되기 때문이죠.

그래서 가능하다면 C# 언어의 극 초기부분을 해보고, 유니티에서 C#이 어떻게 쓰이는지 알아본다음 C#책 한권정도 정독한다음 (여유가 있다면 3독하세요) 유니티강좌로 넘어갈 걸 추천합니다.

C#은 책으로? 인강으로? 그냥 인터넷?

각각의 장점은 아래와 같을 것입니다.

  • 책: 내 바로 옆에있다. 커리큘럼(목차)이 한눈에 보인다. 공부하면서 정리해둔 보조노트가 있다면 함께 찾아보기 쉽다.
  • 동영상: 초반 입문에 좋다. 무엇을 조작하는지, 프로젝트를 어떻게 만드는지 눈으로 보며 따라하기 쉽다.
  • 인터넷: 내가 원하는 걸 찾기 쉽다. 손품을 팔면 더 자세한 정보가 넘친다.

c#은 좋은 책을 최소 한 권 살 것을 권합니다. 다 안읽어보더라도 책 한 권은 보유할 것을 강하게 권합니다. 책의 장점은 목차(커리큘럼)가 있어서 옆에두고 바로 펼쳐볼 수 있기때문에 레퍼런스삼는 한권 있는 게 좋습니다.

한번쯤 정독해본 이런 책이 있다면 그것을 중심으로 각각의 개념이나 알아야 할 것들을 추가로 검색해보고 찾아서 보충학습을 하면됩니다. 책은 개인 레퍼런스이며 커리큘럼의 로드맵으로 편리한 수단입니다.

그러나, 책은 동영상보다 초반이 어렵습니다. 책 앞머리에는 괜한 용어설명등 자질구레한 글이 많기도하죠. 반면 동영상은 강의자가 하라는대로 눈에보이는대로 따라 할 수 있습니다. 첫 프로젝트를 만들고 실행시키는 그런 부분은 동영상으로 보는게 제일 직관적이죠.

그런데 동영상은 체계적으로 정리된 경우가 적습니다. 유료강좌에서나 잘 정리되어있지 무료인 유튜브등은 어느게 먼저고 어느게 후인지도 모르겠고 체계적으로 동영상을 올린경우가 별로 없으며 중간에 업로드를 멈춘 자들이 넘칩니다.

학습 로드맵

이 로드맵이 정석도 아니고 개인적으로 본 것들 중에 부분이라서 이견은 있겠으나, 딱히 헤메고 싶은 생각이 없다면 이대로 따라 시작하는 것도 좋을 것입니다. 결국 이것저것 다 보게 될 겁니다만, 늘 공부할 환경과 시간 그리고 자신의 의지와 끈기가 핵심입니다.

아래 로드맵 번호중에 1), 2)번은 사실 안해도 됩니다. 다만, C#부터 하라고하면 대부분 C# 언어 자체는 게임개발과 직접연관되지 않아서 프로그래밍 쌩초보는 그 단계에서는 대체 이걸 뭘 배우는건지 알 수가 없다보니 거기서 포기하는 일이 많아요. 그래서 조금 돌아가더라도 흥미위주로 사전입문을 해보면 어떨까 해서 1,2를 넣었습니다.

만일 한다면 1,2는 단지 흥미위주로, 전체 파악하는 정도로, 따라하지 않고 집중해서 한번 듣기만하셔도 됩니다.

1) 인프런 유료강좌 rookiss 의 MMORPG 만들기 C# 기초 Part 1:

inflearn.com에 [C#과 유니티로 만드는 MMORPG 게임 개발 시리즈]가 있는데 시리즈 전체는 매우 비쌉니다. 초보라면 Part 1만 보는걸 추천합니다. 유료라서 못 보겠다면 안봐도 됩니다. 흥미위주의 C#공부는 이만한게 없어서 추천할 뿐입니다.

이 강좌를 통해 C# 기초를 배울 수 있는데요. 보통 책이나 다른 C#기초 강좌의 경우 게임개발과는 전혀 상관없어 보이기때문에 흥미를 갖기 어려우나, 이 강좌의 저자인 rookiss님은 Part 1을 텍스트RPG 만들기라는 주제로 C# 기초강좌를 구성해놨습니다.

사실 다른 C#강좌와 마찬가지로 여기 Part1에서 가르치는대로는 유니티로 게임이 만드는 것은 전혀 아닙니다만 흥미관점에선 괜찮은 C# 강좌입니다.

다만 C#이라는 언어를 이해하기엔 설명이 상세하지도, 매끄럽지도 않습니다. 저 개인적으로 동영상이라는 미디엄을 가지고도 이렇게 지루하게, 말로만 설명을 열심히하며 만들었구나….라고 느꼈습니다.

이 강좌를 가볍게 한번 끝까지 시청하고나서(따라해보지 않아도 됩니다) 그런다음 C#책으로 진지하게 공부하는 걸 추천합니다. 그러면 C#에서 하는 말들이 무엇인지 시작을 어떻게 하는지 쉽게 갈피가 잡힐 겁니다.

노파심에 말하건데 part 1을 넘어서는 절대로 초보입장에서 구매하지 마세요. 입문자는 절대 이해불가능합니다. part 2는 나중에 C# 떼고나서 보는게 낫고 part 3에서는 유니티 에디터 사용법을 가르쳐주기도 초보에 맞게 잘 설명하지도 못하고 part3는 아마 이런저런 지식을 섭렵한다음 1,2년 뒤에나 이해할 수 있을 겁니다.

2) 유니티 입문하기

C#을 대충 알았다면 빠르게 유니티를 찍먹해보고 나서 C#을 진지하게 다시 공부하길 권장합니다. 이에 적당한 유튜브강좌가 있는데요.

이 두가지만 일단 하면 유니티에서 C#이 어떤식으로 돌아가는지 알수도 있고 간단한 게임을 만들어보며 재밌게 배울 수 있습니다.

굳이 하나하나 보고 따라할 필요는 없다고 생각합니다만 만들어보고 싶어서 근질근질하겠죠. 제 추천은 집중해서 본다음에 C#을 정식으로 공부하고나서 다시 보는걸 추천합니다.

3) C# 책 정독하기

대충 C#으로 프로그래밍을 어떻게 하는지 알게되었다면 (비주얼 스튜디오로 프로젝트를 만들고 콘솔에 출력하는 방법을 알았다면 ) 좋은 C#책을 골라 본격적으로 C# 기초를 학습 하면됩니다. 이것은 곧 MS의 닷넷 프레임워크를 배우는 것과 동일합니다.

1권 3독하라고 말해야겠지만 프로그래밍 입문자가 1독이라도 똑바로 하면 다행입니다.

“좋은” 책을 고르는 것이 문제인데, 제가 모든 책을 읽어본것은 아니고, 굳이 저에게 묻는다면 제가 가진 것에 한해서 다음 둘 중 하나를 보라고 말해주고 싶습니다(혹은 둘다). 참고로 저는 다른언어까지 포함해서 언어책을 열권이상 읽어본 경험이 있습니다. 좋은책을 구분할 줄 안다고 생각합니다(바이럴 아니란 소리).

이 두 책은 책 전체구성이 참 다른 방식으로 쓰여진 책이며 다루는 기능 범위 또한 차이가 있습니다. 이에대해선 별도의 글을 써야할 것같네요.

4) 본격 유니티 프로그래밍 배우기

재미없는, 게임개발과는 직접적인 관계가 없는 C# 언어문법 자체를 모두 완료했다면 이제 본격적으로 유니티에서의 프로그래밍을 배우게됩니다. 이는 곧 유니티 프레임워크 API를 배우는 것이기도 합니다. 앞서 골드메탈 유튜브에서 이미 많이 사용해봤을 겁니다.

이때부터는 유니티 매뉴얼을 참고하고 유튜브강좌, 인프런이나 유데미 유료강좌에서 이것저것 보면서 공부하면 됩니다.

초반에 볼만한 유튜브강좌 및 채널:

C#을 익힌다음으로 유니티 프로그래밍을 해야하는데요. 로드맵 2)번에서 유튜브 강좌를 통해 알았을지 모르겠으나 가장먼저 중요한건 유니티(프레임워크)의 규칙을 따르는 것인데, 바로 게임오브젝트의 라이프사이클에 대해 아는 것입니다.

용어나 개념은 당장 모르시겠지만 여기 간단히 중요핵심을 쓰자면,

  • 유니티 프레임워크의 규칙에 따라 프로그램을 작성해야한다.
  • 보통, 게임오브젝트에 붙이는 클래스는 Monobehaviour (Component)이고 라이프사이클에 따라 유니티 프레임워크가 호출하는 콜백 메시지 함수(메서드)를 작성해야한다.
  • 게임의 Tic 개념: 유니티에서는 매 프레임마다 실행되는 Update()와 프레임과 상관없이 반복되는 FixedUpdate() 함수(라이프사이클 함수)가 있다.
  • Monobehaviour, Component인 클래스 파일 그 자체는 클래스를 정의한 코드일 뿐이고, 게임오브젝트에 컴포넌트로 붙이면 그것은 하나의 ‘인스턴스’가 된다(두개에 각각 붙이면 두 개의 인스턴스가 존재하게된다.)
  • Monobehaviour인 클래스는 생성자를 쓸 수 없다(게임오브젝트에 붙어서 실행될 때만 인스턴스가 생성된다).

그리고 씬내에 게임오브젝트에대해 첨언하자면,

  • 게임오브젝트의 인스펙터에 붙는 모든 것들은 ‘컴포넌트’이다.
  • 씬 hierarchy에 있는 모든 건 게임오브젝트이다. 어떤 게임오브젝트가 유니티에 정의된 것들이 어떤종류의 게임오브젝트인가는 빈게임오브젝트에 어떤 컴포넌트를 붙이냐에 따라 달라질 뿐이다. 어떤 종류건 빈게임오브젝트로 시작하여 만들어질 수 있다.

대충 이런 것이 있다는 것만 알고 부디 게임오브젝트와 스크립트 컴포넌트를 잘 이해해가며 공부할 수 있길 바랍니다.

본격적인 시작으로 적당한 강좌를 추천하라면 유튜브강좌 이것저것 보면서 유니티 홈페이지의 매뉴얼(프로그래밍 가이드)을 읽어보라고 말씀 드리고 싶네요. 그런데 매뉴얼은 참 지루한대다가 너무 광범위한데 목차중에 아래와 같은 것들을 먼저 읽어 볼 만 합니다.

  • 스크립팅
  • 스크립팅 > 중요 클래스
  • 2D 게임 만들기
  • Unity에서 작업수행 > 퀵스타트 가이드 > 3D 게임 만들기
  • 에셋 워크를로 > 특수 폴더 이름

매뉴얼은 아무래도 방대하며 기능별 위주로 정리되어있고, 지루하며 모르는 용어들이 많으므로 시간날때, 머리식힐때 틈틈히 가볍게 이런게 있구나 하는 정도로만 읽어보는 걸 추천합니다.

결국 닷넷프레임워크 API와 유니티프레임워크 API를 많이, 잘 아는 것이 중요한데요. 이것들은 차근차근 알아가게 될 겁니다만, 문서와 함께하는게 더 좋습니다.

하지만 너무 방대하므로 그때 그때 궁금한 API에 대해서만 공부해야합니다. 그러다보면 하나,둘 지식이 쌓여가죠.

5) 배운걸 조금씩 변형해보기

초보입장에서 유튜브등에서 기초 강좌를 그대로 따라할 당시에는 자신이 아는 것처럼 느껴집니다(강좌내용을 이해를 했다면). 그러나 자신만의 프로젝트를 처음만들려고하면 무엇을 해야할지 모르는 백지상태를 경험하게 됩니다.

처음부터 자신의 게임을 만들 생각보다는 배웠던 것에 자신의 아이디어를 보태서 추가기능을 덧붙여 보면서 익히는 방법을 추천합니다. 이런 방법은 기존에 (배웠기에)아는것에 더해 새로운기능을 넣기위한 문제해결 과정을 습득하는 좋은 방법입니다.

남이 가르쳐준 것을 그때 잠깐 이해했다고 해서 내가 할 줄 아는 것이 아닙니다. 진짜는 자신이 원하는 것을 만들기위한 문제해결을 스스로하고 나서야 내것이 됩니다. 엔진을 사용한 게임프로그래밍/디자인이란 쪼개서나눠보면 워낙 방대하기에, 조금씩 조금씩 더해가며 앞으로 나아가야합니다.

비슷한 기능을 하는 NPC를 하나더 만들고 약간만 다른 행동을 하게끔 추가할 수 있기도하죠. 강좌게임에 기능을 추가하는 것이 어렵다면 반대로 빼거나 제한을 하는 방식으로 생각해볼 수도 있습니다.

유료 기초강좌가 가장 좋을 때

유료강좌는 돈이 드는 만큼 가성비를 따질 수 있는데요. 굳이 따지자면 (좋은 초보강좌에 한해서) 아무것도 모를 때 보는게 가장 가성비가 높습니다. 목차의 모든 부분을 모르기때문에 모두 새로운지식이니까요.

시간이 지나 여기저기에서 지식을 쌓은다음에 구매해 보게된다면 그만큼 가성비가 떨어집니다. 의욕도 떨어져 보다가 맙니다. 그러니 초보에게(중요!) 좋은강좌라고 소문난 강좌는 빨리 구매해서 공부하는게 더 이득입니다.

이건 지극히 개인적인 의견이었고요. 그렇다고 다 볼것도 아닌데 막 구매해서 보면 수강료 자체가 아까울 수도 있겠죠.

현재글 목차