컨텐츠 검색
[UE5 BP] _#6. 언리얼 엔진 블루프린트 완전 정복 2편: 노드 · 변수 · 이벤트 · 함수 · 통신 실전 가이드

2025. 11. 18. 16:33Unreal Engine/개념

1. 노드와 핀(Node & Pin)

1-1. 노드 배치하는 방법

노드 생성 방법

  • 그래프 빈 공간 우클릭 → 컨텍스트 메뉴에서 노드 검색
  • 이미 있는 핀을 드래그해서 빈 공간에 놓기 → 해당 핀 타입과 호환되는 노드 목록 표시

컨텍스트 기반 생성 팁

  • 특정 출력 핀에서 드래그해서 놓으면,
    → 그 데이터 타입 / 실행 타입에 맞는 노드들만 필터링되어 나온다.
    → “이 상황에 쓸 만한 노드” 위주로 보이기 때문에, 초반엔 이 방식이 훨씬 편함.

 

1-2. 핀(Pin)의 기본 개념

  • 노드는 보통 왼쪽: 입력 핀, 오른쪽: 출력 핀
  • 핀 종류
    • 실행 핀(Execution Pin): 하얀 삼각형, 실행 흐름(흰 선)
    • 데이터 핀(Data Pin): 타입에 따라 색이 다른 둥근 핀, 데이터 흐름(색 있는 선)

실행 핀 (Execution Pin)

  • “이 노드를 언제 실행할지”를 결정
  • 입력 실행 핀이 활성화될 때 노드 실행
  • 실행이 끝나면 출력 실행 핀을 통해 다음 노드로 흐름 전달
  • 연결 없음 → 윤곽선, 연결 있음 → 실선

예:

  • 함수 호출 노드: 보통 입력 실행 1개, 출력 실행 1개
  • Sequence / Branch 등: 입력/출력이 여러 개일 수 있음

데이터 핀 (Data Pin)

  • “이 노드가 어떤 데이터를 주고받는지”를 나타냄
  • 각 핀은 타입이 정해져 있음 (bool, int, float, vector, object reference 등)
  • 같은 타입끼리만 직접 연결 가능
  • 연결 없음 → 윤곽선, 연결 있음 → 실선

예:

  • 함수 파라미터 / 반환값 ↔ 데이터 핀으로 매핑
  • 변수 Get/Set 노드의 핀도 데이터 핀

 

1-3. 자동 형변환(Auto-cast)와 와이어(Wire)

  • 서로 다른 타입의 데이터 핀이라도,
    호환 가능한 타입이면 자동 형변환 노드(autocast)가 중간에 생성될 수 있다.
  • 예:
    • floatint
    • VectorRotator
  • 두 핀을 연결하려 할 때 뜨는 툴팁으로 형변환 가능 여부를 확인할 수 있음.
  • 핀과 핀 사이를 연결한 선을 와이어(Wire)라고 부르며:
    • 실행 핀 사이의 와이어: 실행 흐름
    • 데이터 핀 사이의 와이어: 데이터 흐름

2. 변수(Variable)

2-1. 자주 쓰는 변수 타입 & 색

타입 색 (대략) 설명
Boolean 갈색 True / False 값
Byte 청록 0~255 정수(Unsigned)
Integer 어두운 청록 32비트 정수
Integer64 황록 64비트 정수(long)
Float 연두 소수 값
Name 연보라 식별용 텍스트(주로 내부 이름)
String 자홍 일반 문자열
Text 분홍 사용자 표시용 텍스트(현지화 대상)
Vector 금색 (X,Y,Z) 3D 좌표 / 색 데이터 등
Rotator 연파랑 회전(피치, 요, 롤)
Transform 주황 위치 + 회전 + 스케일 합친 구조체
Object Ref 파랑 액터, 라이트, 메쉬, 카메라 등 오브젝트 참조

 

2-2. 접근 범위 & 인스턴스 편집

  • 변수 옆에 있는 눈 아이콘
    • 감긴 상태: Private(프라이빗) 느낌 – 외부에서 보이지 않음
    • 열린 상태: Public(퍼블릭) 디테일 패널에서 값 편집 가능
  • “Instance Editable” 체크 ON → 레벨에 배치된 인스턴스마다 다른 값 설정 가능
  • “Private” 체크 ON → 다른 블루프린트에서 Set 못 하도록 보호

 

