본문 바로가기
언리얼엔진/언리얼엔진 공부노트

언리얼 공부노트:블루프린트 핵심 개념 및 객체 지향 프로그래밍 요약

flyon 2026. 3. 14.

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
profile
작심삼일을 무한으로 반복하는 지식세포 키우기
✏️ ⚙️