알아두면 신경쓰일 디테일 2. Unity

목록으로 돌아가기

Unity

이번 포스트에서는 유니티에 대한 몇 가지 지식들을 필자가 구글링한 지식 바탕으로 이야기하고자 한다.

최대한 비전공자도 흥미있게 읽을만한 글을 위주로 쓸 예정이지만, 후반부 기술 관련으로 들어가게되면 조금 흥미가 떨어질지도 모른다.

또한 구글링을 바탕으로 적는 것이기 때문에 정확한 정보가 아닐 수 있지만, 필자가 꽤 오랜 시간 찾아본 것이므로 어느정도는 믿어도 될 것이다.

이 점 유의해서 글을 읽어주길 바라며, 포스팅을 시작한다.

목차

  1. 개요

  2. 유니티란

  3. 유니티 로고와 창업 이야기

  4. 미래 유니티가 추구하는 가치

  5. 유니티와 비슷한 게임 엔진

    5-1. 스크립트 지원 언어

    5-2. 한글 지원

    5-3. 자유도

    5-4. 유저 친화도

  6. 유니티와 닷넷

  7. 유니티 라이프 사이클

  8. 마치며

개요

어린 학생들도 휴대폰으로 몇 가지 게임을 하는 요즘, 유니티는 정말 많은 사람이 한 번 즈음은 이름 혹은 로고를 봤을법한 회사다.

필자 역시 유니티를 학생 때 처음 휴대폰 게임으로 접하였으며, 그 당시에는 그저 게임 회사인 줄 알았다.

그것도 그럴 것이 유니티를 주로 휴대폰 게임 개발에 사용하므로, 휴대폰 게임에서 많이 보였기 때문이다.

하지만 개발 인생을 시작하고 나서 접한 유니티는 평소에 생각했던 이미지와 정말 달랐으며, 그저 신기할 뿐이었다.

그리고 유니티 개발 공부를 시작한 지금, 더더욱 이미지가 변하여 너무 생소할 정도이다.

그리고 이제 그러한 이미지를 바로잡기 위하여 필자가 조금씩 구글링한 정보들을 글로 풀어내고자 한다.

screenshot

Unity Technologies 로고

유니티란

우선 유니티가 무엇인지 정확하게 짚고 넘어가고자 한다.

유니티가 무엇인가? 물론 정확히 유니티가 무엇인지 알고 있는 독자도 많을 것이다.

하지만 필자는 개요에서 언급하였듯이 최근에야 유니티가 무엇인지 알았기 때문에 필자와 같은 사람도 분명 있을 것이라 생각한다.

유니티는 ‘게임 엔진’이다. 게임을 개발하기 위한 소프트웨어라는 것이다.

절대 그저 게임 회사인 것도 아니고, 언어 기반의 프레임워크도 아니다.

비디오 게임 개발을 위한 그래픽, 물리, 오디오 등 엔진을 잘 합쳐놓은 소스코드인 것이다.

그로 인해 여러 시뮬레이션이 가능하며, 이를 통해 다수의 사람이 게임을 만드는 것이다.

사실 유저들이 유니티로 핸드폰 게임을 많이 만들어서 그렇지, 콘솔이나 컴퓨터 게임, 메타버스, 심지어 테슬라 운전 소프트웨어 등도 유니티로 작업이 가능하다.

유니티에 대해 놀라운 점은 끝이 아니다.

현재는 C#언어로 스크립트 프로그래밍만을 허용하지만, 이전까지만 해도 UnityScript와 Boo 등 다양한 언어도 지원을 해주었다.

심지어 유니티 내부(유니티 런타임을 위한) 언어는 C와 C++로 구성되어있다.

그리하여 옛날에는 C와 C++언어를 알아야 유니티가 가능했지만, 지금은 그렇지 않은 이유다.

유니티에 대한 간단한 소개는 여기까지 하고 유니티의 역사에 대해 알아보자.

유니티 로고와 창업 이야기

유니티의 창업은 공동창업으로 총 세 명이 초기에 참가하였다. 그들의 이름은 니콜라스 프란시스, 요하임 안테, 데이비드 헬가슨이다.

유니티의 시작은 다음과 같다.

바야흐로 2002년 한국에서는 붉은 악마의 열정이 가득한 그 때, 게임 개발을 원하는 대학생인 니콜라스는 게임 개발에 대한 조언을 듣고자 여러 게임 개발자들에게 메일을 돌린다.

