개인 스터디/언리얼

언리얼 블루프린트 노드 (Version 4) 정리

Queenut 2025. 1. 24. 17:39

※ 각 노드에 대한 구체적인 사용방법이 아니라 개인적인 팁/주의사항 정리

  공식X ! 내 맘대로 분류!!

 

목차
1. 액터 클래스
  1-1. 실행 노드
  1-2. 커뮤니케이션 노드
  1-3. 네트워킹 노드
  1-4. 특수 노드
  1-5. 연산 노드
  1-6. 수행 노드
  1-7. 단순 값 반환 노드
  1-8. 흐름 제어 노드
  1-9. 배열 관련 노드
2. 레벨 클래스

 


1. 액터 클래스

 

1-1. 실행 노드

- 블루프린트의 가장 앞에 위치하여, 뒤의 노드들을 실행시키는 노드

▶ 이벤트

이름(검색어) 설명
BeginPlay 게임이 처음 시작할 때(플레이 누를 때) 한번 실행
Tick - 게임 시작 후 매 프레임 단위마다 뒤를 실행 → 컴퓨터 성능에 따라 다른 값을 받을 수 있음
- Delta Second = 프레임 단위 = 부하가 큼, 성능 저하가 큼
- Tick은 '액터가 플레이 됐을 때부터' 니까, 스폰되기 전엔 어떤 수행도 실행되지 않음
Hit - 액터 중 하나가 콜리전 세팅에 Simulation Generates Hit Events 옵션이 True 설정된 경우에만 실행
- 특정 조건의 수행을 위해 Overlap과 Hit의 실행 둘 다 필요한 경우가 존재함
사용 예 캐릭터를 Kill 시키려고 할 때 Overlap과 Hit 둘 다 설정해서 오류↓
On Component [] Overlap - 콜리전 Component가 필요 (Generate Overlap Events 가 True)
[] 종류 Begin 들어간 즉시
End - 탈출한 즉시 (조금이라도 탈출했을 때인지, 완전히 탈출했을 때인지는 확인 필요)
- 보통 Begin Overlap의 값을 초기화할 때 자주 사용
커스텀 이벤트 액터 → 레벨, 액터 → 액터 호출 가능
디테일 리플리케이트 되지 않음 서버 전송하지 않음
멀티캐스트 클라에서도 보이고, 서버도 되고
서버에서 실행 서버에서만 실행한다 = 클라에선 보이지 않는다 (클라에서 서버로)
소유중인 클라이언트에서 실행 소유 ≒ 컨트롤러의 관점. 단, 레벨에 놓인 같은 건 소유자가 없다. (서버에서 클라(소유)로)
신뢰성 - 패킷을 모두 쏴줄 것인지
≒ 패킷을 모두 쏜다 ≒ 변경되는 값을 앞뒤 계산한다 = 비용이 많이 든다
- 단, 1회적인 변경(토글 등)은 비용이 크지 않고, 불공평한 상황을 예방하기 위해 켜줄 수 있다.
→ '이것은 신뢰할 수 있다' 로 해석하면 될듯?

 

이벤트 외

구분 설명
Construction Script - 레벨 로드할 때 결정 (이후 변화X)
- 클래스BP만 가지고 있고, 컴포넌트 리스트를 구성하고나서 바로 실행되는 스크립트
- 클래스BP의 상태가 변경될 때마다 실행되는 스크립트
→ 게임 플레이 중 실행되는 영역(X)
→ 에디터(뷰포트, 아웃라이너)에 배치될 때 실행되는 영역(O)
사용 예 - 1개의 BP를 여러 군데에 배치할 때
- 개별적으로 속성을 변경하고 싶을 때
- 변경된 결과(머티리얼 인스턴스같은거)를 실시간으로 확인하고 싶을 때
→ 이벤트는 대게 게임을 실행해야 발생하니까, 배치 만으로 확인 가능함
함수 (Function) - 구현부가 클래스 내, 호출부는 내/외부 가능
- 구현부가 하나이므로 어디서 호출하든 하나의 동작
이벤트 디스패처 = 델리게이트, 콜백 (액터간의 통신수단)
- 하나의 호출에 대해 여러 개의 이벤트를 한 번에 실행하고 싶을 때 사용
- 바인드 없이 호출되지 않음
- 구현부와 호출부 어디서든 가능 (A클래스에서 구현/호출 가능, B클래스에서도 구현/호출 가능)
사용 예 플레이어가 죽음(호출)
→ 적이 멈춤(동작1) + 파티원이 마을로 돌아감(동작2) + 타워가 초기화됨(동작3)
위의 모든 동작이 한 번에 일어나게 만들 수 있음
인터페이스 - 여러 액터에 적용되는 일반 기능을 만들 때 사용
- 형변환 없이도 인터페이스를 상속받은 액터는 인터페이스 콜방식으로 엑터에 호출해주면 알아서 반응
- 호출에 대한 반응이 구현되지 않으면 반응하지 않으며, 오류가 없음
사용 예 같은 상호작용인데 문은 열리고, 손전등은 켜짐
리모컨 버튼을 누르면 TV가 켜짐. 그러나 해야할 반응(TV)이 없다고 이슈X
매크로 -  

 

