언리얼 Live Coding으로 되는 것과 안 되는 것
C++를 고쳤는데 에디터에 반영이 안 돼서 “왜 안 바뀌지?” 하고 시간을 버린 적이 몇 번 있다. 거의 다 Live Coding이 뭘 즉시 반영하고 뭘 못 하는지를 몰라서 생긴 일이었다. 규칙만 알면 재시작·재빌드 타이밍은 매번 바로 판단할 수 있다.
Live Coding이 하는 일
Live Coding은 실행 중인 에디터를 끄지 않고 바뀐 C++를 다시 컴파일해서 프로세스에 덧붙인다. 핵심은 ‘이미 로드된 상태 위에 얹는다’는 것이다. 그래서 기존 코드의 동작을 바꾸는 건 잘 되는데, 이미 로드된 구조 자체를 바꾸는 건 한계가 있다.
즉시 반영되는 것
- 기존 함수의 본문(구현) 수정 — 계산식, 조건, 로그, 로직 변경
- 함수 안에서의 값·분기 조정
- 매크로가 아닌 순수 로직 변경 대부분
이건 컴파일하고 바로 PIE에서 확인하면 된다. 재시작 필요 없다.
안 되는 것 (재시작·풀 재빌드 필요)
리플렉션 등록이랑 메모리 레이아웃은 에디터 시작 시점에 이미 확정된다. 그래서 ‘구조’를 건드리는 건 Live Coding으로 핫패치가 안 된다.
- 새
UCLASS추가 - 새
UPROPERTY/UFUNCTION멤버 추가 - 리플렉션되는 새
USTRUCT/UENUM추가 - 상속 구조나 멤버 레이아웃 변경
증상도 특징적이다. 컴파일은 성공했다고 뜨는데 새 클래스가 콘텐츠 브라우저나 BP에 안 보이고, 추가한 프로퍼티가 디테일 패널에 안 나온다. 이때는 에디터를 완전히 닫고 다시 빌드해야 한다.
헷갈리는 예외 — 네이티브 GameplayTag
‘새로 추가하는 건 다 재시작’이라고 외우면 여기서 한 번 틀린다. 네이티브로 선언하는 GameplayTag는 Live Coding으로도 즉시 등록돼서, 태그를 추가해도 재시작 없이 바로 쓰는 경우가 많다. 반대로 그 태그를 담는 새 UPROPERTY 자체를 추가했다면 그건 위 규칙대로 재시작이 필요하다.
Build.bat이 “Unable to build while Live Coding is active”로 막힐 때
에디터를 켜 둔 채로 외부 터미널에서 Build.bat을 돌리면 이 메시지로 실패한다. Live Coding이 대상 모듈을 잡고 있어서다. 방법은 둘이다.
- 에디터 안에서
Ctrl+Alt+F11로 Live Coding 컴파일을 트리거한다. - 완전 재빌드가 필요하면 에디터를 종료한 뒤 Build.bat을 돌린다.
컴파일 오류 메시지가 짧게만 보이면 전체 로그는 여기서 본다.
%LOCALAPPDATA%\UnrealBuildTool\Log.txt결국 이렇게 판단한다
- 기존 함수 본문만 고쳤다 → Live Coding(또는 Ctrl+Alt+F11)으로 충분
- 새 클래스·멤버·리플렉션 타입을 추가했다 → 에디터 종료 후 재빌드
- 컴파일은 됐는데 에디터에 안 보인다 → 구조 변경이니 재시작
- 외부 빌드가 막힌다 → 에디터 종료하거나 Ctrl+Alt+F11
정리하면 고친 건 Live Coding, 추가한 건 재시작이다. 딱 이 한 줄만 기억해도 헤매는 시간이 확 준다.