그리고 메일을 받은 요하임이 그에게 답신을 하면서 그들의 인연이 이어졌다.

추후 서로의 게임 엔진을 통합하기로 약속을 했고, 이는 함께 게임 창업을 하게되는 큰 계기가 됐다.



또 다른 한 명인 데이비드는 유니티의 CEO다.

드는 대학을 4번이나 중퇴하였는데, 이는 사실 게으른 성격이 아닌, 자신이 흥미를 느낀 무언가를 끝낼 때까지 물고 늘어져, 대학에 시간을 쏟지 못하는 성격 때문이다.

그는 11살부터 프로그래밍에 흥미를 느꼈고, 해킹에 대한 관심사로 앞서 언급된 요하임과 인터넷으로 알고 지낸 사이이다.

그렇게 데이비드를 요하임이 유니티 창업에 함께하도록 이끌었고, 세 프로그래머의 창업이 시작되었다.

여기서 더욱 신기한 점은 세 명이 전부 국적이 다르고, 이전의 만남이 전부 인터넷으로 이루어졌다는 것이다.

니콜라스는 덴마크, 요하임은 독일, 데이비드는 아이슬란드 출신이다. 정말 신기할 따름이다.

국적이 모두 다른 세 명이 게임 엔진을 통합하고 게임을 창업하기 위해 만났고, 이 것이 유니티 로고의 심볼이 되었다. 세 모서리의 로고와, 통합이라는 뜻을 가진 Unity가 그들의 게임 회사가 된 것이다.



앞서 언급하였듯 사실 유니티는 게임 엔진이 아닌, 게임 자체를 만들기 위해 만든 회사다.

하지만 초기 자본 없이 프로그래머 셋이서 게임을 개발하려다 보니 게임 개발에 한계에 부딫혔다. 셋은 덴마크 지하실에서 만나 창업을 시작했지만, 지하실이 보여주는 바와 같이 정말 열악한 환경에서 일을 시작했다.

밥도 굶으며 일에 몰두했던 그들은 결국 소규모로도 쉽게 만들 수 있는 게임 엔진을 개발하기로 회사 방향을 전향했다.



2005년, 최초의 유니티 엔진이 발표되었다. 창업자 세 명이 전부 애플을 선호하는 자들이었고, 단순한 이유로 macOS로 게임 엔진을 개발하였다.

하지만, 요즘도 그렇듯 게임을 하기 위해 맥을 사용하는 유저는 윈도우에 비해 상당히 적다. 당연히 최초 유니티는 망했다.

그럼에도 불구하고, 그들을 꾸준히 자신들의 엔진을 개발해나갔고, 3D 지원 및 비디오 재생 기능 등 다양한 기능들을 추가하였다.

그리고 2008년 앱스토어가 런칭되었고, 애플을 선호하는 그들은 당연히 유니티를 아이폰에서 지원하도록 업데이트하였다.

총 3년의 암흑기를 거치고 다행히 유니티는 앱스토어에서 선전하게 된다.

1년 뒤인 2009년 유니티는 윈도우를 지원하고, 또 1년 뒤인 2010년에는 아이폰 뿐만 아니라 Android 및 Play Station, Xbox Wii 등도 지원하였다.

플랫폼이 급격히 늘었고, 게임 시장에서 유니티는 급부상하게 된다. 또한, 갑자기 불어오는 스마트폰 열풍으로 모바일 게임에서도 유니티가 입지를 다지게 되었다.

2015년에는 비쥬얼 스튜디오 등도 지원을 하게 되면서 현재 우리가 비쥬얼 스튜디오로 개발이 가능하게 된 것이다. 그렇다. 비쥬얼 스튜디오를 쓸 수 있게 된 것은 정말 6년밖에 되지 않았다는 것이다.

유저가 늘어남에 따라 유니티에서 제공하는 에셋스토어의 판매 에셋도 늘어났고, 이에 따라 유저들 사이의 수익도 올리기에 충분했다.



여기까지가 유니티의 대략적인 역사다. 조금의 잡지식을 섞어서 이야기하자면 세 가지를 더 짧게 이야기할 수 있다.

유니티는 자신의 엔진으로 만든 게임에 광고를 추가할 수 있는 기능을 넣었고, 우리가 알고 있는 ‘길건너 친구들’을 만든 회사는 유니티 애즈를 통해서 약 한달 반 만에 10억원, 3달 만에 30억원의 수익을 올렸다.