커스텀 이벤트(Custom Event) vs 함수(Function)
  리턴값 딜레이 타임라인 로컬 변수 리플리케이트 Pure 전환
커스텀 이벤트 X O O X O X
함수 O X X O X O
Pure란? 값을 구해오거나 데이터 값을 출력하기만 하는 노드

 

 

1-2. 커뮤니케이션 노드

- 액터와 액터, 액터와 폰 등의 소통이 필요할 때 사용하는 노드

이름 설명
[] 에 형변환 (=Cast to []) - 엔진 내 모든 BP에 대해 갖고 있음 ([]의 종류는 무수히 많음)
- 단방향 형변환은 퍼포먼스를 크게 떨어트리지 않지만 양방향일 시 이슈 발생
- 때문에 상호 레퍼런스 구조를 안 쓰도록 주의해야 함
사용 예 위에서 아래로는 형변환, 아래에서 위로는 인터페이스를 사용하면 비용 줄어듦
Get Actor Of Class - 형변환 노드 대신 사용할 수 있음
- 월드에서 지정한 클래스의 첫 액터 찾기
Get All Actors Of Class - 형변환 노드 대신 사용할 수 있음
- 레벨에 존재하는 지정된 클래스의 액터를 배열로 가져올 수 있음
- Tick에서 쓰지 말기!
Get Owner - 이름엔 없지만 Actor 인지 Component인지에 따라 타깃 다름
- 타깃이 Actor Component인 경우, 타깃에 대해 컴포넌트를 가진 소유자(보통 액터)를 불러옴
Self (셀프 레퍼런스 가져오기) - 보통 본인을 타깃 연결할 때 사용
[] {} Trace by Channel - 충돌 검출 노드(≒RayCast)
- 채널 타깃을 구하는 것 외에, 어떤 검사를 수행할 때도 사용할 수 있음
사용 예 총알, 에너미 시야 등
[] 종류 - (Single) - 첫 번째 히트 반환
- 히트 후 충돌 검사 중
Multi - Trace에 걸리는 모든 히트 반환
- 트레이스 콜리전 반응에 대해 오브젝트 별로 다른 반응 (블록(Block) 및 무시(Ignore)) 설정 가능
{} 종류 검출 범위
Line  
Box  
Capsule  
Sphere  

 

 

1-3. 네트워킹 노드

이름 (검색어) 설명
is Locally Controlled 컨트롤러 당사자에게만 띄우는 > Branch에 연결하면 됨
Switch Has Authority - 서버인지 클라이언트인지 구분
- Authority 는 서버, Remote는 클라이언트에서 실행할 것
Is Dedicated Server - Branch 노드에 연결해서 'True일 때 실행' 과 같은 조건 가능
≒ 해당 값이 유효할 때만 실행
- 혹은 OR 로 연결해서 여러 조건 가능
Is Server
Is Standalone

 

 

1-4. 특수 노드

이름(검색어) 설명
타임라인 (Timeline) - 부드러운 움직임(애니메이션)을 만들 수 있는 노드
- Lerp노드를 사용하면 값을 변수로 뺄 수 있음
입력 Play 재생
Play from Start 처음부터 재생
Reverse 역재생
출력 Update 실행 내용
Finished 타임라인 종료 후 실행할 내용
Track 타임라인 내부의 트랙이 가진 값
내부 Loop 재생반복
(활성화 시 Finished 실행 불가)
Replicated 서버 연동 움직임일 시 활성화
코멘트 (단축키 C) - 여러 노드를 하나로 묶을 수 있음
- 묶고 싶은 노드를 선택하고 "C" 입력
경유 노드 (실행선에 더블클릭) - 선을 정리하기 위한 기능
Is Valid - 유효성 검사(해당 객체가 nullptr인지 검사하는 것)
- 회색, 입/출력 핀이 있는 노드 (유사, 단순 반환 노드 주의) (Utilities → Is Valid)
- nullptr인데 접근하면 프로그램이 터지기 때문에 Input object가 있는지 없는지에 따라 True/False 구분
- 소멸되었지만 데이터로 남아있는 경우 방지
데이터 테이블 행 가져오기 - Data Table에서 데이터 테이블 선택
- 찾았을 때와 찾지 못했을 때 각각 다른 수행 가능
- "아웃 행"을 당겨 어떤 행에 대한 분해("구조체 이름" 분해) 가능

 

 

