Unreal Engine 5 - Project Shooter (14): Convert to Cpp (1)

mingu Lee·2025년 9월 12일

1. 간단 요약


  • 기존 Blueprint 기반 Project를 C++ 기반 Project로 Convert
  • C++ Class로 대체할 Blueprint를 선정하고, Class 생성 후 Parent Class 교체 및 실행 테스트 진행

2. 세부 과정


  1. Cpp Project로 Convert
  2. Parent Class 교체

2-1. C++ Project로 Convert


C++ 기반의 Project는 uproject를 열어보면 Modules 라는 항목이 추가되어 있음.

즉, Blueprint 기반의 Project의 uproject 파일에 Modules 항목을 추가해주면 C++ 기반의 Project로 바꿀 수 있음.

위 사진과 같이 Modules을 추가해주고, 다른 C++ Project에서 Source 폴더를 복사 후 붙여넣고 해당 프로젝트의 이름으로 Target.cs와 기타 파일들의 내용을 수정해줌.

이후 Generate Visual Studio project files을 눌러주면 Solution이 생성됨.

생성된 Solution을 실행하여 프로젝트를 빌드하고 Editor를 실행하면 Content 폴더와 같은 계층에 C++ Classes라는 폴더가 생긴 것을 확인할 수 있음.

2-2. Parent Class 교체


기존 BP들을 내가 직접 생성한 C++ Class로 대체하기 전에 대체할 BP를 선정하는 과정을 진행함.

너무 간단하거나 ABP 같이 복잡하거나 편의성이 높은 Asset들은 제외하여 다음 항목들을 선정함.

  1. BP_Character - Character
  2. BP_GameMode - Game Mode Base
  3. BP_PlayerContoller - Player Controller
  4. BP_SaveGame - Save Game
  5. BP_Weapon - Actor
  6. BP_Bullet - Actor
  7. BP_LaserPointer - Actor
  8. BP_Target - Actor
  9. BPW_GamePlayWidget - User Widget
  10. BPW_ResultWidget - User Widget

10개의 BP를 선정했으며, 각 BP의 Parent Class로 새로운 C++ Class를 생성함.

이후 위 항목에 해당하는 BP들을 열어 Class Settings의 Parent Class를 내가 직접 생성한 C++ Class로 교체해줌.

아래는 BP_Character의 Parent Class를 교체한 예시.

내가 생성한 C++ Class로 모두 교체 후 게임을 실행하여 기존 게임과 똑같이 정상적으로 작동하는 것을 확인함.

다음 작업 때 BP에 선언되어있던 변수와 함수, 노드들을 C++로 전환하는 작업을 진행할 것.

단, 모든 변수, 함수에 대해서 C++ 전환 작업을 하는 것이 아닌, 일부 기능들만 C++로 전환하면서 연습을 해보는 것이 목표.

위 목록에 대해서 일부 기능의 C++ 전환이 끝났다면 추후 나머지 기능들도 전환할 계획.

3. 구현 중 발생한 문제 및 해결방안


  • Cpp 파일을 수정하고 Editor에서 작업을 진행하던 도중 Editor를 종료하고 다시 켰을 때 기존 작업물들이 사라지는 현상을 발견함.
    원인을 찾아보니 Live Coding을 사용하면 실시간으로 Cpp 파일을 수정하고 Editor에 반영이 가능하지만, 실제 코드가 빌드된 dll이 로드되는 것이 아니고 기존 dll 코드 일부를 패치하는 방식으로 메모리 위에서 교체하는 것이기 때문이라고 함.
    LiveCoding으로 Cpp 파일을 수정한 경우 Binaries 폴더에 .patch가 붙어있는 파일들이 생성되는데 이를 기반으로 Editor에 반영하는 것.
    즉, Editor를 종료했다가 다시 키면 기존에 빌드가 되어있던 dll를 불러와서 생기는 현상.
    이를 해결하려면 프로젝트를 다시 빌드하여 정상적으로 dll을 생성 후 Unreal Editor를 실행하면 됨.

4. 오늘의 결과물


기능을 추가하는 작업은 아니라서 결과물에 차이가 없기 때문에 C++로 전환하는 과정에 대해서는 따로 결과물을 올리지 않겠음.

profile
Github: https://github.com/dlalsrn

0개의 댓글