초반 오류? 배를 버려라~!

정윤재·2026년 8월 11일
post-thumbnail

텍스트 알피지 프로젝트 끝난 지금 이 순간~~ 바로 여기~~
이제 다시 언리얼 엔진으로 돌아갈 시간입니다! 일단 기초적인 설정부터 다시 C++로 맞췄습니다.


1. 환경 설정


C++을 사용한 데스크톱 개발과 게임 개발 설정을 일단 킵니다.

새로 파일 만들 때 이제는 곧 없어질(?) 블프가 아닌 C++로 설정합니다. 모바일 쪽을 하는 건 아니라서 당연히 데스크톱 그리고 저는 일단 제 컴퓨터의 성능에 자신이 없기에 Scalable으로 설정하겠습니다.

소스 코드는 제가 쓰는 비쥬얼 스튜디오로 해줍니다.

그림에 표시한 것처럼 config는 게임 설정들, content는 다운 받은 컨텐츠 등, DerivedDataCache는 임시 캐쉬, Intermediate은 임시 빌드, Saved는 로그 파일 저장 되는 곳, Source는 제가 만든 것들이 여기 있습니다~

이제 솔루션 파일을 열면 이렇게 나오고요.

SPARTAPROJECT1을 시작 프로젝트로 설정하겠습니다.

아까 말한 설정 값들이 이렇게 이니 파일로 존재합니다.

이제 제가 만드는 파일들이 이렇게 아래로 쭈우우우욱 추가됩니다.

그리고 이런 언리얼 에디터를 시작하기 위한 파일이 바로 uproject입니다.

마지막으로 빌드랑 플랫폼 설정을 해줍니다.
1번은 빌드 모드 선택, 2번은 플랫폼 선택입니다.

빌드 모드는 여러 가지가 있는데,

DebugGame / DebugGame Editor → 게임 코드를 디버깅할 때 사용하는 모드(게임을 실행하면서 디버깅)
Development / Development Editor → 개발하면서 테스트할 때 주로 사용하는 모드
Shipping → 디버깅 정보 등을 제외하고 최종적으로 게임을 배포할 때 사용하는 모드

라고 생각하면 될 것 같습니다.

저는 일단 개발하면서 테스트할 거라 Development + Win64로 설정했습니다.

그런데 실행해보니 갑자기 이런 오류가 등장했습니다. 두둥!

[2026.08.11-15.26.05:263][ 0]LogShaderLibrary: Error: Failed to initialize ShaderCodeLibrary required by the project because part of the Global shader library is missing from ../../../../UE_5.5/../UE5/SPARTAPROJECT1/Content/.

큰 일 났습니다...... 그래도 이 오류 한 번 해결하러 가봅시당~


2. 오류 해결(?)

일단 확인해보니 content 파트 쪽에 GlobalShader가 없다던데 이게 뭔지 한 번 알아봤습니다. Global Shader Library는 언리얼 엔진에서 공통적으로 사용하는 셰이더 코드를 미리 컴파일해 모아둔 라이브러리입니다.
게임 실행 시 필요한 셰이더 파일이기 때문에 일부가 누락되면 게임을 실행하지 못하고 ShaderCodeLibrary 관련 오류가 발생할 수 있습니다. 이게 저한테도 발생할 줄이야..... 근데 사실 제가 기초 시작 프로젝트만 만들었지 따로 삭제하거나 건든 게 없잖아요? 예전에 했던 파일들을 정리하고 옮기는 과정 중에서 파일 경로가 바뀌어서 생긴 문제 아닐까 추측했습니다. 그래서 새로운 파일을 만들어서 실행해보니 정상 작동하긴 했습니다. 그럼 이제 무슨 차이 때문에 이런 문제가 생긴 건지 한 번 살펴봤습니다.

일단 Content 폴더를 확인해보니 Collections와 Developers 정도만 있었습니다. 둘 다 사실상 빈 깡통이었구요. 혹시 저장된 경로 중 한글 이름 때문에 발생한 문제일 수도 있다고 생각해서 컴퓨터 이름을 영어로 바꾸고 파일 경로와 프로젝트 이름도 그에 맞춰 수정해봤습니다. 근데 이 방법도 통하지는 않았습니다.


일단 임시적으로 만든 파일들이 문제일 수 있기에(빌드하기 위해 생성된 파일들) 이 파일들을 다시 삭제해줬습니다. 살생부에 올라간 분들은
Binaries
Intermediate
Saved
DerivedDataCache
였습니다. 이렇게 삭제하고 다시 실행해봐도 해결되지 않더라고요. 그래서!