필자의 생각이지만 아마 이를 계기로 소규모 모바일 게임 회사들이 광고를 필수적으로 넣고 있는 것이 아닐까 싶다.



다른 하나의 잡지식은 바로 전세계를 통틀어 유니티를 가장 많이 사용하는 도시가 서울이라는 것이다.

다른 도시에 비해 최소 3~40퍼센트 이상 높은 개발자수를 보유했다는 설명을 유니티코리아에서 하였다.



마지막 잡지식은 유니티로 개발된 유명한 게임들을 나열하고 다음으로 넘어가겠다.

유명한 게임들 중 유니티로 개발된 게임들은 아래와 같다.

포켓몬 고 / 하스스톤 / 어몽어스 / 마비노기 모바일 / 바람의 나라:연 / 카트라이더 러쉬플러스 / 리그 오브 레전드:와일드 리프트

미래 유니티가 추구하는 가치

이 부분은 짧게 이야기하고 넘어가고자 한다.

유니티는 게임 엔진으로, 위에서 언급하였듯 모바일 게임 뿐 아니라 상당히 다양한 플렛폼을 지원한다.

이 중 VR도 빠지지 않는데, 이와 관련하여 유니티 창업자 중 데이비드의 인터뷰 중 아래의 글이 존재한다.

"[인터뷰] 데이비드 헬가슨 유니티 창업자 “헤드셋 아닌 신경망 연결로 VR 경험하는 시대 온다” "[웹사이트], (2021.09.15), https://biz.chosun.com/site/data/html_dir/2016/04/10/2016041000199.html.

‘VR과 AR 등을 적용한 다양한 게임기기가 등장하는 등 세계 게임 업계의 플랫폼도 전환되는 시기를 맞았다.’며 동시에 “과학저널에 실린 몇몇 연구자료를 읽어보니 특정 약물을 투입해 외부기기를 인간의 시신경에 연결할 수 있는 초기 단계의 연구가 진행 중에 있더라구요. 지금은 헤드셋이라는 기기를 사용해 시각을 통해 가상현실(VR)을 체험하고 있는데, 아마도 우리 세대가 외부 기기를 인간의 신경망에 직접 연결하는 것을 경험해보지 못하는 마지막 세대가 될 것 같습니다.”라는 의견을 표출했다.

그는 “생명공학(BT)과 컴퓨터를 접목하면 정말로 큰 일이 일어날 거라고 생각한다”며 “BT 스타트업에 많은 관심이 있으며, 현재 신경망 컴퓨터 회사와 뇌에서 무슨 일이 일어나는지를 알 수 있는 알고리즘을 개발하고 있는 회사 등 몇몇 BT 스타트업에도 투자하고 있다”고 말했다. 이어 “BT가 얼마나 빨리 진화할지 알 수는 없지만, 새로운 산업 패러다임이 다가오고 있다”며 “5~10년 뒤에는 BT와 연계된 제품도 등장할 것으로 기대하고 있다”고 덧붙였다.

헬가슨은 “VR과 AR이 중요하다고 인식하고, 실제로 많은 투자를 하고 있다”며 “마이크로소프트의 AR 헤드셋 ‘홀로 렌즈(Holo Lens)’ 개발자용 버전과 상용화된 VR 헤드셋 ‘오큘러스 리프트(Oculus Rift)’에도 유니티 엔진이 사용되고 있다”고 말했다.

헬가슨은 게임 전문 개발자든 아니면 개발 지식이 전혀 없는 일반인이든 간에 누구나가 게임 개발을 할 수 있도록 돕는 ‘게임 개발의 민주화’라는 유니티의 창업 정신도 강조했다. 그는 “캐나다 건축회사 NVYVE는 유니티 엔진을 활용해 호러 어드벤처 장르 PC 게임 ‘파멜라(P.A.M.E.L.A)’를 개발했고 멕시코 마케팅 회사 스쿼드(Squad)에 근무하던 펠리페 팔랑헤(Felipe Falanghe)는 게임 개발자는 아니었지만 유니티 엔진을 이용해 ‘커벌 스페이스 프로그램’이라는 로켓 발사 시뮬레이션 게임을 개발해 큰 성공을 거뒀다”고 소개했다.

이를 통해 유니티는 미래 VR및 AR 기술을 통해 게임 엔진을 활성화 하고자 하며, BT를 접목하여 신경망을 통한 게임을 바라보고 있음을 알 수 있다.

