비주얼 스크립팅 기본 개념
노드와 핀, 실행선과 데이터선을 구분하고 그래프의 실행 순서와 값 전달 과정을 올바르게 읽는 법을 익힙니다.
앞선 절에서는 블루프린트가 언리얼 엔진의 비주얼 스크립팅 시스템이라는 점을 다뤘습니다.
이번 절에서는 비주얼 스크립팅의 의미와 블루프린트가 이를 구현하는 방식을 정리합니다.
비주얼 스크립팅은 시각적인 요소로 프로그램을 작성하는 방식입니다.
텍스트 기반 프로그래밍이 코드를 타이핑해 논리를 만드는 방식이라면, 비주얼 스크립팅은 그림을 그리듯 흐름을 설계합니다.
코드를 직접 쓰는 대신 기능이 담긴 노드(Node)를 배치하고, 노드 사이를 선(Wire)으로 연결해 데이터 흐름과 실행 순서를 표현합니다.
즉, 코드 문법보다 로직 구조를 먼저 이해하기 좋은 방식이라고 볼 수 있습니다.
코드를 타이핑하는 대신 기능 단위 노드를 배치하고 연결한다. 블루프린트를 읽을 때는 흰 실행선으로 시간 순서를 먼저 잡고, 색 있는 데이터선으로 값의 출처를 확인한다.
- 1문장은 위에서 아래로 읽힌다
텍스트 코드 관점 입력 이벤트 발생 조건 검사 결과 함수 호출 텍스트 코드에서는 줄의 순서와 중괄호 구조가 흐름을 말한다.
- 2노드는 기능과 입출력 핀을 함께 가진다
블루프린트 노드 이름 어떤 작업인지 알려준다. 실행 핀 실행 시작과 다음 실행 위치를 연결한다. 데이터 핀 숫자, 불리언, 오브젝트 같은 값을 주고받는다.
- 3같은 연결처럼 보여도 질문이 다르다
선의 두 역할 실행선 언제 실행되는가를 말한다. 데이터선 어떤 값이 전달되는가를 말한다.
블루프린트가 비주얼 스크립팅 시스템의 핵심적인 특징들을 어떻게 구현하고 있는지 구체적으로 살펴보겠습니다.
노드 (Node)
블루프린트는 노드 모양보다 실행선과 데이터선이 어떤 순서로 흘러가는지를 먼저 읽어야 구조가 보입니다.
- 1이벤트 시작점 찾기
BeginPlay, Tick, 입력 이벤트처럼 실행이 시작되는 노드를 먼저 찾습니다.
- 2흰 실행선 따라가기
분기, 반복, 함수 호출이 어떤 순서로 이어지는지 확인합니다.
- 3데이터선 확인
변수와 반환값이 어느 노드 입력으로 들어가는지 분리해서 봅니다.
- 4부작용 표시
액터 이동, 스폰, UI 변경처럼 상태를 바꾸는 노드를 따로 표시합니다.
블루프린트에서 모든 기능의 최소 단위는 바로 노드입니다.
각각의 노드는 특정한 작업을 수행합니다.
예를 들어, 수학적 연산(덧셈, 곱셈), 변수 값 설정, 특정 함수 호출, 조건 확인 등 다양한 역할을 담당합니다.
노드는 일반적으로 다음과 같은 구성 요소를 가집니다.
- 실행 핀 (Execution Pin): 노드의 좌측 또는 상단에 위치하며, 다른 노드로부터 실행 흐름을 받거나 다른 노드로 실행 흐름을 전달하는 역할을 합니다. 마치 전기 스위치처럼 지금 이 노드를 실행하라는 명령을 전달하는 통로라고 생각할 수 있습니다.
- 데이터 핀 (Data Pin): 노드의 측면에 위치하며, 데이터를 입력받거나 결과를 출력하는 역할을 합니다. 노드가 특정 작업을 수행하기 위해 필요한 정보(입력)를 받거나, 작업의 결과(출력)를 다른 노드로 넘겨줄 때 사용됩니다. 데이터 핀은 데이터의 종류(예: 숫자, 문자열, 불리언 등)에 따라 색깔이 다르게 표시되어 시각적으로 쉽게 구분할 수 있습니다.
- 노드 이름 (Node Name): 노드가 어떤 기능을 수행하는지 알려주는 이름입니다.
선 (Wire)
선은 노드들을 서로 연결하여 데이터의 흐름이나 실행 순서를 정의하는 역할을 합니다.
선은 크게 두 가지 종류로 나눌 수 있습니다.
- 실행 선 (Execution Wire): 실행 핀과 실행 핀을 연결하며, 노드들이 어떤 순서로 실행될지 결정합니다. 예를 들어, A 노드가 실행된 후 B 노드를 실행하라는 순서를 지정할 때 사용합니다.
- 데이터 선 (Data Wire): 데이터 핀과 데이터 핀을 연결하며, 한 노드에서 다른 노드로 데이터를 전달합니다. A 노드의 계산 결과를 B 노드의 입력으로 사용하라와 같은 데이터의 흐름을 나타냅니다.
흰 실행선은 노드가 언제 실행되는지, 색 있는 데이터선은 어떤 값이 입력으로 들어가는지 보여준다.
- Exec wireExec wire 흰 선 노드 실행 순서
분기
- Data wireData wire 색 선 float
vector, object reference 같은 값
- Pure nodePure node 실행선 없음 값
필요할 때 계산
- BranchBranch 조건에 따라 실행 경
분리
| 상황 | 판단 |
|---|---|
| 혼동 금지 | 데이터선만 연결해도 실행되는 것은 아님 |
| 읽는 순서 | 흰 선으로 시간, 색 선으로 재료 확인 |
| 판단 | 노드 오류는 실행 누락과 값 누락을 분리해 찾는다 |
이처럼 노드와 선을 조합하여 복잡한 로직도 직관적으로 구성할 수 있습니다.
텍스트 코드와 달리, 프로그램의 전체적인 흐름을 한눈에 파악하기 쉽다는 것이 비주얼 스크립팅의 큰 장점입니다.
문제가 발생했을 때도 어느 노드에서 어떤 데이터가 잘못 전달되었는지 시각적으로 추적하기 용이합니다.
블루프린트는 이러한 비주얼 스크립팅의 기본 개념을 충실히 따르면서도, 언리얼 엔진의 강력한 기능들과 완벽하게 통합되어 있습니다.
다음 절에서는 블루프린트를 효율적으로 활용할 수 있는 개발 환경, 즉 블루프린트 에디터에 대해 자세히 알아보겠습니다.
학습 체크포인트
이번 절을 마치기 전에 아래 항목을 스스로 설명할 수 있는지 점검해 보세요.
- 노드와 선이 각각 실행 흐름과 데이터 흐름에서 어떤 역할을 하는가
- 실행 선과 데이터 선을 혼동했을 때 어떤 버그가 발생하는가
- 텍스트 스크립팅 대비 비주얼 스크립팅의 장단점은 무엇인가
- 블루프린트 그래프를 읽을 때 시작 노드부터 추적해야 하는 이유는 무엇인가
다음 실습 진입 전 점검
다음 절(블루프린트 에디터)로 넘어가기 전에 아래 항목을 확인하면 학습 속도가 안정적으로 올라갑니다.
- 노드의 실행 핀과 데이터 핀을 색상/역할 기준으로 즉시 구분할 수 있는가
- 간단한 이벤트 흐름을 말로 설명한 뒤 노드 연결로 재현할 수 있는가
- 그래프를 읽을 때 실행 시작점(Event 노드)에서 끝점까지 추적하는 습관이 있는가
- 선이 꼬여 보일 때 기능 단위로 노드를 묶어 정리할 수 있는가
실제 디버그 인스턴스에서 마지막 실행 지점을 찾습니다. 그 다음 그 노드의 입력값만 좁혀 봅니다.
- Event
ENTRY Event 입력 · 충돌 · 수명주기
- Branch
GUARD Branch 조건값 · 유효성
- Call / Set
ACTION Call / Set 대상 · 인자 · 반환값
- Visible effect
RESULT Visible effect 상태 · UI · 이동
- 실행선
도구 Breakpoint · Execution Trace · Call Stack 질문 마지막으로 실행된 노드는 어디인가?
- 데이터선
도구 Watch Value · 변수/출력 핀 검사 질문 그 노드가 받은 값과 타입은 맞는가?
실습 준비 메모
- 첫 실습에서는 노드 수를 줄이고, 실행 선과 데이터 선을 먼저 분리해 확인합니다.
- 동작 확인이 끝난 그래프는 주석(Comment) 박스로 목적을 기록해 재사용성을 높입니다.
- 오류가 나면 마지막으로 변경한 노드 1개부터 되돌려 원인을 좁히는 방식이 효과적입니다.
그래프 읽기 우선순위
복잡한 블루프린트에서도 아래 순서로 읽으면 구조를 빠르게 파악할 수 있습니다.
- Event 노드에서 시작해 실행 선만 먼저 끝까지 추적하기
- 각 분기점(Branch)에서 참/거짓 경로를 한 번씩 말로 설명하기
- 마지막에 데이터 선을 따라 값이 어디서 바뀌는지 확인하기
실수 방지 기준
첫 블루프린트 실습에서는 기능 추가 속도보다 그래프 품질을 유지하는 기준을 먼저 고정하는 것이 좋습니다.
- 노드 이름과 변수 이름을 역할 중심으로 지정해 그래프 의미를 즉시 파악할 수 있게 합니다.
- 한 그래프에서 처리할 책임을 제한해 디버깅 경로를 짧게 유지합니다.
- 실행 흐름이 끊기는 지점은 Print String 등 최소 로그로 즉시 확인합니다.
초기 그래프 단계에서 품질 기준을 고정하면, 이후 복잡한 상호작용을 추가할 때도 구조를 크게 흔들지 않고 확장할 수 있습니다.
이는 협업 시 그래프 리뷰 기준을 통일하는 데도 직접적인 이점을 제공합니다.
마무리 점검 다이어그램
노드는 그림처럼 보이지만 실행 핀과 데이터 핀의 흐름을 구분해야 정확히 읽을 수 있습니다.
- 1실행 순서
Exec 흰색 실행 핀이 어떤 노드를 먼저 실행하는지 결정합니다.
- 2값 전달
Data 색이 있는 데이터 핀은 계산에 필요한 값을 전달합니다.
- 3Branch Bool 조건
Branch Bool 결과를 기준으로 흐름을 True와 False로 나눕니다.
- 4재사용
Function 반복되는 흐름은 함수나 매크로로 묶어 그래프를 줄입니다.
노드와 선을 헷갈리지 않고 읽기 위한 마무리 루틴을 추가합니다.
처음에는 모든 노드를 보지 말고, 실행 시작점과 마지막으로 바뀌는 값을 먼저 찾는다.
- Start event BeginPlay
Input, Overlap 확인
- Exec path 흰 실행선
따라 이동
- Data inputs 각 노드
필요한 값을 어디서 받는지 확인
- State change Set, Spawn
Destroy 같은 결과 찾기
| 점검 | 기준 |
|---|---|
| 멈춘 지점 | 실행선이 끊긴 노드 |
| 값 문제 | 데이터선이 비어 있거나 타입이 다름 |
| 핵심 | 시간 경로와 값 경로를 따로 추적한다 |
비주얼 스크립팅을 읽을 때는 실행선과 데이터선을 섞어 보지 않고, 시작 이벤트에서 결과 노드까지 따로 추적합니다.
그래프를 읽을 때는 노드 이름보다 실행선, Branch, 데이터 입력 핀을 먼저 본다.
- Entry 이벤트 노드
시작
- Sequence/Branch 분기
순서 제어
- Function call 실제 동작 실행
- Set variable 상태 변경 확인
| 점검 | 기준 |
|---|---|
| 실행선 | 언제 실행되는지 |
| 데이터 핀 | 무슨 값으로 실행되는지 |
| 디버깅 | Print String을 경로 중간에 배치 |