2-3. 시네마틱 노출

  • 변수에 “Expose to Cinematics(시네마틱에 노출)” 옵션을 켜면
    • Sequencer(시퀀서)에서 해당 변수 값을 트랙으로 제어 가능
    • 컷신에서 머티리얼 파라미터/위치/스케일 등을 타임라인에 따라 변경하는데 사용

 

2-4. Get / Set 노드 & 단축키

  • Get 노드: 변수 값을 읽어오는 노드
    → 다른 노드의 입력 데이터 핀에 연결해서 사용
  • Set 노드: 변수 값을 바꾸는 노드
    → 실행 핀(Exec)을 통해 호출해야 함 (즉, “언제 값 바뀌는지” 제어 가능)

단축키 (내 블루프린트 탭에서 변수 드래그)

  • Ctrl + 드래그Get 노드 생성
  • Alt + 드래그Set 노드 생성

3. 흐름 제어(Flow Control)

“어떤 순서로, 어떤 조건에서, 얼마나 반복할 것인가”를 제어하는 노드들

3-1. 대표 Flow Control 노드

노드 개념 요약
Branch if (조건) 한 줄짜리 분기. Bool에 따라 True/False 출력으로 나뉨
Sequence 입력 1번 → A, B, C 등 여러 출력을 순서대로 연속 실행
Do N 입력이 들어올 때마다 최대 N번까지 실행. 이후 Reset될 때까지 무시
Do Once 진짜 딱 한 번만 실행. Reset 신호 들어오면 다시 1회 실행 가능
FlipFlop A, B 출력을 번갈아 실행 (첫 호출 A, 두 번째 B, 다시 A, B…)
Gate Enter 신호가 들어와도 Gate가 Open 상태일 때만 Exit로 통과
MultiGate 여러 출력 중 하나씩 순서대로(또는 랜덤으로) 실행
ForLoop Start~End까지 인덱스를 돌면서 Loop Body 실행
ForLoopWithBreak ForLoop + 중간에 Break 가능
WhileLoop 조건이 True인 동안 계속 바디 실행(주의: 무한 루프 조심)

4. 이벤트(Event)

“게임에서 일어나는 사건에 반응해서 블루프린트 실행을 시작하는 것”

4-1. 이벤트의 역할

  • 대부분의 그래프는 Event 노드 → 실행 핀 → 나머지 로직 구조
  • 예:
    • 게임 시작할 때 하고 싶은 일 → Event BeginPlay
    • 매 프레임 할 일 → Event Tick
    • 충돌/오버랩 발생 시 반응 → Overlap/Hit 이벤트

 

4-2. 주요 이벤트 종류 (카테고리별)

① 라이프사이클 관련

  • Event BeginPlay: 액터가 월드에 등장했을 때 1회 호출
  • Event EndPlay: 액터가 월드에서 사라질 때 호출
  • Event Destroyed: 액터가 Destroy 되었을 때 호출
  • Event Level Reset: 레벨이 재시작될 때 실행

② 콜리전 / 오버랩 관련

  • Event Actor Begin Overlap
  • Event Actor End Overlap
  • 조건:
    • 서로 Overlap 반응이 가능하도록 콜리전 세팅
    • 두 액터 모두 Generate Overlap Events = true
  • Event Hit
    • Simulation Generates Hit Events = true인 경우 충돌 시 호출
    • Sweep 이동 시에도 발생 가능

③ 대미지 관련 (서버에서만 실행)

  • Event Any Damage
  • Event Point Damage
  • Event Radial Damage

④ 입력 / 마우스 관련

  • Event Actor Begin Cursor Over
  • Event Actor End Cursor Over

⑤ HUD 관련

  • Event Receive Draw HUD
    • HUD 블루프린트에서 사용
    • 직접 2D 그리기 등 커스텀 HUD 처리

⑥ Custom Event

  • 사용자가 만드는 이벤트
  • 이름 뽑아서 → 다른 곳에서 호출 가능
  • 인자(파라미터)를 추가해서 “데이터도 같이” 보낼 수 있음

5. 타임라인(Timeline)

