Dev Blueprint VS CPP
언리얼은 블루프린트를 더 많이 쓸까? CPP을 더 많이 쓸까? 혹은 얼마나 쓸까?
BP vs CPP
언리얼 엔진에서 무엇을 써야하는가?
언리얼 엔진을 접하고 가장 먼저 들었던 생각은 이것이었다.
블루프린트와 C++은 왜 나뉘어져 있을까? 그리고 개발자는 무엇을 사용해야 할까?
블루프린트란?
블루프린트(Blueprint)는 코딩 언어 없이 노드를 연결하여 로직을 구성하는 컴포넌트 기반 비주얼 스크립팅 시스템이다.
엄밀히 말하면 노드 기반 스크립팅뿐만 아니라, 블루프린트 클래스로 생성된 오브젝트 또한 일반적으로 블루프린트라고 부른다.
블루프린트의 장점
- 프로그래밍 지식이 없어도 개발 가능
- 빠른 프로토타이핑
- 직관적인 시각화
- 짧은 컴파일 시간으로 빠른 테스트
- 디자이너와 협업이 용이
블루프린트의 단점
- C++ 대비 낮은 성능
- 로직이 커질수록 가독성과 유지보수성 저하
- 복잡한 알고리즘 구현에 부적합
- 저수준 시스템 제어에 한계 존재
그렇다면 개발은 무조건 C++일까?
많은 개발자들이 추천하는 방식은 하이브리드(Hybrid) 방식이다.
변경이 자주 발생하고 연산 부담이 크지 않은 작업은 블루프린트가 적합하다.
예를 들어,
- 입력 매핑
- 애니메이션 연결
- 이펙트 및 에셋 설정
- 데이터 조정
등은 블루프린트에서 관리하는 것이 효율적이다.
반면,
- 게임 규칙 처리
- 캐릭터 제어
- AI 시스템
- 전투 시스템
- 네트워크 로직
처럼 게임의 핵심 기능은 C++로 구현하는 것이 일반적이다.
결국 성능과 유지보수성을 고려하면, 개발자라면 대부분의 핵심 시스템은 C++로 작성하고 블루프린트는 설정 및 조정 용도로 활용하는 것이 이상적이라고 생각한다.
개인적인 경험
내일배움캠프를 시작하기 전, 언리얼 엔진의 기초 기능들을 직접 다뤄본 적이 있다.
블루프린트와 C++ 프로젝트를 생성해 보고, 플레이어 컨트롤과 Character Movement를 연결해 보기도 했다. 또한 EnemySpawnerActor를 만들어 웨이브를 관리하고 특정 구역에 공 100개 정도를 생성한 뒤, AI Navigation을 활용해 플레이어를 향해 이동하도록 구성해 보았다. 마지막으로 플레이어가 발사체로 공을 맞춰 제거하는 기능까지 구현했다.
이 과정에서 게임의 핵심 시스템은 대부분 C++로 개발했다.
반면,
- 캐릭터 상태에 따른 애니메이션
- 공의 에셋 지정
- 웨이브별 개수 및 능력치 조정
- 플레이어의 체력 및 데미지 설정
과 같은 데이터 관리와 에셋 연동 작업은 블루프린트가 훨씬 편리했다.
C++ 컴파일 없이 즉시 수정이 가능하고, 반복적인 수치 조정도 빠르게 진행할 수 있었기 때문이다.
다만 중요한 점은 기준의 일관성이라고 생각한다.
어떤 기능을 블루프린트에서 관리하고, 어떤 기능을 C++에서 관리할지 명확한 기준이 없다면 개발 과정에서 자연스럽게 다음과 같은 상황이 발생한다.
“이 값을 어디서 수정했더라?” “이 로직은 BP였나, C++이었나?”
결국 개발 속도와 유지보수성이 크게 떨어질 수 있다.
그래서 본격적으로 언리얼을 배우게 된다면, 단순히 기능 구현뿐만 아니라 BP와 C++의 역할을 어떻게 분리할 것인지에 대한 기준도 함께 배우고 싶다.