개인 스터디/언리얼
언리얼 블루프린트 노드 (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란? 값을 구해오거나 데이터 값을 출력하기만 하는 노드
리턴값 딜레이 타임라인 로컬 변수 리플리케이트 Pure 전환 커스텀 이벤트 X O O X O X 함수 O X X O X O
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배열의 값들 중 랜덤하게 하나 가져올 수 있음 |