screenshot

UNREAL ENGINE 로고

유니티와 비슷한 게임 엔진

유니티가 모바일 시장을 꽉 잡고 있지만, 사실 게임 엔진 중에서 점유율이 항상 제일 높진 않다. 또 다른 게임 엔진으로 Unreal Engine이 있고, 이 엔진과 유니티가 시장 점유율의 1등과 2등을 경쟁한다.

그렇다면, 이 둘의 차이에 대하여 조금 짚어볼 필요가 있다.

스크립트 지원 언어

유니티는 C#을 지원한다. 언리얼은 C++을 지원한다.

하지만 이 둘의 내부는 둘 다 C++로 이루어져있다.

그리하여 프로그램이 컴파일되는 데에는 서로 비슷한 경향을 가지지만, 스크립트를 불러오는 과정에서 언리얼이 더욱 무겁게 된다. (C#이 C++보다 더욱 기계가 아닌 인간에 친숙한 언어이며, 더 쉽고 가볍다. 그렇기에 더 빠르다.)

유니티의 입문이 쉬운 것은 지원 언어 때문이라고 해도 과언이 아니다.

하지만 고사양의 그래픽을 사용한다면, 혹은 대형 프로젝트라면 C++로 작업하는 언리얼이 더욱 유리하게 된다.

한글 지원

유니티는 한글을 지원해주기 때문에 한국 커뮤니티도 상당히 크게 구성되어있다.

그렇기에 한국어로 된 교육자료가 상당히 많은 편이다.

언리얼은 절대 한국어를 지원해주지 않는다. 그리하여 한국 커뮤니티도 작다.

확실히 유니티의 한국 사랑이 보인다.

여담으로 더 적자면, 이러한 진입장벽으로 인해 언리얼 커뮤니티는 학습을 정말 좋아하는 자들이 다수 포진되어 있기 때문에 유니티 커뮤니티보다는 더욱 예의바른 자들이 많다는 가담항설이 있다.

자유도

유니티의 자유도는 상당히 높은 편이다.

빈 종이에 원하는 것을 다 할 수 있게 도와주는 느낌이다.

언리얼은 유니티에 비해 자유도는 살짝 떨어진다.

게임모드, 컨트롤러, 레벨, 액터 등의 단계를 나누어준다.

이에 대한 장단점은 서로 확실한 편이다.

유니티는 정말 자유롭기 때문에 개발자의 실력에 따라 많은 것을 구현할 수 있다.

다만 정해진 틀이 없기 때문에 대규모 프로젝트라면 관리가 상당히 어려워진다.

이에 반해 언리얼은 프로젝트 관리 측면에서 뛰어난 효율을 보인다.

또한 C++ 코딩 스텐다드로 지원해주면서 개발자들 사이의 코드간 충돌이 적다.

나아가 언리얼은 대부분 라이브러리에 내장되어있기 때문에 구글링을 적게 해도 좋다.

유저 친화도

유니티는 유저를 위한 행사를 정말 많이 한다.

오프라인 및 온라인 행사가 구글링만 해도 상당히 다양하게 나온다.

언리얼은 유니티에 비해 행사 등을 상당히 적게 한다.

다만 언리얼은 매달 고급 무료 에셋을 뿌린다.

무엇이 더 유저에 친화적인지는 서로 다른 느낌이기 때문에 독자가 판단하길 바란다.

이 외에도 서로의 차이는 상당히 많지만, 필자가 흥미를 느낀 점은 이 정도이다. 다음으로 넘어가자.

유니티와 닷넷

이 파트는 며칠 전 렙이오사 직원 중 당병진님께서 유니티에서 사용 중인 mono에 대해 여쭤봐주셔서 흥미를 느껴 찾아본 부분이다. 당병진님께 감사를 드린다.

유니티는 C와 C++로 내부를 작성하였다고 하였다. 이로써 컴파일 효율을 챙긴 것이다.

하지만 현재 우리가 작성하는 언어는 C#이다.

이유가 무엇일까 상당히 궁금하였다.

이는 유니티 개발자가 유저의 편리를 위해 C#으로 스크립트르 짤 수 있도록 도운 것이었다.

C#을 사용할 수 있게 하여서 유저의 진입장벽을 낮춤과 동시에 유저를 확보한 것이다.

또한 메모리에 대한 사용자 부담이 적고 객체지향이기 때문에 시스템을 가볍게 구성할 수 있다.

동시에 내부 환경은 C++로 가져가면서 런타임 성능을 챙겼다고 할 수 있다.



자, 그럼 닷넷은 여기서 어떤 역할인가?

사실 C#은 마이크로소프트에서 개발한 객체지향 언어로, 닷넷 프레임워크의 일부분이다.

닷넷은 역시 마이크로소프트에서 개발한 윈도우 프로그램 개발 및 실행 환경이다.

즉, C#을 쓰기 위해서는 닷넷 프레임워크를 사용해야하는 것이 다양하다.

그렇기에 유니티는 닷넷 프레임워크를 채택하였고, 윈도우 개발자들을 끌어들임과 동시에 유저 편의를 향상한 것이다.



하지만 앞선 역사에서 보았듯이 유니티 창업자는 애플을 선호하는 자들이며, 초창기 유니티는 macOS에서 지원을 시작하였다.

닷넷을 사용하고 나서는 macOS에서 개발이 더욱 어려워진 것이다.

이를 두고볼 수 없었던 그들은 mono를 개발하였다.

mono는 닷넷 프레임워크를 macOS에서 사용하기 위해 오픈소스 개발자 그룹이 제작해낸 프로그램이다.

이 때 닷넷은 오픈소스가 아니었기 때문에, 개발자 그룹은 국제 표준 기구에 등록된 닷넷의 CLI를 분석해서 직접 구현했다고 전해진다.

그리고 그렇게 만들어진 mono를 만든 회사를 결국 마이크로소프트가 인수하게 된다.

이렇게 탄생한 것이 닷넷코어이다.

닷넷코어는 윈도우 뿐 아니라 macOS, Linux 환경을 지원하게 되었고, 닷넷의 범용성을 높혔다.

그리하여 맥 유니티 개발자는 mono가 아닌 닷넷코어를 사용함으로서 개발이 가능해진 것이다.

screenshot

Unity LifeCycle

유니티 라이프 사이클

이 부분은 비전공자가 읽기 조금 어려울 수 있다. 하지만 전공자는 반드시 읽어볼 필요가 있는 부분이기 때문에 가독성보다 정확성을 위해 적도록 하겠다.

공식 유니티 라이프사이클에 관한 자세한 글은 아래 링크를 참고하길 바란다.

https://docs.unity3d.com/kr/530/Manual/ExecutionOrder.html

스크립트를 처음 짜면 start와 update를 노출해준다.

다만, 이 외에도 상당한 라이프사이클이 존재한다.

  1. 에디터가 실행되자 마자, Reset이 호출된다.

  2. 첫 번째 씬이 로드되면 Awake 및 다른 함수가 호출된다.

  3. 첫 번째 프레임이 업데이트 되기 전 Start 함수가 호출된다.

  4. 프레임 사이 OnApplicationPause가 호출된다.

  5. 업데이트가 됨에 따라 Update, FixedUpdate, LateUpdate등이 호출된다.

  6. 랜더링이 되면서 OnGUI, OnPreCull, OnPreRender등이 호출된다.

  7. 코루틴 업데이트로 Yield 등이 호출된다.

  8. 오브젝트를 파기할 때 OnDestroy가 호출된다.

  9. 종료 시 OnDisable, OnApplicationQuit등이 호출된다.

    위의 함수에 관한 내용은 공식 문서를 참고하기 바란다.

마치며

이렇게 유니티에 관한 몇 가지 정보들을 적어보았다.

몇 가지는 이미 알고 있는 독자도 있을 것이고, 아예 알거나 아예 모르던 독자들도 있을 것이다.

여기까지 읽은 독자는 알 수 있듯이 사실 이러한 정보들은 개발에 중요한 정보들은 아니다.

다만, 알아두면 풍부한 개발 경험이 될 것이라고 확신한다.

유니티에 관한 여러가지를 알아보았지만, 사실 그리 많은 정보는 아니다.

이 외에도 유니티 빌드 과정이나 유니티에서 많이 사용되는 함수(모노비헤이비어 등)에 대해 적어보려고 했으나, 시간 관계 및 비전공자들에게 읽기 편한 글을 적기 위해 생략하는 점 양해 부탁드린다.

다음에는 유니티 외에도 다른 개발 관련 도구를 알아보고자 한다.

author-profile
Written by 상 한규

댓글