금단의 비기! 새로운 프로젝트! 예....허무하신 거 압니다. 근데 사실 초반에 오류난 거고 아는대로 해결하려 했는데 안 되면 이 방법이 제일 확실하고 빠르긴 합니다. 다행히 아주 아주 초반이라 새로 만드는 것은 부담이 없었기에 새로 만들었습니다. 당연히 작동이 잘 됐습니다.


3. 코드 카타 및 실습 과정 중 배운 개념 정리

언리얼 엔진을 다시 시작하기 전에 잠깐 코드 카타도 진행했습니다. 이번에는 핸드폰 번호 가리기 문제를 풀면서 C에서 문자열과 동적 메모리를 다시 공부했습니다.

문자열과 \0

C에서 문자열은 마지막에 \0이라는 문자열의 끝을 나타내는 값이 들어갑니다.

예를 들어 "hello"라는 문자열이 있다면 실제로는

h e l l o \0

이렇게 저장됩니다.

즉, \0char 하나이기 때문에 메모리에서 1바이트의 공간을 차지합니다.

그래서 문자열을 저장할 때는 실제 문자열 길이보다 1칸 더 공간을 만들어야 합니다.

문자열 길이 + \0 = 필요한 메모리 공간

문자열 길이 직접 구하기

strlen()을 사용하지 않고 직접 문자열의 길이를 구할 수도 있습니다.

int Length = 0;

while (phone_number[Length] != '\0')
{
    Length++;
}

이렇게 \0이 나올 때까지 하나씩 확인하면 문자열의 길이를 구할 수 있습니다.

const char*

문제에서 문자열이 const char* 형태로 주어졌는데, const가 붙어 있기 때문에 해당 문자열을 직접 수정할 수 없습니다.

그래서 새로운 메모리 공간을 만든 뒤 필요한 내용을 복사해서 사용해야 합니다.

malloc()

malloc()은 필요한 크기만큼 동적으로 메모리를 할당하는 함수입니다.

예를 들어

malloc(12);

라고 하면 12바이트의 메모리 공간을 확보합니다.

문자열은 마지막에 \0도 저장해야 하기 때문에 문자열 길이가 11이라면

malloc(11 + 1);

처럼 1칸을 더 만들어야 합니다.

그리고 동적으로 할당한 메모리를 다 사용했다면 일반적으로 free()를 사용해서 해제해줘야 합니다.

'*'"*"의 차이

이것도 처음에는 은근 헷갈렸습니다.

'*'

문자 하나(char)이고,

"*"

문자열입니다.

따라서 answer[i]처럼 문자 하나를 넣는 곳에는

answer[i] = '*';

처럼 '*'를 넣어야 합니다.

이번 핸드폰 번호 가리기 문제를 통해 문자열의 끝을 나타내는 \0, 문자열 길이 구하기, const char*, 동적 메모리 할당과 malloc() 등을 다시 공부할 수 있었습니다.

그리고 언리얼 엔진에서 코드를 수정한 뒤에는 빌드를 해야 실제 변경 사항이 컴파일되어 반영된다는 것도 다시 확인했습니다.


4. 마무리

텍스트 RPG 프로젝트를 마치고 다시 언리얼 엔진을 공부하기 시작한 날입니다. 역시 시작이 반이라고, 다시 시작하는 만큼 처음 환경 설정부터 제대로 하는 것이 중요하다는 것을 느꼈습니다. 그렇기에 초반 환경 설정도 엄청 중요합니다. 하지만 이 과정 중에 오류가 떠서 조금 당황스러웠습니다. 이런저런 방법들을 써봤는데 해결이 안 되더라고요. 물론 새로 만든 프로젝트는 정상적으로 작동하는 것을 보니 기존 프로젝트에서 파일 경로나 설정이 꼬이면서 발생한 문제가 아닐까 추측했습니다. 정확한 원인을 끝까지 찾아내지는 못했지만, 이번 일을 통해 파일 경로와 프로젝트 초기 설정의 중요성을 뼈저리게 느꼈습니다.
그리고 초반에 오류가 발생했고 여러 방법을 시도했는데도 해결되지 않는다면 아싸리 새로 만드는 게 훨씬 간편하고 좋은 해결법이라는 것도 배웠습니다. 초반에 어떻게 설정하고 저장하느냐, 이름은 어떻게 짓느냐의 중요성을 마음 깊은 곳까지 새겨놓겠습니다.

아무튼 저런 초반 오류가 발생하면 현명(?)하게

배를 버려라~~!

profile
게임 개발자 꿈나무

0개의 댓글