1. 블루프린트 기초 및 프로그램 구조
블루프린트 프로그래밍은 전기 회로를 구성하는 과정과 유사한 논리를 가진다. 레벨 블루프린트는 툴바의 상자 아이콘 메뉴에서 열 수 있으며 해당 레벨에 종속된 전용 로직을 작성할 때 활용한다. 이벤트 그래프는 노드를 배치하고 실행 선으로 연결하는 작업 캔버스이다.
- 노드와 핀: 노드는 미리 구현된 기능 단위이며 핀은 노드 사이를 연결하는 소켓이다. 하얀색 화살표 모양인 실행 핀은 로직의 실행 순서를 결정한다. 유색 원형인 데이터 핀은 정보를 전달하는 역할을 한다.
- 주요 이벤트: 게임 시작 시 단 한 번 호출되는 Event BeginPlay 노드가 있다. Print String 노드는 화면에 메시지를 출력하며 디버깅 단계에서 Hello World와 같은 역할을 수행한다.
2. 물리 시뮬레이션 및 충돌 최적화
언리얼 엔진은 성능 최적화를 위해 기본적으로 모든 오브젝트의 물리 연산을 비활성화해 둔다. 오브젝트의 디테일 패널 내 Physics 섹션에서 Simulate Physics를 체크해야 중력 및 충돌의 영향을 받는다.
- 질량($\text{Mass}$): 오브젝트의 무게를 설정하며 질량이 클수록 충돌 시 더 큰 힘이 필요하다.
- 포스($\text{Force}$) 및 임펄스($\text{Impulse}$): 포스는 일정 시간에 걸쳐 지속적으로 가해지는 힘이다. 임펄스는 즉각적으로 가해지는 충격량이며 물리 공식은 다음과 같다.
$$I = m \Delta v$$ - Velocity Change: 이 옵션을 활성화하면 질량을 무시하고 직접적으로 속도를 변경할 수 있다.
- 단순화된 충돌: 복잡한 시각적 메시를 물리 계산에 직접 사용하면 버그가 발생하기 쉽다. 정적 메시 에디터에서 Collision 기능을 통해 Add 10DOP-Z Simplified Collision과 같은 단순한 형태의 충돌체를 적용하여 안정성을 높인다.
3. 객체 지향 프로그래밍(OOP) 및 클래스
오브젝트는 데이터와 기능의 집합체이다. 액터는 레벨에 배치할 수 있는 모든 오브젝트를 의미하며 컴포넌트는 액터를 구성하는 부품이다. 레퍼런스는 메모리 상에서 해당 오브젝트가 위치한 주소를 나타낸다.
- 클래스 및 인스턴스: 클래스는 오브젝트를 만들기 위한 설계도이다. 인스턴스는 설계도를 바탕으로 월드에 생성된 실제 객체이다. 클래스 내부의 로직을 수정하면 해당 설계도로 생성된 모든 인스턴스에 변경 사항이 즉시 적용된다.
4. 액터 스폰 및 데이터 타입
스폰은 게임 플레이 중에 실시간으로 액터를 생성하는 것을 의미한다. SpawnActor from Class 노드를 사용하여 특정 클래스의 인스턴스를 월드에 생성한다.
- 트랜스폼(Transform): 위치와 회전 그리고 스케일의 조합이다. 구조체 핀 분할 기능을 활용하면 각 성분을 개별적으로 제어할 수 있다.
- 데이터 타입 분류:
- Integer: 정수 데이터이며 청록색 핀으로 표시된다.
- Float: 부동 소수점 숫자이며 녹색 핀으로 표시된다.
- String: 텍스트 데이터이며 분홍색 핀으로 표시된다.
- Boolean: 참과 거짓 값이며 빨간색 핀으로 표시된다.
- Vector: 세 개의 플로트 성분으로 구성된 구조체이며 노란색 핀으로 표시된다.
5. 플레이어 참조 및 벡터 수학
폰($\text{Pawn}$)은 월드 내 플레이어의 물리적 대리자이다. Get Player Pawn 노드로 현재 플레이어의 레퍼런스를 가져온다. 카메라 시점을 정확히 반영하려면 Get Actor Rotation 대신 Get Control Rotation 노드를 사용해야 한다.
- 벡터 연산: 방향과 크기를 나타내는 벡터는 다음과 같은 연산을 수행한다.
- 덧셈: Position_new = Position_old + Movement
- 스칼라 곱: 벡터에 실수($k$)를 곱하면 방향은 유지한 채 길이만 변경된다.
- 전방 벡터($\text{Forward Vector}$): 회전된 $X$축 방향을 나타내며 길이는 항상 1인 단위 벡터이다. 여기에 플로트 값을 곱하여 임펄스의 세기를 결정한다.
$$\text{Impulse} = \text{Forward Vector} \times \text{Multiplier}$$
6. 에셋 관리 및 레벨 디자인
마켓플레이스 에셋을 활용하거나 이주($\text{Migrate}$) 기능을 통해 프로젝트 간 에셋을 옮길 수 있다. 지오메트리 브러시($\text{BSP}$)는 엔진 내부에서 형체를 빠르게 만드는 도구이며 공간을 생성하는 추가형과 공간을 파내는 제거형으로 나뉜다.
- 주요 광원: 전방위 빛을 시뮬레이션하는 $\text{Skylight}$ 및 태양광 역할을 수행하는 $\text{Directional Light}$가 있다.
- 컴포넌트 계층: 하위 컴포넌트는 루트 컴포넌트를 기준으로 한 상대적 트랜스폼 값을 가진다. 부모 컴포넌트의 움직임은 자식에게 그대로 전달된다.
7. 변수 및 함수 활용 최적화
변수는 정보를 저장하고 참조하기 위한 상자이며 이름 및 데이터 타입 정의가 필요하다. 변수 생성 후에는 반드시 컴파일을 수행해야 기본값을 설정할 수 있다.
- Get 및 Set: $\text{Get}$은 저장된 값을 읽어오고 $\text{Set}$은 값을 새로 저장하거나 업데이트할 때 사용한다.
- 분기(Branch): 조건이 참인지 거짓인지에 따라 실행 경로를 나누는 조건문 역할을 수행한다.
- 함수 설계: 복잡한 노드 뭉치를 하나의 함수로 묶어 가독성을 높인다.
- 순수 함수($\text{Pure}$): 실행 핀이 없으며 단순히 계산 결과를 반환한다. 사이드 이펙트가 발생하지 않는다.
- 비순수 함수($\text{Impure}$): 실행 핀이 필요하며 변수 값 변경이나 물리적 변화를 일으킨다.
- Self 노드: 함수를 실행 중인 현재 인스턴스 자신을 가리키는 레퍼런스이다.
8. 지연 실행 및 레벨 흐름 관리
지연($\text{Delay}$) 노드는 지정된 시간만큼 실행 흐름을 멈추는 잠복 노드이다. 이벤트 그래프에서만 사용 가능하며 함수 내부에서는 사용할 수 없다.
- 레벨 재시작: Get Current Level Name으로 현재 맵 이름을 가져온 뒤 Open Level 노드에 연결하여 게임 루프를 완성한다.
| 구분 | 노드 이름 | 역할 설명 | 타입 분류 |
|---|---|---|---|
| 상태 확인 | Has Ammo | 탄약 잔량 여부 판단 | Pure |
| 행동 수행 | Launch | 전방으로 임펄스 추가 | Member Function |
| 흐름 제어 | Delay | 지정 시간 동안 대기 | Latent Node |
| 시스템 | Restart Level | 현재 레벨 다시 로드 | Impure |
'언리얼엔진 > 언리얼엔진 공부노트' 카테고리의 다른 글
| 언리얼 공부노트 : 향상된 입력 시스템(Enhanced Input)의 이해 (0) | 2026.04.02 |
|---|---|
| 언리얼 공부노트: BasePawn 설계와 탱크 컴포넌트 구조 잡기 (0) | 2026.04.01 |
| 언리얼 공부 노트: 루멘, 포인터, 그리고 물리 상호작용의 핵심 (0) | 2026.03.25 |
| 언리얼 엔진 5 C++ 공부 과정 (2) | 2026.03.16 |
| 언리얼 공부노트: 변수 시스템, 함수 구조화 및 블루프린트 연동 핵심 요약 (0) | 2026.03.16 |