1-5. 연산 노드

- 형태가 단순한, 특정 연산을 쉽게 실행해주는 노드

이름 (검색어) 설명
++ (Increment []) - 값을 +1.0
- [] 는 형식
-- (Decrement []) - 값을 -1.0
- [] 는 형식
Compare [] [] 형식의 두 값을 비교하고 크거나, 작거나, 같은지에 따라 다른 수행 가능
== (Equal) 두 개의 값을 비교하고 같은지 아닌지 Bool 값으로 알려주는 노드
!= (Not Equal) 두 개의 값을 비교하고 같지 않을 때 True(Bool)값으로 알려주는 노드
Absolute - 값에 절댓값을 씌워주는 노드
- 값을 반드시 양수화
! (Not Boolean) - 값을 반대로(T면 F로, F면 T로) 만들어줌
- !=와 헷갈리지 않게 주의(입/출력 모두 Boolean 형식으로 한 개)
사용 예 괜히 On/Off 두 번 만들지 않고 한 번에 가능
XOR - 형식이 Bool이면, 두 값 중 하나만 참이면 True
- 형식이 Int라면, 두 값을 비트(이진수)로 분해하고 각 자릿수의 값이 같으면 0, 다르면 1로 출력한 후 다시 십진수로 반환해줌
Int 사용 예  5 ^ 3 = 6 (101 ^ 011 = 110)

 

 

1-6. 수행 노드

- 입력/출력 핀이 달린, 일반적으로 사용하는 노드

▶ 좌표 / 이동

이름 (검색어) 설명
Add Actor [] Offset - 위치를 '더하는(Add)' 노드 = 움직인 후 본래 위치로 돌아오려면 0이 아니라 -값
- 특정 값에 따라 한 방향으로 지속이동하는 편일 때 유용
- 값이 Scalar일 때 편함 (아니어도 상관 X) (Delta Location을 구조체 핀분할)
- 입력되는 위치의 값이 변동이 없어야 지속이동하는 것처럼 보임(값이 달라지면 속도도 달라짐)
[] 종류 Local 위치가 상대적(액터 위치가 0,0,0)
World 위치가 절대적(놓인 레벨의 위치값)
Set Actor [] Location - 위치를 새롭게 입력(Set)하는 노드 = 본래 위치로 돌아오려면 0이 되어야 함
- 특정 원하는 위치 혹은 거리가 분명할 때 유용
- 입력되는 위치의 값이 변해야 지속이동하는 것처럼 보임
- 상대좌표로 이동하는 거리는 월드 상의 거리와 상관 없음. 액터 뷰포트로 확인
- Location 외에도, Rotation, Scale 3D, Transform이 있음
[] 종류 Relative 위치가 상대적(액터가 있는 곳이 0,0,0)
- 위치가 절대적(놓인 레벨의 위치값)
Launch Character - 타깃된 캐릭터를 특정 속도로 발사(타깃은 캐릭터BP만, Pawn 불가)(형변환 필요)
- 마찰 영향 받음(지상과 공중의 이동치가 다름)
- 물리 시뮬레이션 기능 없음(Primitive Component 적용X)
- Override 기능을 쓰면 Add 아니고 Set으로 기능
사용 예 캐릭터가 프로펠러에 의해 위로 떠오르는 경우
Add Angular Impulse - 오브젝트의 회전(Spin)
- 그래서 X, Y, Z가 아니라 Pitch, Yaw, Roll
Add Impulse - 한 번 적용(한 틱에 한 번)
- 즉시 1초 동안 속도 부여(폭발에 적합)
- 단위가 힘(N) * 시간
사용 예 터지면서 주변의 캐릭터를 밀어내는 폭탄
Add Force - 매 프레임마다 호출
- 프레임 속도가 60fps고, 한 번 호출할 때 같은 수치의 Add Impulse와 같아지려면 60을 곱해야 함
- 단위가 N(뉴턴) = 질량 * 가속도
- 지속시간 내에 호출
Add Radial Force - Anti Gravity Field 같은 경우 이용
- 잦은/중복되는 힘 주입
- 힘이 발생하는 원점 지정 가능

 

