[UE] 언리얼 엔진 5 블루프린트 vs C++ 언제 어떤 걸 사용하는 게 좋을까? - 2편(완)
2023.07.04 - [Unreal 엔진] - [UE] 언리얼 엔진 5 블루프린트 vs C++ 언제 어떤 걸 사용하는 게 좋을까? - 1편
오브젝트의 클래스에 따라 블루프린트와 C++ 중 어떤 언어를 사용할지 결정할 수 있다.
Actor 에 따른 블루프린트/C++ 결정
게임을 만들면 게임 모드, 게임 스테이트(또는 게임 인스턴스), 폰/캐릭터와 같은 핵심 액터와 클래스가 공통적으로 구성. 핵심 액터를 모두 한 가지 언어로 작성하고 싶을 수 있지만, 팀의 강점과 게임의 요구 사항을 고려하고 워크플로에 균형을 맞춰야 한다.
또, 팀에 프로그래머가 많지 않다면 블루프린트를 더 자주 사용해야 할 수도 있다.
라이라(Lyra) 프로젝트(이하 라이라)의 핵심 클래스들을 예시로 살펴본다.
Game State
라이라에서 GameState 는 게임 페이즈의 로직 처리를 C++ 로 작성. 무거운 계산이 필요하거나 지속적이고 일관되게 업데이트되는 게임 기능은 C++에 더 적합. 이 네트워크를 처리하는 데 필요한 처리량(클라이언트 및 서버 측 모두)이 많기 때문에 블루프린트를 사용하면 성능이 제한됨.
Pawn/Character
라이라의 플레이어 폰은 C++ 클래스를 상속하는 블루프린트 클래스의 자식. C++를 사용하여 기능을 작성하고 블루프린트에 노출한 다음 해당 블루프린트 클래스에서 자손을 생성하여 블루프린트 내에서 기능을 더 확장.
Game Mode
라이라의 게임 모드도 C++ 기반. 서버 측에서 실행되는 코드. 성능이 뛰어나야 함. 새로운 게임 모드를 만들려면 게임 모드 베이스 클래스의 자식을 생성하고 성능을 유지하면서 만들고자 하는 경험을 디자인하면 됨.
라이라(Lyra) 샘플 프로젝트에서
게임 스테이트가 서버 측에서 리플리케이트되지 않거나 게임플레이 로직을 처리하지 않는 경우, 블루프린트로 빌드할 수 있다. 기본적으로 언리얼 엔진에는 블루프린트로 빌드된 전체 기능을 갖춘 폰과 캐릭터가 포함된 템플릿이 있으며, 이를 확장할 수 있다.
반복되는 주제는 팀과 스킬 세트에 따라 다르다는 것.
C++를 사용하면 분명 이점이 있지만, C++를 작성할 수 없다면 블루프린트를 사용하라.
블루프린트에 C++ 노출하기
C++ 함수, 변수, 이벤트, 데이터를 블루프린트에 노출하여 팀이 사용할 수 있도록 할 수 있다. 이는 블루프린트와 C++를 함께 사용할 때 가장 강력한 측면 중 하나. 구조는 엔지니어 워크플로뿐만 아니라 아티스트와 디자이너의 워크플로도 지원해야.
라이라 무기에서 변수 노출의 가치를 확인할 수 있다. 무기의 주요 기능(발사체 발사 시기, 발사체가 목표물에 맞았는지 여부 등)은 C++로 코딩되어 있으며 '숨김' 처리되어 있다. 언리얼 엔진 에디터에서 라이라 무기를 보면 탄약의 양, 탄창 크기, 리스폰 시간 등 디자이너가 조작할 수 있는 데이터가 많이 노출되어 있는 것을 볼 수 있다. 디자이너는 무기의 탄창 크기를 8개가 아닌 5개로 조정하기 위해 프로그래머와 함께 작업할 필요 없이 직접 밸런스를 조정할 수 있습니다. 따라서 디자이너의 시간뿐만 아니라 프로그래머의 시간도 절약할 수 있다.
노출해야 할 것과 노출하지 말아야 할 것을 결정하는 쉬운 방법은 "이 함수를 디자이너가 호출해야 하는가?" 또는 "디자이너에게 어떤 이벤트가 필요한가?"라고 스스로와 팀에게 물어보는 것.
결론
다양한 사용 사례에서 한 언어를 너무 많이 사용하거나 부족하게 사용해서는 안 됨. 어떤 클래스가 특정 언어에서 가장 큰 효과를 제공하는지, 그리고 해당 클래스와 에셋을 적절하게 사용하는 방식으로 구조화하고 팀 협업 효율을 높일 수 있는지에 대해 살펴봄. 팀 생산성을 높이고 워크플로를 최대한 원활하게 운영하기 위해 C++와 블루프린트의 균형을 맞출 때의 이점에 대해 잘 고려하고 판단해야 함.
2023.07.04 - [Unreal 엔진] - [UE] 언리얼 엔진 5 블루프린트 vs C++ 언제 어떤 걸 사용하는 게 좋을까? - 1편
참조
Choosing Blueprints and C++ Based On Class