“시간에 따라 값을 변화시키는 미니 타임라인 시스템”

5-1. 개념

  • 블루프린트 안에서 쓸 수 있는 간단한 애니메이션/보간 도구
  • 키프레임 기반으로
    • float / vector / color 값을 시간에 따라 변화
    • 이벤트 트랙도 존재 (특정 시점에 이벤트 발동)

 

5-2. 사용 목적

  • 문 열기/닫기(회전값 보간)
  • 라이트 밝기/색 변화
  • 캐릭터 흔들림, UI 알파 페이드 등
    → “시퀀서 수준은 아니지만, 게임플레이용 간단한 시간 연출”에 최적화

 

5-3. 타임라인 입력 핀

  • Play / Play from Start
  • Stop
  • Reverse / Reverse from End
  • Set New Time(float New Time)

 

5-4. 타임라인 출력 핀

  • Update: 재생 중 매 프레임 호출 (여기서 값 적용)
  • Finished: 끝에 도달했을 때 1회 호출
  • Direction: 현재 재생 방향(Forward/Backward)

6. 함수(Function)

“입력 → 로직 → 출력” 구조를 가진 재사용 가능한 로직 블록

6-1. 기본 개념

  • 블루프린트 안에서 독립된 그래프로 존재
  • 호출할 땐 Function Call 노드 하나로 표현
  • 여러 그래프에서 반복해서 호출 가능

 

6-2. 접근 지정자 (Access Specifier)

  • Public: 다른 블루프린트에서도 호출 가능 (기본값)
  • Protected: 현재 블루프린트 + 자식 블루프린트에서만 호출
  • Private: 해당 블루프린트 내부에서만 사용 가능

 

6-3. Pure vs Impure

  • Pure 함수
    • Exec 핀이 없음
    • “상태를 바꾸지 않는다”는 계약
    • 입력 데이터 → 계산 → 출력 데이터
    • 예: 거리 계산, Clamp, 변환 등
  • Impure 함수
    • Exec 핀 있음
    • 변수 변경, 액터 스폰 등 상태 변화 가능
    • 일반적인 “작업 함수”

 

6-4. 함수 만들기 & 사용하는 흐름

  1. 내 블루프린트 탭 → 함수 섹션 → + 버튼
  2. 이름 지정 후, 새 그래프에서 입력/출력 파라미터 추가
  3. 입·출력 노드 사이에 로직 작성
  4. 사용하려는 그래프에서:
    • 내 블루프린트 탭에서 함수를 드래그 하거나
    • 우클릭 → 검색해서 Function Call 노드 추가

외부 블루프린트에서 호출하려면
*해당 블루프린트에 대한 레퍼런스- → 거기서 함수 호출


7. 매크로(Macro)

“접힌 노드 묶음” – 함수처럼 보이지만 실행 흐름 제어에 더 특화된 재사용 블록

7-1. 함수와의 차이

  • 함수:
    • 입력/출력 데이터 중심
    • 보통 Exec 입력 1개, 출력 1개
  • 매크로:
    • 실행 출력이 여러 개일 수 있음
    • Flow를 분기시키거나 패턴화하는 데 유리

 

7-2. 만드는 법

  1. 내 블루프린트 탭 → 매크로 섹션 → + 버튼
  2. 이름 지정 → 입력/출력 파라미터 추가
  3. 입력 터널 노드 ↔ 출력 터널 노드 사이에 로직 작성
  4. 사용 시:
    • 그래프 우클릭 → 매크로 검색
    • 내 블루프린트 탭에서 끌어서 추가

8. 이벤트 디스패처(Event Dispatcher)

“이벤트를 던지는 쪽”과 “듣고 있는 쪽”을 느슨하게 연결하는 브로드캐스트 시스템

8-1. 개념

  • 하나의 디스패처에 여러 이벤트를 바인딩(Bind)할 수 있음
  • 디스패처를 Call(브로드캐스트)하면
    → 그 디스패처에 묶여 있는 모든 바운드 이벤트가 한 번에 실행

 

8-2. 용도 예시

  • 캐릭터 BP → 레벨 BP에게 “나는 레벨업했다” 알리기
  • 보스 죽음 → 여러 객체가 동시에 반응
    • 문 열림, HUD 메시지, 보상 스폰 등

 

