Unity2D 게임 프로그래밍에 앞서
강좌
추후에 쓰일 글들은 Udemy의 강좌, C# Unity Developer 2D Coding: Learn to Code Video Games의 내용을 기반으로 작성된다.
굉장히 기초적인 부분부터 시작하며, C#을 기준으로 코드를 짠다.
C#을 몰라도 C나 C++을 알면 쉽게 따라올 수 있으며, 코딩을 처음해도 무난하게 따라올 수 있을 정도로 굉장히 쉽게 설명해준다.
강의는 윈도우에서 진행되지만, 필자는 맥 환경을 사용하기에 인터페이스에 차이가 있을 수 있다.
하지만 아주 극소수의 차이만 존재하기에 사실상 둘이 거의 같다고 할 수 있다.
원하는 버튼이나 메뉴가 보이지 않으면 당황하지 마시고 차근차근 찾길 바란다.
Unity란
유니티는 2D와 3D 비디오 게임을 만드는데 사용되는 툴이자 게임 엔진이다.
게임 외에도 다른 용도로도 사용되긴 하지만 주 사용처는 비디오 게임 제작이다.
멀티 플랫폼과 통합 에셋 시스템을 지원하고 있어 각 플랫폼마다 처음부터 제작할 필요 없이 거의 하나로 여러 플랫폼의 프로그램을 제작할 수 있다.
Unity에서는 코드를 짜는 것을 스크립팅(Scripting)이라고 말하며, 스크립트를 구성할 때 사용되는 언어는 C#이다.
(다른 언어들도 많지만 공식적으로 지원되며 가장 많이 사용되는 언어는 C#입니다. 그 외에는 Java Script, Boo등이 있습니다.)
Unity의 장점
1. 직관적이고 쉬운 제작
WYSIWYG(What You See Is What You GO) 방식의 툴로 굉장히 직관적이다.
물론 처음 접하는 사람들에게는 어려울 수 있지만, 금방 적응하고 쉽게 배울 수 있어 굉장히 빠르게 유니티의 시스템에 접근할 수 있다. ▼
2. 낮은 시스템 요구사항
비교적 낮은 시스템 요구사항으로 간단한 게임은 저사양 컴퓨터에서도 개발할 수 있다.
3. 통합 에셋 시스템
유니티에는 자체적으로 Asset Store가 있어 게임에 필요한 요소들을 쉽게 구할 수 있다.
리소스(이미지 팩, 음악 팩), 스크립트, 플러그 인 등을 구매하여 사용하거나 제작하여 판매할 수 있다.
정리 글에 관하여
위에 적은 강좌를 토대로 제가 이해한 내용들을 글로 쓰려고 한다.
제가 개인적으로 공부한 내용들을 적을 것이라 뭔가 순서에 맞지 않거나 하는 느낌을 받으면 아마 그 느낌이 정확할 것이다.
부록: 근데 왜 SDL2에서 유니티로?
SDL2로 개발 공부를 하면서 많은 것들을 느꼈다.
그 중 몇가지를 얘기하면서 유니티로 옮긴 이유를 이야기 해 보겠다.
이유
1. 게임 엔진
SDL2는 게임 엔진이라고 하기엔 부족한 부분들이 정말 많다.
SDL2가 기본적으로 지원하는 것들은 비디오와 오디오다.
그 외에도 많은 것들을 지원하지만 일단은 가장 많이 사용하는 것은 비디오와 오디오다.
하지만 화면에 출력하는 것들 정도만 지원하고 그 외에는 전부 스스로 짜야한다.
가장 힘들었던 부분은 게임의 기본 메카닉인 엔진 부분이었는데, 이 부분을 가져다 쓸 수도 있긴 하지만 저작권이나 라이센스 같은 것들 때문에 꽤나 힘들었다.
탑 뷰 게임의 경우에는 그나마 엄청나게 어려운 부분이 필요 없어서 다행이지만, 횡 스크롤로 가게 되니 조금 벅차지기 시작했다.
아이디어는 우유와 같다는 말에 굉장히 동의한다.
아이디어는 우유와 같아서 금방 상한다.
문득 생각난, 스스로가 기발하다고 여긴 아이디어를 빠르게 이용하지 않으면 금방 상해버려서 더 이상 스스로도 기발하지 않다고 여기게 되고, 아이디어에 대한 흥미가 식게 된다.
이는 아이디어가 정말 기발하지 않아서 흥미가 식는게 아닌, 잡 생각들이 덧붙여지기 때문에 흥미가 식는 것이다.
잡 생각들이 붙기 전에 빠르게 개발해야 신선한 아이디어를 그대로 사용할 수 있다는 말이다.
하지만 지금의 개발 방식은 아이디어를 너무나도 쉽게 상하게 만든다.
게임의 당연한 부분들까지 만들어야하니 시간이 배로 걸리게 되고, 그 사이에 잡 생각들이 덧붙여지면서 아이디어가 더이상 기발했던 아이디어가 아니게 된다.
그래서 개발 속도를 더 높여야겠다고 생각을 하게 되었고, 기본적인 것들이 구현되어있는 유니티로 옮기겠다는 결심이 서게 되었다.
2. 기본적인 난이도
앞에서 말한 엔진에 관한 것부터 그 외의 것들까지 구현하는 것이 상당히 어렵다.
예를 들면, NPC와 대화할 때 핵심 키워드의 글자가 하나씩 나타나면서 위, 아래로 흔들리며 파티클이 흩뿌려지는 이펙트를 주고 싶다고 해보겠다.
현재 실력으로는 이걸 텍스트와 글자가 보일 좌표를 매개변수로 하는 함수로 짜려면 한 달 가까이 걸릴 것 같다.
하지만 아이디어가 상하기 전에 이를 써보려면 예상 시간은 일주일이다.
'이걸 일주일내로 구현하라고?'
내게는 상당히 어렵게 다가왔다.
물론 언젠가는 해야할 일이고, 이를 구현할 수 있으면 정말 기쁠 것 같다.
하지만 이건 일주일간 굶주린 사람에게 스테이크부터 먹으라는 것과 같은 얘기다.
숟가락을 들기도 힘들고 씹을 힘도 없는 사람이 스테이크부터 먹을 수 있을까?
먹으면 기쁘겠지만 지금 이 사람은 죽부터 먹어야한다.
그게 순서라고 생각하고, 지금 내 상황이 딱 그 상황이다.
이상향은 높지만, 그걸 이룰만한 실력은 없다.
우선은 씹기 쉬운 여러가지를 먹어봐야한다고 생각했고, 그걸 도와주는 것이 유니티라고 생각했다.
유니티가 절대적으로 쉽다는 것은 아니다.
하지만 지금은 유니티의 기초 정도는 소화할 수 있다고 생각했고, 그것을 수행하려고 한다.
마치며
위의 이유들로 SDL2를 고집하는 것은 그만두려고 한다.
C++로 개발하고 싶고 Vim을 쓰는게 익숙하다는 이유들도 있다.
이 둘을 보니 가장 먼저 든 생각은 내가 새로운 것을 잘 못받아들인다는 것이다.
만들고 싶은 것이 있고 그걸 만들기 위해 필요한 기술들이 있다면 그 기술들을 배우는게 맞지만, 현재의 제 공부 방식은 '저번에는 이걸 배웠으니 이걸 써먹어서 저걸 만들어볼까' 이다.
배운 내용들로 만들 수 있는게 없다면 필요한게 무엇인지를 판단하지 않고, 커리큘럼대로, 정석적인 순서대로 진행하며 필요한 게 나올 때 까지 순서를 지키며 공부를 했다.
이제는 바뀌어야겠다고 생각했고 이제는 만들고 싶은 게임에 필요한 것들을 위주로 학습할 계획이다.
이 글을 보시는 분들은 자신과는 상관 없는 얘기겠지만 읽어주어 감사하다.
'Develop > Unity' 카테고리의 다른 글
[Unity2D] Input 시스템 (0) | 2024.03.03 |
---|---|
Unity2D: Start와 Update (0) | 2024.03.01 |
[Unity2D] Object와 Sprite (0) | 2024.02.22 |
[Unity2D] 게임 디자인 (0) | 2024.02.22 |
[Unity2D] unity와 C#, VSCode 설정(macOS, M1) (0) | 2024.02.22 |