▶ 시간

이름 (검색어) 설명
Delay 실행 사이에 텀(term)을 생성하는 데 유용
Set Timer by Event - Delay와 비슷한 역할
- Time이 끝나면 연결된 이벤트 실행
- 특정 이벤트에 대해 타이머를 걸어줄 수 있는 노드 반복 가능
-  Clear and Invalidate Timer by Handle 노드로 종료 가능
Clear and Invalidate Timer by Handle - 타이머를 종료시키는 노드
- 반드시 타이머를 연결해줘야 기능
Set [] Tick Interval 틱 간격 설정
[] 종류 Actor
Component
Set Life Span - 액터의 수명을 결정하는 노드
- float로 결정
- Get Life span 노드로 값을 가져올 수 있

 

▶ 렌더링

이름 (검색어) 설명
Set Actor Hidden in Game - 렌더링의 ON/OFF
- Hidden은 디버그에서의 가시성
Set Visiblity - 렌더링의 ON/OFF
- Visible은 게임 플레이에서의 가시성(게임할 땐 얠 더 씀)
- 사용 시 타깃 유의(렌더링, 시퀀서, 위젯 등 있음)
Set Text - 글자 세팅
- Text Render Component 필수 조건
Set Material 게임 중 액터의 머티리얼 바꾸기 가능
Set [] Parameter Value on Materials - 타깃의 머티리얼의 파라미터(Name) 값을 조절
- 타깃의 머티리얼 파라미터(Parameter Name) 확인 필요!
[] 종류 파라미터의 값에 의해 선택
Scalar 숫자 하나(Float)
Vector 벡터값(X, Y, Z = RGB)
Spawn Emitter [] - 이펙트 스폰 노드
- 클라이언트에서 재생됨 (서버 재생하면 안보임)
[] 종류 스폰시킬 장소에 따라 (사실 거의 비슷해보임)
at Location 특정 장소에 사용
Attatched 컴포넌트나 포인트에 붙여서 사용

 

▶ 사운드

이름 (검색어) 설명
Play Sound at Location - 특정 위치에 사운드 재생
- 클라이언트에서 재생 (서버 노드의 False 이후에 배치)

 

▶ 기타

이름(검색어) 설명
set [변수이름] 변수값을 변경
Destroy [] - 타깃을 소멸
- 본인이 사라지기 때문에 클래스BP 내에서 On/Off 같은 작동 불가
[] 종류 Actor
Component
Spawn Actor from Class - 무언가(NONE)를 소환하는 노드

 

 

1-7. 단순 값 반환 노드

- 입력/출력 핀 없이 기능에 따라 값을 반환하는, 일반적인 노드

▶ 수치

이름 (검색어) 설명
Clamp [] - 원하는 값(Value)을 최소/최댓값 사이에 고정시킬 수 있음
- 외의 값 무시
[] 종류 integer  
float  
Vector Size Clamp하는 값은 float임
Lerp - Alpha의 값에 따라 A부터 B 사이의 값을 얻음
- Clamp는 특정 숫자 사이로 한정하는 것이고, Lerp는 0~1사이의 값을 A100%~B100%로 환산하는 것
Random [] - 랜덤한 []의 단일 값
- [] 는 형식
Random [] in Range - 설정한 최소/최댓값에 따라 랜덤한 []의 범위 값
- [] 는 형식

 

▶ 위치 / 좌표

이름 (검색어) 설명
Get [] Location - 위와 차이점은 반환값(Vector)
- Location = Translate = 위치 이동
- 절대좌표만 존재
사용 예 Construction Script나 BeginPlay에 붙여서 현재 위치를 저장할 때 사용.
[] 종류 Actor  
World  
Socket  
[]Interp To - 시작 지점(Current)부터 목표 지점(Target)까지 부드럽게 계산해주는 함수
- 액터가 현재 []에서 '타깃'으로 작동 → 내가 아닌 타깃이 존재해야 함
- Interp speed가 0이면 Delta seconds 상관 없이 목표값이 출력됨(목표로 순간이동)
[] 종류 F Float
R Rotate
V Vector
T Transform
Get [] Vector - 방향 구하는 노드
- 보통 액터의 Arrow 컴포넌트를 가져와 사용
[] 종류 Forward 액터의 정면(X 방향?)
Right 액터의 좌우(Y 방향?)
Up 액터의 상하(Z 방향?)

 

▶ 시간

