블루프린트 디버깅 기초
Print String과 중단점, 디버그 오브젝트를 활용해 실행 흐름과 변수 값을 추적하는 기본 절차를 익힙니다.
어떤 프로그래밍이든 개발 과정에서는 예상치 못한 문제가 발생하기 마련입니다.
블루프린트 역시 예외는 아니죠.
우리가 만든 로직이 의도대로 작동하지 않을 때, 무엇이 문제인지 찾아내고 해결하는 과정을 디버깅(Debugging)이라고 합니다.
언리얼 엔진은 블루프린트의 문제를 효율적으로 찾을 수 있도록 다양한 디버깅 도구를 제공합니다.
이번 절에서는 블루프린트 디버깅의 가장 기본적인 방법들을 알아보겠습니다.
블루프린트 디버깅은 Print String을 흩뿌리는 일이 아니라 재현 조건을 고정하고 Debug Object, Breakpoint, Watch로 상태를 추적하는 과정입니다.
- 재현 고정
맵, 액터 인스턴스, 입력 순서, 시작 상태를 먼저 고정합니다. scenario
- Debug Object 선택
여러 인스턴스 중 실제 문제가 나는 액터를 디버그 대상으로 지정합니다. instance
- Breakpoint 배치
벤트 시작점, 분기 조건, 값 변경 노드에 중단점을 둡니다. break
- Watch 관찰
변수, 핀 값, 배열 길이, 참조 유효성을 실행 중에 확인합니다. watch
- 수정 검증
수정 후 같은 재현 절차와 주변 흐름을 다시 실행합니다. verify
Print String 노드를 활용한 값 확인
가장 간단하면서도 강력한 디버깅 방법 중 하나는 앞서 사용했던 Print String 노드를 활용하는 것입니다.
특정 시점에 변수의 값이 올바른지, 특정 로직이 예상대로 실행되는지 등을 화면에 출력하여 확인할 수 있습니다.
-
사용 방법
- 확인하고 싶은 변수나 노드의 출력 핀에서 드래그하여
Print String노드를 추가합니다. Print String노드의In String핀에 변수를 연결하거나, 직접 출력하고 싶은 메시지를 입력합니다.Print String노드의Duration핀을 조절하여 메시지가 화면에 얼마나 오래 표시될지 설정할 수 있습니다. (기본값 2초)
- 확인하고 싶은 변수나 노드의 출력 핀에서 드래그하여
-
활용 예시
- "캐릭터의 현재 체력:
CurrentHealth"와 같이 변수 값을 함께 출력하여 실시간으로 변화를 확인합니다. - 특정 조건문(예:
Branch노드)의True또는False경로에Print String을 연결하여, 어떤 조건이 만족되었는지 확인합니다.
- "캐릭터의 현재 체력:
Print String은 마치 요리 중간에 간을 보듯이, 블루프린트 로직의 특정 지점을 맛보는 것과 같습니다.
간단하지만, 문제의 원인을 좁혀나가는 데 매우 효과적입니다.
브레이크포인트(Breakpoint) 사용하기
Print String이 특정 지점의 값을 출력하는 방법이라면, 브레이크포인트는 블루프린트 실행을 특정 노드에서 멈추고 당시의 변수와 흐름을 확인하는 디버깅 기능입니다.
-
사용 방법
블루프린트 에디터의 이벤트 그래프에서 실행 흐름을 멈추고 싶은 노드의 실행 핀(Execution Pin)을 마우스 오른쪽 버튼으로 클릭합니다.
컨텍스트 메뉴에서
토글 브레이크포인트(Toggle Breakpoint)를 선택합니다.브레이크포인트가 설정된 노드의 실행 핀이 빨간색으로 변하는 것을 확인할 수 있습니다.
게임 월드에서
플레이(Play)버튼을 클릭하여 게임을 실행합니다. -
디버깅 과정
- 블루프린트의 실행 흐름이 브레이크포인트가 설정된 노드에 도달하면, 게임이 일시 정지되고 블루프린트 에디터가 활성화됩니다.
- 블루프린트 에디터에서 실행이 멈춘 노드는 노란색으로 강조됩니다.
- 디버그 필터(Debug Filter) 패널이나 콜 스택(Call Stack) 패널을 통해 현재 어떤 블루프린트의 어떤 함수가 실행 중인지 확인할 수 있습니다.
- 가장 중요한 것은 변수 패널(Variables Panel)입니다. 실행이 멈춘 시점에서 모든 변수들의 현재 값을 확인할 수 있습니다. 이 값을 통해 로직이 잘못된 방향으로 흘러간 원인을 파악할 수 있습니다.
- 블루프린트 에디터 상단의
계속(Continue)버튼(녹색 재생 버튼 모양)을 클릭하면 다음 브레이크포인트까지 또는 게임 종료 시까지 실행이 다시 진행됩니다. 단계별 실행(Step Over)버튼(파란색 화살표 모양)을 클릭하면 현재 노드만 실행하고 다음 노드에서 다시 일시 정지합니다. 이를 통해 한 노드씩 실행 흐름을 따라가며 문제를 세밀하게 추적할 수 있습니다.
브레이크포인트는 마치 정밀 검사를 위해 컨베이어 벨트를 멈추는 것과 같습니다.
특정 시점의 모든 상태를 파악하여 복잡한 문제를 해결하는 데 필수적인 기능입니다.
Print String으로 넓게 확인하고, 브레이크포인트와 Watch로 좁혀 들어가면 노드 흐름의 실제 값을 안전하게 추적할 수 있습니다.
- 1Print String
벤트가 호출되는지 빠르게 확인하는 첫 단계입니다.
- 2Breakpoint
문제가 시작되는 노드에 멈춤 지점을 걸어 실행 순서를 봅니다.
- 3Watch Value
변수와 핀 값이 기대와 다른 순간을 찾습니다.
- 4Step 실행
한 노드씩 진행하면서 분기 조건과 참조가 바뀌는 지점을 확인합니다.
- 5블루프린트 실행 추적 순서
레벨에 여러 인스턴스가 있으면 Debug Object를 먼저 고릅니다. 임시 출력은 작업 후 제거해 화면과 로그를 깨끗하게 유지합니다. 재현 조건을 적어 두면 같은 문제를 팀원이 빠르게 확인할 수 있습니다.
- 6증상별 도구
호출 안 됨 Print 값 이상 Watch 순서 문제 Step 대상 혼동 Debug Object
디버그 오브젝트 선택 (Debug Object)
특정 액터 블루프린트가 여러 개 존재하거나, 특정 액터의 인스턴스에서만 발생하는 문제를 디버깅하고 싶을 때 유용한 기능입니다.
-
사용 방법
블루프린트 에디터가 열린 상태에서, 게임 월드의 뷰포트(Viewport)나 월드 아웃라이너(World Outliner)에서 디버깅하고 싶은 해당 액터 블루프린트의 인스턴스를 선택합니다.
블루프린트 에디터 상단 툴바에 있는
디버그 오브젝트(Debug Object)드롭다운 메뉴를 클릭합니다.드롭다운 목록에서 현재 월드에 선택된 블루프린트 인스턴스의 이름을 선택합니다.
이제 이 블루프린트 인스턴스에서 발생하는 실행 흐름과 변수 값만 디버깅 정보에 표시됩니다.
이 기능을 사용하면 특정 대상에 대한 디버깅에 집중할 수 있어, 복잡한 환경에서 불필요한 정보를 걸러내고 문제 해결에 집중할 수 있습니다.
블루프린트 디버깅은 “안 된다”가 아니라 어떤 입력에서 어느 노드까지 실행됐는지 기록하는 일이다.
- SymptomSymptom 화면/로그
관찰한 문제
- ConditionCondition 재현되
입력, 위치, 상태
- TraceTrace Print String/Breakpoint
도달 노드 확인
- Fix checkFix check 수정 후 같
조건으로 다시 확인
| 기준 | 해석 |
|---|---|
| 좋은 재현 | 3단계 이하로 반복 가능 |
| 나쁜 재현 | 가끔 안 됨, 정확한 입력 없음 |
| 핵심 | 재현 절차가 짧아질수록 원인도 좁아진다 |
디버깅은 블루프린트 개발의 필수적인 부분입니다.
처음에는 어렵게 느껴질 수 있지만, 이 기본적인 도구들을 꾸준히 활용하면서 문제 해결 능력을 키워나가는 것이 중요합니다.
이 절에서 다룬 절차를 반복해 문제 재현과 원인 추적 루틴을 먼저 고정하세요.
Print String, Breakpoint, Debug Object는 서로 대체재가 아니라 관찰 깊이가 다른 도구입니다.
- 호출 여부와 값 변화를 빠르게 본다
Print String 적합 이벤트가 실행되는지, 체력이나 점수 값이 변하는지 확인할 때 출력 노이즈 메시지가 많으면 실행 순서와 인스턴스를 헷갈리기 쉽습니다.
- 분기 조건과 핀 값을 멈춘 상태에서 본다
Breakpoint 적합 Branch 결과가 예상과 다르거나 노드 순서를 따라가야 할 때 재현 조건 플레이 흐름이 멈추므로 재현 조건을 먼저 고정해야 합니다.
- 여러 액터 중 문제 인스턴스만 추적한다
Debug Object 적합 같은 블루프린트가 레벨에 여러 개 있고 하나만 이상할 때 대상 변경 선택한 대상이 바뀌면 이전 값으로 판단하지 않도록 확인합니다.
이제 블루프린트 입문 과정을 마무리했습니다.
다음 장에서는 블루프린트의 핵심 요소들을 하나씩 깊이 있게 살펴보겠습니다.
마무리 점검 다이어그램
Print String, Breakpoint, Watch, Debug Object는 서로 보완 관계입니다. 실행 경로, 값 변화, 인스턴스 착각을 분리하면 원인 범위가 빠르게 좁혀집니다.
- Print String 경로 표식
실행 경로 Branch 앞뒤와 Event BeginPlay 진입점에 서로 다른 문구를 찍어 Output Log 순서를 확인합니다.
- Breakpoint·Watch 중단
값 변화 Set 변수 직후 멈춰 Step Over와 Watch로 핀 값이 어느 노드에서 바뀌는지 확인합니다.
- Debug Object 대상 고정
인스턴스 PIE에 같은 블루프린트가 여러 개라면 Debug Filter에서 실제 액터를 골라 추적합니다.
디버깅 도구를 상황별로 선택하는 기준을 마지막에 정리합니다.
Print String을 많이 찍는 대신 증상에 맞는 관찰 깊이를 정하면 원인이 빨리 좁혀진다.
| 증상 | 먼저 쓸 도구 | 확인할 값 |
|---|---|---|
| 노드가 실행되는지 모름 | Print String | 실행 경로, Self 이름, 분기 결과 |
| 특정 핀 값이 틀림 | Breakpoint + Watch | 멈춘 순간의 입력 핀과 변수 |
| 레벨에 같은 BP가 많음 | Debug Object | 화면 속 액터와 에디터 관찰 대상 일치 |
| Tick 로그가 뒤섞임 | 조건부 출력 | 문제가 나는 프레임과 상태만 남김 |
디버깅은 메시지를 많이 찍는 일이 아니라 실행 여부, 값 상태, 관찰할 인스턴스를 차례로 좁히는 과정입니다.
빠른 출력으로 범위를 잡고, 멈춤 디버깅으로 실제 인스턴스의 값을 확인한다.
- Print
실행 여부와 분기 결과를 빠르게 확인한다.
- Narrow
문제가 반복되는 그래프와 입력 조건을 고정한다.
- Breakpoint
의심 노드에서 멈춰 핀 값과 호출 순서를 본다.
- Debug Object
관찰할 액터 인스턴스를 정확히 선택한다.
- Fix & Remove
원인을 고친 뒤 임시 출력과 중단점을 정리한다.
| 기준 | 판정 |
|---|---|
| 좋은 출력 | 변수명, Self 이름, 조건 결과가 함께 나온다. |
| 나쁜 출력 | Tick마다 문자열만 쌓여 실행 순서가 더 흐려진다. |