8-3. 만들기 & 사용 패턴

  1. 내 블루프린트 탭 → Event Dispatcher 섹션 → + 버튼
  2. 필요 시 입력 파라미터 추가(예: 죽은 보스 이름, 점수 등)
  3. 바인딩 측:
    • Bind Event to <Dispatcher>로 이벤트 연결
  4. 발생 측:
    • Call <Dispatcher> 노드 호출 → 바운드된 이벤트 모두 실행

9. 블루프린트 통신 방법 (Overview)

여러 블루프린트가 서로 정보를 주고받는 방법 요약

9-1. 직접 통신 (Direct Reference)

  • 특정 액터에 대한 레퍼런스를 얻고
    • 그 위에서 변수/함수 호출
  • 사례:
    • 버튼 BP → 문 BP에 “OpenDoor()” 호출
    • 스위치 → 라이트 On/Off

 

9-2. 이벤트 디스패처 (Broadcast 방식)

  • 한 이벤트에 여러 객체가 “구독”하는 구조
  • 사례:
    • 보스 OnDied → 캐릭터, 문, HUD, 스폰 시스템 등이 각각 자기 로직 실행

 

9-3. 블루프린트 인터페이스 (Interface)

  • 서로 다른 타입의 블루프린트들이
    “같은 함수 이름”으로 반응하도록 하는 계약
  • 예:
    • Interact 인터페이스
      • 문: 열리기
      • 상자: 아이템 드랍
      • 버튼: 장치 ON
    • OnTakeDamage 인터페이스
      • 나무: 탄다
      • 얼음: 녹는다

 

9-4. Cast (형변환)

  • “너 혹시 이 클래스 타입이니?” 하고 물어보는 것
  • 성공하면 그 타입의 고유한 변수/함수에 접근 가능
  • 예:
    • Get Player CharacterCast to MyFlyingCharacter
    • 특정 자식 클래스(고양이/개/새 등)에만 있는 함수 호출

10. 랜덤 스트림(Random Stream)

“재현 가능한 랜덤” – 같은 Seed → 같은 결과, 다른 Seed → 다른 결과

10-1. 개념

  • 일반 Random: 호출할 때마다 결과가 달라짐
  • Random Stream:
    • 시드(Seed)를 기준으로 난수들이 순서 있게 생성
    • 같은 Seed로 다시 시작하면 동일한 순서의 난수가 나옴
  • 절차적 배치/환경 생성에서 “랜덤이지만 다시 재현 가능한 상태”를 만들 때 유용

 

10-2. RandomStream 변수

  • 블루프린트에서 특수 구조체 타입 변수로 사용
  • 이 변수 하나를 기반으로 여러 유형의 랜덤을 뽑아 쓸 수 있음
    • Bool, Float, Int, Vector, Rotator 등

 

10-3. 주요 RandomStream 함수들

  • Random Bool from Stream
  • Random Float from Stream (0~1)
  • Random Float in Range from Stream (Min~Max)
  • Random Integer from Stream
  • Random Integer in Range from Stream
  • Random Rotator from Stream
  • Random Unit Vector from Stream

→ 전부 RandomStream 변수 + 각 함수 조합으로 사용

 

10-4. Seed 제어

  • Initial Seed 값이 같으면 → 결과 분포도 동일
  • Seed를 바꾸면 → 완전히 다른 패턴
  • 인스턴스마다 Seed가 따로 존재하므로,
    레벨에 같은 블루프린트를 여러 개 배치해도 각자 다른 랜덤 결과를 가질 수 있음
  • 필요하다면 그래프에서 Set Random Stream Seed 노드로 Seed를 직접 세팅 가능

마무리 한 줄 정리

  • 노드 & 핀: 실행 흐름과 데이터 흐름의 최소 단위
  • 변수: 상태를 저장하고 공유하는 기본 자원
  • 흐름 제어 & 이벤트: “언제, 어떻게” 로직이 실행될지를 결정
  • 타임라인 / 함수 / 매크로 / 디스패처: 로직을 시간·모듈·패턴 단위로 구조화
  • 통신 & 랜덤 스트림: 블루프린트 간 협업 + 재현 가능한 랜덤성 제공