.NET Tools
Essential productivity kit for .NET and game developers
Wargaming, 신작 게임 개발에 Unreal Engine용 Rider 사용
Unreal Engine을 사용하여 C++로 게임을 개발할 수 있는 신규 IDE인 Unreal Engine용 Rider의 얼리 액세스 프로그램이 지난 1년 반 동안 시행되었습니다. 이 프로그램은 수만 명의 인디 게임 개발자, 다양한 규모의 게임 개발 스튜디오 및 기업으로부터 관심을 받았습니다. JetBrains는 이러한 사용자들이 이 제품에서 가장 높이 평가하는 부분과 선호하는 기능 혹은 더 필요한 기능 등을 알고 싶었습니다. 그래서 최근 러시아 모스크바에 설립된 게임 개발 스튜디오 Wargaming RED(Wargaming Group Limited의 자회사)에서 테크니컬 디렉터를 담당하는 Viacheslav Dubikovsky와 인터뷰를 진행해 보았습니다. 이번 인터뷰는 .NET 및 C++ 도구 제품 마케팅 관리자인 Anastasia Kazakova 및 Unreal Engine용 Rider 프로젝트 관리자인 Alexander Pirogov가 진행했습니다.
안녕하세요, Viacheslav 씨! 현재 진행 중인 프로젝트에 대해 말씀해 주시겠어요? 어떤 게임인가요?
아직 타이틀이 공개되지 않아서 NDA 계약상 자세히 말씀드리긴 어렵습니다. 다만 이 게임이 세션 기반 3인칭 SF 슈팅 게임이라는 건 알려 드릴 수 있겠군요.
게임 엔진으로 Unreal을 사용하시나요?
예, 그렇습니다. 현재 Unreal Engine 4.26을 사용해서 C++로 게임을 개발하고 있고, 4.27 버전으로 점차 마이그레이션 중입니다. Unreal Engine 5로는 이전하지 않을 것 같습니다. 렌더링도 다르고 마이그레이션할 경우 이미 제작된 게임 아트를 모두 다시 손봐야 할 수도 있어서요.
프로젝트는 어떻게 구성되고, 어떤 기술이 사용되고 있나요?
앞서 말씀드렸듯이 이 프로젝트는 C++로 개발되고 Unreal Engine에서 빌드되었습니다. Unreal Engine 리플렉션 메커니즘과 C++ 템플릿 메타프로그래밍도 많이 사용됩니다. 단일 저장소는 2개가 사용됩니다. 하나는 게임 자체용이고, 다른 하나는 엔진용입니다. 게임의 메인 로직은 공유 모듈에 저장됩니다.
코드 에디터를 사용할 때 일반적으로 UE 리플렉션 메커니즘이 가장 큰 문제입니다. 수많은 매크로 정의로 래핑된 코드를 다루는 작업은 상당히 까다롭습니다. 매크로 정의는 언어 자체의 관점에서 볼 때 사실상 거의 의미가 없는 것이죠. 이를 처리할 수 있는 개발자는 극소수에 불과합니다. Unreal Engine용 Rider는 바로 이 문제를 해결해줍니다.
프로젝트에 참여하는 개발자는 몇 명이고, 주로 어떤 도구를 사용하나요?
우리 팀에는 약 25명의 프로그래머가 있습니다. 그중 1/3은 UE용 Rider를 사용하고 나머지는 다양한 버전의 Visual Studio로 작업합니다. Rider를 채택하기 전에는 기본 Visual Studio만 사용하거나 Visual Assist 또는 ReSharper C++와 함께 Visual Studio를 사용했습니다. 그러나 플러그인 사용 여부와 무관하게 VS 에디터는 성능 문제가 자주 발생하곤 했습니다. Visual Assist를 사용하면 언어 기능의 정확도가 떨어졌습니다(지금은 좀 다를 수도 있습니다). 반면 Unreal Engine용 Rider는 적어도 UE 코드 처리에 있어서만큼은 뛰어난 성능을 보여주었습니다.
Unreal Engine용 Rider로 마이그레이션하기는 간편했나요?
처음 Unreal Engine용 Rider를 사용했을 때 저는 “와! VS 키보드 단축키가 지원된다니, 내 VS 기술이 모두 쓸모 있겠군”이라고 생각했습니다. 사용자 인터페이스는 디버그 등의 일부 측면에서 Visual Studio Ui가 더 사용자 친화적인 듯합니다. 이건 아마 제가 VS를 더 오래 사용해서 그럴 거예요. 하지만 Rider의 UI는 상당한 시각적 매력을 갖고 있습니다.
그럼에도 수년 동안 사용하던 도구를 떠나 마이그레이션하는 것은 쉽지 않은 결정이라서 일부 팀원들은 여전히 Visual Studio를 고수하고 있습니다.
지금까지 프로젝트 진행 중 Unreal Engine용 Rider의 어떤 기능이 가장 유용했나요?
탐색, 사용 위치 찾기, 심볼 선언으로 이동, 파생 심볼 및 기본 심볼로 이동이 유용합니다. 직접 작성한 코드는 물론 Unreal Engine 코드 작업 시 항상 사용하는 기능이죠(엔진 코드는 개발자용 문서의 주요 소스니까요). Unreal Engine을 효과적으로 사용하려면 필드 및 함수 링크를 빠르게 찾는 기능과 코드를 탐색하는 기능도 중요합니다. Unreal Engine용 Rider는 이 부분에서 탁월해요.
또한 코드 오류를 알려주는 검사인 정적 코드 분석 기능도 유용합니다. 에디터에서 오류가 바로 표시되면 컴파일하기 전에 상당한 시간을 절약할 수 있습니다. 오류가 컴파일 단계까지 가게 되면 개발자는 컴파일러에서 몇 시간 동안 씨름해야 할 수 있습니다. 물론 이 방식으로 모든 오류(특히 템플릿 코드의 오류)를 찾는 것은 아닙니다. 그러나 Unreal Engine에서는 템플릿이 거의 사용되지 않으므로 찾아서 수정해야 할 오류의 비율이 낮아집니다. 누락된 include
지시문 자동 추가를 제안하는 검사도 시간 단축에 도움이 됩니다. Rider를 이용하면 어떤 헤더 파일이 포함되거나 포함되지 않는지 고민할 필요가 없습니다.
Rider가 Unreal Engine에 구현된 리플렉션 메커니즘을 이해하고 리플렉션 식별자 및 매크로용 자동 완성 기능을 제공하는 것도 훌륭합니다. 일반적으로 개발자가 외우고 있는 내용이 아니므로 Rider에서 제공되는 힌트는 코딩 속도를 현저히 높일 수 있습니다.
또한 애셋 분석 및 Blueprint와 C++ 소스 코드 바인딩 기능도 언급하고 싶습니다. 이 기능은 자주 사용되지는 않지만 사용할 경우 매우 유용합니다. 특히 리팩토링 수행 시 C++ 소스 코드에 변경이 발생할 경우 Blueprint의 사용 위치를 확인할 수 있어 유용하죠. 구성 INI 파일 및 클래스 프로퍼티의 디폴트 값도 마찬가지입니다. INI 파일을 검색하지 않고도 많은 경우 코드에서 바로 값을 확인할 수 있습니다.
마지막으로 Unreal Editor 통합 기능인 RiderLink/UnrealLink 플러그인이 있습니다. 일반적으로 Rider 디버거에서 Unreal 에디터를 시작한 후 라이브 코딩을 수행합니다. Rider를 끄지 않고도 게임을 일시 정지한 후 다시 시작할 때 로그를 확인할 수 있으므로 효율성이 상당히 증대됩니다. 예를 들어, Steam 또는 외부 채팅 통합, 게임 파이프라인 구축 등을 위해 타사 플러그인을 사용하는 경우 에디터로 전환할 필요도 없습니다. 로그를 확인하고 에디터를 일시 정지/다시 시작하는 것만으로 충분하니까요.
Unreal 로그를 개선할 방법에 대한 몇 가지 제안을 드리고 싶습니다.
- 다양한 필터링 옵션을 추가해주세요. 로그 양은 매우 방대하여 때로는 수백 개 이상이 있기도 하므로, 딱 맞는 카테고리를 선택하는 데 어려움이 있습니다.
- 동시에 로그에서 일치하는 여러 부분을 강조 표시해주세요. 매우 일반적인 사용 사례입니다.
아이디어를 제안해 주셔서 감사합니다! Rider 디버거는 어떤가요? 개인적으로 사용하시나요?
물론입니다. 디버거 없이는 어떤 에디터도 진정한 개발 도구라고 볼 수 없어요. 이전에 Rider 디버거가 중단점에서 멈추지 않는 문제가 발생한 경우가 몇 번 있었지만 그 문제는 이제 해결된 듯합니다. 가장 자주 사용하는 디버그 기능은 두말할 필요 없이 코드의 단계별 실행 기능입니다. 가끔 조건부 중단점을 사용하기도 합니다. 또한 디버거에서 Unreal Engine 객체의 내용을 표시하는 방식도 마음에 듭니다.
디버그는 주로 데스크톱에서 수행하시나요?
지금까지는 그렇습니다. 향후엔 콘솔을 사용할 계획이지만 아직은 아닙니다.
참고: 안타깝지만 아직은 Rider에서 콘솔 디버그가 지원되지 않습니다. 이와 관련하여 주요 콘솔 제조사와 논의하고 있습니다. 이 과정은 오랜 시간이 소요될 수 있으며, 복잡한 서류 절차를 거쳐야 할 수 있습니다.
버전 관리 시스템에 대해서도 여쭤보고 싶은데요, 어떤 시스템을 사용하시나요?
주로 Git을 사용하며 신규 기능은 브랜치를 통해 활발히 개발되고 있습니다. Rider의 Git 통합 기능도 사용합니다. 단, 리베이스의 경우 Tortoise 클라이언트를 사용합니다. 이를 사용하면 전반적인 흐름을 확인할 수 있기 때문입니다. 리베이스는 가장 복잡한 Git 작업이 아닐까 싶어요. 자동화를 통해 작업을 더 간편하게 만들려고 해봤지만 아직은 성공을 거두지 못했습니다.
다른 프로젝트에서 Perforce 및 PlasticSCM도 사용했습니다.
코드 프로파일링도 수행하시나요? 그런 경우 타사 프로파일링 도구를 사용하시나요?
예. 코드 분석 시에는 Unreal Insights를 사용합니다. 프로파일링 정보 수집 작업에는 네이티브 UE 도구가 최상의 성능을 지원합니다. 단, 시각화 면에서는 확실히 개선의 여지가 있습니다. CPU 사용량 그래프 도식화에는 저희 회사의 자체 도구가 사용됩니다. Unreal Insights는 프레임 콘텐츠를 검사하는 데 적합하지만, 모든 동적 요소 검사를 지원하지는 않으므로 자체 도구를 개발했습니다.
인터뷰에 응해주셔서 감사합니다, Viacheslav 씨! 게임 프로젝트가 잘 진행되길 바랍니다!
Unreal Engine용 Rider 개선을 위한 여러분의 아이디어를 전해주세요.
게시물 원문 작성자