이름 (검색어) 설명
Get Game Time in Second 게임 시간(초) 얻는 노드
Get World Delta Seconds 레벨의 델타세컨드(직전 프레임으로 부터의 경과 시간?)

 

▶ 렌더링 / 피직스

이름 (검색어) 설명
Is Visible - 타깃이 보이는지 True/False를 주는 노드
- 조건 주기 좋음
get mass 타깃의 질량 구하기

 

▶ 변환

이름 (검색어) 설명
Append - String A와 String B를 연결해주는 노드
- 핀 추가로 String C, String D... 가능 
Make [] - 입력의 값을 [] 형식으로 출력해주는 노드
[] 종류 Vector Float를 Vector로
Color Float를 Color로 (RGBA)
Transform Location, Rotation, Scale을 Transform으로
Rotator Roll, Pitch, Yaw을 Rotation으로
To [] () - 입력된 값()을 [] 유형으로 변환해주는 노드
- 대체로 그냥 끌어당겨 연결하면 자동으로 붙지만, 간혹 변환해줘야 하는 경우가 있음
사용 예 int > Name은 안되고, Int>Text>Name은 되는 등
Convert Transform to Relative 위치를 상대값으로 만들기

 

▶ 기타

이름 (검색어) 설명
Get 변수값을 공급
Break [] 핀분할을 할 수 없는 종류의 값에 대해 분할해주는 노드
Select [] Bool의 값에 따라 A와 B의 값 중 하나를 선택
선택 - Index의 값에 따라, 입력된 것 중 하나를 선택 (Index 위치에 옵션을 반환한다)
- 핀 추가 시, 입력핀 증가 (Select보다 더 많은 개수 입력 가능)

 

 

1-8. 흐름제어 노드

이름 설명
[]에 따른 스위치
(Switch on [Int])
- 다음 수행 작업을 []에 따라 Default, []1, []2... 로 스위칭할 수 있는 노드
- 핀 추가 시, 출력되는 실행핀이 증가
- []의 종류는 무수히 많으나 대개 이름, 스트링, Int가 많이 사용됨
Branch - True/False의 조건문
- 조건문에 조건문을 이을 수 있음
사용 예 True일 때, 한 번 더 Branch 붙이고 True/False 분리 가능
시퀀스 - 순서를 정하는 노드
- 하지만 결국 병렬 처리라 순서대로 실행되지 않음(거의 동시 실행).
- 단지 신호를 순서대로 보낼 뿐임
- 핀 추가로 여러개 연결 가능
Flip Flop - A, B, A, B... 번갈아 사용하는 노드
- A=True, B=False
MultiGate - 입력에 따라 Out Index를 실행
- 1회 실행에 순차적으로 진행하는 것이 아니라 1회 실행에 한 핀이 실행
Gate - 신호(Enter)에 대해, Open이면 내보냄(Exit)
입력 Open 무조건 실행 노드
Close 무조건 중지 노드
Do Once - Completed 이후의 내용을 딱 한 번만 발동시키는 노드
- 오류를 줄일 때 좋음
Do N - 신호가 들어올 때마다 1씩 카운트해서 N까지 진행할 수 있게 하는 노드
- N에 도달하면 신호가 무관하게 반응X
사용 예 총 탄알과 재장전
For Loop - Loop Body 이후의 내용을 반복하는 노드
- 입력값(First Index~Last Index)을 통해 횟수 지정: First 및 Last 값 포함
For Loop with Break - 계속해서 루프시키다가 중단점을 만드는 노드
- Break를 만나면 Completed단계로 넘어감
- 실행 중지랑 다
For Each Loop - 보통 배열에서, 배열의 모든 것에 적용시킬 때 사용
- 이후에 실행할 내용은 Loop Body 이후가 아니라 Completed에 연결해야 함

 

 

1-9. 배열 관련 노드

이름 (검색어) 설명
배열 만들기 입력에 넣는 값에 따라 오른쪽의 변수 유형이 달라짐
Get Overlapping Actors - 해당 공간(Overlap이 가능한 공간) 내에 들어있는 모든 액터를 배열로 반환
- 클래스 필터 가능
Shuffle 배열 섞어주기
Get - 배열의 Get Integer 값에 따라 하나 가져옴.
- 사본과 참조 중 선택 가능
Last Index - 배열의 마지막 번호 가져오기
- 랜덤 숫자 범위 같은 것을 구할 때 Max 인덱스를 배열의 개수에 유동적으로 적용하려고
사용 예 A배열의 Last 인덱스를 Random Range의 Max값으로 넣고, Get 할 때 A배열의 값들 중 랜덤하게 하나 가져올 수 있음