본문 바로가기

ETC/Un[real]ity

언리얼 vs 유니티: 4. 사용하는 프로그래밍 언어

게임 회사에 자리잡고 계신 꽤 많은 게임 개발자들은 c와 c++을 시작으로 프로그래밍에 입문했을 것입니다. 상용엔진이 보편화 되기 전에는 대부분 c나 c++을 이용한 자체엔진으로 게임을 만들어왔고, 프로그래밍 언어의 기초라는 이유도 한 몫 했을 것입니다. 2010년대에 들어 c# 언어를 사용하는 유니티가 널리 사용되면서 처음 배운 언어가 C#인 게임 개발자 분들도 많이 늘어났습니다. c나 c++에 비해서는 조금 쉽게 배울 수 있고 개발이 빠를 수 있다는 점이 매력적입니다. 근래에 들어서는 암호화폐를 등에 업은 GPU 성능의 발달이 눈에 띄었습니다. 알파고의 유명세와 함께 머신 러닝Machine Learning 과 빅 데이터 분석 분야의 인기로 Python 부터 시작하신 개발자들도 서서히 자리잡고 있습니다.

게임 엔진 역시 프로그래밍을 통해 새로운 프로그램, 애플리캐이션을 만들어내는 도구의 일부입니다. 미리 구현된 기능의 모음들을 적재적소에 사용하여 동작을 구성하고 패키징하여 최종 사용자가 이용할 수 있도록 하는 것이 목적입니다. 이 때 기능을 적재적소에 배치하고 이어주는 것 역시 스크립팅을 통해 이루어집니다. 게임 개발의 모든 것이 스크립팅인 것은 아니지만, 꽤 많은 부분을 차지하고 있습니다. 2020년 현재 가장 많이 사용되고있는 두 상용 게임엔진, 유니티와 언리얼에서는 어떤 언어를 사용할 수 있는지 살펴보겠습니다.

 

유니티

API는 C#을 사용합니다. Mono를 기반으로 하고있습니다. 구 버전의 유니티는 닷넷 2.0을 지원했고, 최신 버전에서는 닷넷 4.x 버전을 지원하고 있습니다. 게임 엔진 자체는 C++으로 제작되었고, C# 스크립팅으로 미리 구현된 API를 사용할 수 있습니다. 구 버전의 유니티에서는 javascript 의 문법과 유사한 Unity Script가 존재했습니다. 2018.2 버전부터 지원을 중단해 최신버전에서는 더 이상 사용할 수 없는 상태입니다. 유니티가 연도별로 버전을 붙이기 전에, 유니티 4.0 까지는 Boo라는 언어도 지원했습니다. Python과 유사한 구조의 문법이었지만, 저는 사용을 해 본 적이 없습니다.

 

유니티 C# 스크립팅의 근간이 되는 모노비헤이비어

 

> Python

최근에는 대세에 따라 Python 역시 사용가능하도록 지원됩니다. 유니티의 기능인 패키지 매니저를 통해서 사용가능하지만, 런타임 API 를 제공하는 것은 아닙니다. 게임 로직은 작성할 수 없고, 유니티 에디터에서의 기능 구현만이 가능합니다. 비 게임 분야필름, 건축, 애니메이션 등에서 사용되는 외부 도구들과의 호환성 지원을 위해 Python 언어 지원에 대한 많은 수요가 있어 추가되었습니다.

> C++

dll 형태로 빌드한 뒤 임포트 하여 사용할 수 있습니다. 일부 라이브러리들이 이런 방식으로 제작되어 사용되기도 합니다. 하지만 C#에서 DLLImport를 통해 사용하는 방식이므로 결국 유니티 런타임에 작동하기 위해서는 C# 스크립트를 거치게 됩니다.

착각하기 쉬운 것들 중 하나로, 유니티에서 밀고있는 패러다임인 DOTS(ECS)가 있습니다. 이는 새로운 언어는 아니고, C#의 문법위에서 돌아가는 데이터 지향 디자인 DOD, Data Oriented Design을 사용한 데이터 지향 기반 기술DOTS, Data Oriented Technology Stack 입니다. 다른 언어를 사용하는 것은 아닙니다.

> 볼트

