인프런 커뮤니티 질문&답변

문민철님의 프로필 이미지
문민철

작성한 질문수

이득우의 언리얼 프로그래밍 Part1 - 언리얼 C++의 이해

언리얼엔진 디버깅 관련 질문드립니다.

해결된 질문

작성

·

1.3K

1

안녕하세요, 언리얼 프로그래밍 강의를 수강중인 문민철입니다.

언리얼엔진 코드 분석 및 디버깅 중, 궁금한 사항이 있어 질문드립니다.

Unreal Engine의 에디터를 켜고, 새로운 프로젝트를 생성하는 과정을 디버거로 추적하면,

CreateProcess(NULL, CommandLine.GetCharArray().GetData(), nullptr, nullptr, bInheritHandles, (::DWORD)CreateFlags, NULL, OptionalWorkingDirectory, &StartupInfo, &ProcInfo) 를 통하여 새로운 프로세스를 실행시키고, 에디터를 종료합니다.

(해당 코드는 WindowsPlatformProcess.cpp - line 357에 있습니다.)

즉, 언리얼 엔진 소스 코드를 디버깅할 때, 에디터 시작 화면에 대한 내용만을 보게 됩니다.

게임 프로젝트 분석, 엔진 내 주요 기능 분석을 위해서는 엔진 내부의 주요 기능을 사용해 보면서 분석해야 할 것으로 보이는데, 디버깅 방법론이 궁금해서 질문드립니다.

(물론 c++ 게임에 대해, 게임 프로젝트를 시작 프로젝트로 설정하고(ex: LyraStarterGame) 디버깅을 시작하면 게임 내 구현된 로직을 디버깅할 수 있는 것을 알고 있습니다.


1. UE5를 실행하는 것(ex: UE5.sln)과 게임 프로젝트(ex: LyraStarterGame)를 실행하는 것의 차이가 궁금합니다.

- WinMain 함수로 전달되는 pCmdLine 인자가 다른것 등 피상적인 차이는 확인하였습니다만, 깊은 이해를 원합니다.

(설명이 어렵거나 너무 길다면, 관련 자료를 추천해주시면 감사하겠습니다)

2. 언리얼엔진을 소스 코드를 빌드하여 디버깅하는 것과, '디버깅을 위한 편집기 기호'를 포함한 실행 파일을 이용하여 디버깅하는 것(에픽게임 런처에서 언리얼엔진을 다운)의 차이가 있는지 궁금합니다.

3. 대규모 코드를 분석하는 방법론과 팁을 알고 싶습니다.

(ex: 특정 기능을 수행하고, 그 수행에 관련된 코드를 분석)


감사합니다.

답변 1

2

이득우님의 프로필 이미지
이득우
지식공유자

언리얼 엔진은 크게 엔진이라고 하는 공용 라이브러리 위에 에디터라는 프로그램과 엔진을 사용헤 게임을 만드는 프로그램 두 가지가 있습니다.
전자를 모두 언리얼 엔진이라고 부르지만 사실 엄밀히 말하면 언리얼 엔진 모듈을 기반으로 에디터와 게임의 두 개의 프로그램이 만들어지는 것입니다. Part1 마지막 강의에서 에디터 빌드와 게임 빌드를 설명했으니 이 부분을 참고하시면 좋을 것 같아요. 질문은 에디터 프로그램에 대한 것으로 이해했습니다.

1. 언리얼 에디터는 기능이 방대한 만큼 규칙도 복잡합니다. 단순히 커맨드라인 인자로 설명할 부분은 아닌 것 같아요. UE5를 실행하는 것은 언리얼 에디터를 그냥 실행하는 것이고 게임 프로젝트를 실행하는 것은 에디터에 게임 프로젝트를 지정해서 실행하는 것입니다. 이는 같은 에디터를 실행하는 것인데, 옵션이 다르게 붙는 것으로 이해하시면 됩니다. 15강에서 설명하는 json 형식의 명세서 파일과 폴더 규칙 등을 이해하시는 것이 먼저인 것 같아요.

2. 소스 코드를 빌드해 개발하면 가장 좋은데, 엔진 코드가 방대하다보니 시간이 너무 오래걸립니다. 엔진 소스를 고치지 않는다면 배포된 파일에 디버깅 기호만 있는 정식 버전과 깃허브에서 정식 빌드 소스를 빌드한 버전은 동일하다고 보면 될 것 같아요.

3. 분석 방법론은 다양하게 있지만 확실한 정답을 제시하기는 어렵습니다. 그나마 표준으로 제시된 것들이 UML 클래스 다이어그램이나 시퀀스 다이어그램 같은 것들이 있는데, 다만 언리얼 엔진을 이런 이론적인 방법론 분석하기에는 분석할 범위나 분량이 적용 가능한 부분을 넘었다고 보는게 맞습니다.

언리얼 엔진을 분석한다면 우선 내가 디버깅할 모듈이 어떤 것인지 파악해야 합니다. 언리얼은 모듈 구조로 모든 기능이 분리되어 있기 때문에, 내가 분석할 모듈을 지정하면 디버깅할 범위가 좁혀집니다.
그 모듈안에서 분석할 기능을 파악하시면 좋습니다.
순수하게 엔진 기본을 알고 싶다면 15강을 참고하셔서 Core 모듈을 찬찬히 뜯어보시는 것을 권장합니다.
여기에 있는 수학, 자료구조 등등 공부할 것들이 굉장히 많습니다.
CoreUObject 모듈은 Part1 주제인 언리얼 오브젝트에 대한 내용을 담고 있습니다. 그리고 Engine 모듈은 Part2 주제인 게임 프레임웍과 게임 제작에 관련된 내용을 담고 있습니다.


문민철님의 프로필 이미지
문민철
질문자

많은 도움이 되었습니다. 답변 감사합니다!

문민철님의 프로필 이미지
문민철

작성한 질문수

질문하기