비주얼 스크립팅 툴입니다. 에셋 스토어에서 판매되던 에셋이었으나, 최근 유니티 테크놀로지에 인수되어 무료화되었습니다. 언리얼 엔진의 블루프린트와 비슷한 방식의 노드 베이스 스크립팅 툴입니다. 요즘 코딩 교육용으로 주가를 올리고 있는 스크래치나 엔트리를 연상시키기도 합니다. 현재는 볼트로 구현한 로직을 C# 코드로 변환할 수는 없지만, 차후 버전에서는 도입할 계획이 있다고 합니다. 유니티 테크놀로지가 볼트를 인수해 추가개발을 진행하는 큰 이유 중 하나로, 비 프로그래밍 직군의 개발자들이 유니티를 다루기 쉽게 하기위함도 있지만, 스크립트를 짜기 난해한 DOTS 방식을 비주얼 스크립팅으로 해결하려는 것이라는 의견도 있습니다.

 

 

 

언리얼

C++을 사용합니다. 강력한 비주얼 스크립팅 툴인 블루프린트도 있습니다. Native C++ 코드로 변환도 가능해 성능도 어느정도 기대할 수 있습니다. 공식적으로 지원하는 런타임 스크립팅 도구는 C++와 블루프린트 뿐입니다. 유니티와 마찬가지로 언리얼 엔진 역시 비 게임 분야에서 두루 사용되고 있습니다. 또한 Python 을 에디터 도구 개발에 사용할 수 있습니다. 언리얼 프로젝트를 열어보면 cs 코드가 담긴 파일도 있습니다. 하지만 이는 프로젝트 생성과 빌드를 위한 도구이고, 런타임 스크립팅은 불가능합니다. 파일 확장자만 보고는 C#을 지원하는것이 아닌지 혼동할 수 있습니다.

 

C++ 클래스의 헤더
CPP 구현부
대표적인 비주얼 스크립팅 도구, 블루프린트

언리얼 엔진은 유니티와 다르게 엔진 소스가 전체 공개되어있습니다. 그래서 엔진에 깊게 접근하는 플러그인이나, 에디터를 근본부터 수정해 사용하는 회사도 종종 있습니다. 그런 이유에서인지는 알 수 없지만, 마켓 플레이스와 깃허브를 보면 여러 언어를 이용해 스크립팅이 가능하도록 해주는 플러그인들이 있습니다. NCSoft에서는 javascript를 이용하기 위한 Unreal.js를 개발에 마켓플레이스에 무료로 배포하기도 했습니다. lua를 사용하는 플러그인도 있고, Agog Lab이라는 회사에서는 SkookumScript라는 자체 언어로 멀티플랫폼을 지원하는 런타임 API를 제작해 배포하기도 했습니다. 깃허브에는 Mono기반의 C#으로 개발을 위한 Mono-UE라는 프로젝트가 진행되기도 했었지만 현재는 어째서인지 리포지토리가 비공개된 상태입니다.

 

 

> Verse

2020년 12월, 트위치 라이브 스트림에서 언리얼 엔진의 공식 스크립트 언어를 새롭게 공개했습니다. 이름은 Unreal Verse 이고, Python의 문법과 비슷하게 생겼습니다. 알고보니 2019년에 에픽게임즈가 SkookumScript를 개발했던 Agog Lab를 인수했고, 새로운 스크립트 언어 개발에 매진해왔던 것입니다. 아직 언어의 자세한 스펙이나 사용성들은 공개되지 않았지만, 극과 극에 있던 블루프린트와 C++ 사이의 공백을 잘 메워줄것으로 기대받고 있습니다.

 

언리얼 엔진 4 이전의 3 버전에서는 이미 Unreal Script라는 javascript와 비슷한 모양의 자체 스크립트 언어가 있었는데, 평이 그렇게 좋지 못했습니다. 에픽 게임즈의 수장이자, 당시 해당 언어를 개발했던 팀 스위니Tim Sweeny는 절치부심해 여러 개선사항과 함께 새로운 언어를 만들어 냈습니다. 언리얼 엔진 5에서 사용할 수 있을 것으로 예상하고 있습니다.

 

 

참고자료

Unity에서 .NET 4.x 사용 | Microsoft Docs

유나이트 서울 2020 - 유니티 비주얼 스크립팅 볼트 소개 Track2-1 - YouTube

Unreal.js, 카테고리 코드 플러그인 - UE 마켓플레이스 (unrealengine.com)

[NDC17] Unreal.js - 자바스크립트로 쉽고 빠른 UE4 개발하기 (slideshare.net)

언리얼엔진이 스크립트 언어를 지원할 예정으로 보입니다. : 네이버 카페 (naver.com)

https://www.twitch.tv/videos/840713360?t=01h06m48s