언리얼 기본 개념 Handbook

Woogle·2022년 9월 6일
0

언리얼 엔진 5

목록 보기
1/60
post-thumbnail

Ch 1. 기본 용어

📄 프로젝트(Project)

게임의 모든 콘텐츠와 코드를 저장해놓은 파일
.uproject

📄 레벨(Level)

오브젝트들을 배치하여 게임 장소를 구성한 파일
.ump

📄 월드(World)

게임을 구성하는 모든 레벨이 담긴 컨테이너

📄 에셋(Asset)

콘텐츠 브라우저의 폴더에서 확인 및 저장가능한 오브젝트

📄 브러시(Brush)

3D 셰이프를 묘사하는 액터
박스, 원뿔, 원기둥 등

📄 볼륨(Volume)

플레이 중에는 보이지 않지만 특별한 기능을 수행하는 액터
Blocking, Pain Causing, Trigger 등

📄 블루프린트(Blueprint)

언리얼 에디터 안에서 노드 기반 인터페이스로 게임의 로직을 만드는 비주얼 스크립팅 시스템
C++과 병행하여 게임을 만들 수도 있다.

💡 블루프린트의 종류

  • Level Blueprint: 레벨마다 한개씩만 존재하여 해당 레벨의 이벤트를 담는 블루프린트
  • Blueprint Class: 가장 일반적인 블루프린트. 다른 블루프린트 또는 C++ 코드를 상속받아 시각적으로 보면서 편집할 수 있다.
  • Data-Only Blueprint: 노드 없이 부모로부터 상속받은 변수와 컴포넌트만 조정하는 블루프린트
  • Construction Script: 액터가 생성되기 전에 실행되어 초기화를 담당하는 부분. (C++ 생성자에 해당)

📄 변수(Variable)

데이터를 저장함

💡 언리얼 변수 타입

  • bool: true / false
  • byte / int32 / int64 / float: 숫자 (0~255 / -20억~20억 / -900경~900경 / 실수)
  • FName / FString / FText: 문자 (No feature / Manipulation function / Localization display)
  • FTransform: 3차원 오브젝트의 location, rotation, scale으로 이루어진 구조체
  • FVector: Location, 속도를 표현하는 3개의 float(X, Y, Z)으로 이루어진 구조체
  • FRotator: 회전을 표현하는 3개의 float(X, Y, Z)으로 이루어진 구조체

💡 상수(Const) 변수

  • Const reference (const type &name): 함수 내부에서 값이 수정되면 안되는 변수.
  • Non-const reference(type &name): 함수 내부에서 값이 수정되는 변수. 값을 밖으로 넘겨주는 용도로 많이 씀 (Out parameter)

📄 함수(Function)

입력값을 받아 계산하거나 기능을 구현

  • Pure Function: 함수 외부 상태에 영향을 받지 않고, 함수 외부 상태를 직접 변경하지 않는 함수. 블루프린트에서 호출 시 execution pin이 없다.
  • Const Function: 클래스의 멤버 변수를 변경할 수 없는 함수.

📄 콜리전(Collision)

충돌 시의 처리
콜리전 채널 설정에 따라 3가지로 나뉜다.

💡 Collision Filtering

  • Ignore: 충돌 처리 없음. 무시하듯이 뚫고 들어가짐
  • Overlap: 뚫고 들어가지며 이벤트 발생 가능
  • Block: 뚫고 들어갈 수 없음. Line Trace 등에 유용

📄 가비지콜렉션(Garbage Collection)

더 이상 쓰이지 않는 포인터의 메모리를 알아서 초기화해주는 기능
오브젝트에 Reflection Macro를 붙여주면 언리얼 엔진에서 메모리를 관리해준다.

💡 Unreal Reflection Macro

  • UCLASS: 클래스
  • UFUNCTION: 함수
  • UPROPERTY: 멤버 변수
  • UENUM: 열거형
  • USTRUCT: 구조체

📄 리플렉션 (Reflection)

프로그램이 런타임 중에 자기 자신을 조사하게 만드는 기능
객체 정보를 런타임에서 실시간 조회가 가능해진다.

📄 시리얼라이제이션 (Serialization)

현재 오브젝트 상태를 보관 후 다른 환경에서 불러와 동일한 상황으로 만드는 기법


Ch 2. 언리얼 그래픽스

📄 메쉬(Mesh)

모양과 크기와 같은 시각적 표현을 나타냄
즉, 폴리곤으로 이루어진 형태 정보

💡 메쉬의 종류

  • Static Mesh: 애니메이션 없는 메쉬. 프롭이나 배경 등
  • Skeletal Mesh: Bone을 이용해 움직일 수 있는 메쉬. 캐릭터나 크리처 등
    Modeling: 메쉬의 외형을 만드는 작업
    Rigging: Bone을 심고 Vertex를 연결하는 작업

📄 머터리얼(Material)

오브젝트의 재질을 계산식을 통해 표현함
머터리얼과 메쉬를 합쳐 3D 모델링 데이터를 구성한다

💡 Material Graph

  • Base Color: 물체의 고유색 (RGB 채널, 0~1)
  • Metallic: 금속(1, 정반사 시 고유색 유지) / 비금속(2, 정반사 시 빛의 색을 띔)
  • Roughness: 거칠(1, 난반사) / 매끈(0, 정반사)
  • Emissive Color: 빛 발산 정도. 1 초과 시 HDR 효과
  • Normal: 굴곡이 있는 듯한 착각을 줌
  • UV Map: 3D 모델을 펼친 2D 전개도

💡 Material 심화

  • Material Instance: 상속받은 머터리얼(Master Material)의 파라미터를 수정해서 새 머터리얼처럼 사용
  • Dynamic Material Instance: 실시간 업데이트되거나 변화할 수 있는 머티리얼
  • Layerd Material: 픽셀 단위로 복잡하게 혼합된 머터리얼을 표현할 때 사용

📄 라이트(Light)

빛과 조명을 표현

💡 Light Actors

  • Directional Light: 햇빛. 무한한 거리에서 오는 직사광
  • Point Light: 전구. 빛의 방향이 가장 많아 무거움
  • Spot Light: 무대 조명, 손전등
  • Rect Light: 텔레비전, 창문, 틈새
  • Sky Light: 주변 환경을 캡쳐해서 물이나 반사 재질을 표현

💡 Light Mobility

  • Static: 게임 시작 전에 미리 라이트매스를 구움 (Bake)
  • Stationary: 고정되어 있는 빛이지만, 색과 밝기 조정은 가능
  • Movable: 모든 오브젝트에 실시간으로 다이나믹 섀도우를 드리움

💡 Sky VFX

  • Sky Atmosphere: Directional light에 의한 지구의 대기 현상을 표현 (빛 산란, 대기 원근 등)
  • Exponential Height Fog: 공기 원근법, 볼류메트릭 포그 표현
  • Volumetric Cloud: 구름 표현

📄 랜드스케이프(Landscape)

지형을 만드는 툴

💡 Landscape Tool

  • Manage: 새 랜드스케이프 생성
    Height Map: 흑백의 픽셀로 등고선을 표현한 지도를 임포트해서 새 랜드스케이프를 생성
  • Sculpt: 브러쉬로 지형을 깎거나 평평하게 피거나 경사를 줄 수 있음
  • Paint: 랜드스케이프의 메쉬에 머터리얼(Layered Material Function)을 입힘
    Foliage: 나무, 바위 등의 반복되는 스태틱 메쉬를 빠르게 배치하는 툴

📄 나이아가라(Niagara)

UE5에서 추가된 파티클 시스템 (FX)
스킬, 환경, 상호작용 표현에 사용 가능.
각 파티클은 수명(Lifetime), 동작(Behavior), 주기(Loop)를 가짐.

💡 Niagara Component

  • System: 여러 개의 Emitter를 하나의 이펙트로 결합하여 관리
  • Emitter: 파티클을 마구 뿜어냄. Template으로 새 Emitter 생성 가능.
  • Module: Emitter 내부에서 순차적으로 동작을 설정함 (Spawn, Update, Render)
  • Parameter: 이펙트에서 사용되는 변수

💡 Naiagara VFX Workflow

  • Emitter Spawn: 이미터가 처음 스폰할 때 발생하는 것을 정의하는 모듈을 배치
  • Emitter Update: 시간이 지남에 따라 이미터에 영향을 미치는 모듈을 배치
  • Particle Spawn: 이미터에서 파티클이 스폰할 때 발생하는 것을 정의하는 모듈을 배치
  • Particle Update: 시간이 지남에 따라 파티클에 영향을 미치는 모듈을 배치

📄 포스트 프로세스(Post Process)

이미지 후보정
모든 기초 렌더링이 완료된 후 스크린에 부가 효과를 추가함

💡 Post Process Volume

  • Bloom: 빛이 발산(Glow)할 때 뽀샤시해지는 효과
  • Motion Blur: 빠르게 움직이는 오브젝트에 블러를 적용
  • Ambient Occlusion: 구석이나 틈 같은 곳을 더 어둡게 하여 입체감 강조
  • Chromatic Aberration: 색수차. RGB 컬러 분리
  • Dirt Mask: 카메라에 묻은 먼지나 빗방울
  • Lens Flare: 태양을 직접 바라볼 때 조리개를 통과한 빛이 산란되어 보이는 무늬
  • Vignette: 화면 가장자리를 어둡게 표현

💡 Post Process Material

  • Post Process Material: 머터리얼로 원하는대 포스트 프로세스를 만들 수 있음
  • Stencil: Post Process Volume 내에 들어갔을 때만 보이게 만들 수 있음

📄 시퀀서(Sequencer)

시네마틱 컷씬을 제작하는 툴

💡 시퀀스 종류

  • Level Sequecne: 레벨 안에서 시네마틱 컷씬을 담는 콘티. Cine Camera Actor나 애니메이션을 추가하여 키프레임을 지정할 수 있음
  • Master Sequence: 여러 개의 시네마틱 컷씬을 "Shots"에 담아서 관리

📄 UI

UMG(Unreal Motion Graphic)로 UI를 만들 수 있음

📄 애니메이션(Animation)

Skeletal Mesh의 Bone을 움직여 애니메이션 클립을 재생

💡 Animation Tools

  • Animation Retargeting: 같은 스켈레톤 애셋을 공유하나 비율이 다른 캐릭터간에 애니메이션을 재사용할 수 있도록 조정
  • Animation Blueprint: 애니메이션을 관리하는 블루프린트
    State Machine: 캐릭터 상태 전환 흐름도로 애니메이션을 관리함
    Anim Instance: 애니메이션에서 사용하는 변수와 함수를 집어넣는 일종의 컨테이너
  • Blend Space: 서로 다른 애니메이션을 부드럽게 섞어줌 (1D, 2D)
  • Animation Montage: 애니메이션을 연속하여 재생하거나 슬롯에 넣어 관리할 때 사용
  • IK Rig: 본(Bone)을 Chain 단위로 묶어서 파일에 저장한 것. 리타게팅 할 때 활용 가능

📄 리플렉션(Reflection)

거울이나 수면처럼 반사되는 재질을 표현하는 방법

💡 Reflection Methods

  • Reflection Caputure: 런타임 이전에 캡처한 Cubemap을 주변 머터리얼에 재투영함. 퍼포먼스 영향이 거의 없지만, 각도에 따른 오차가 있고 동적 오브젝트 반사가 안된다.
  • Screen Space Reflection: 포스트 프로세스를 이용한 반사 표현법. 하지만 스크린에 보이지 않는 오브젝트는 반사할 수 없음.
  • Planar Reflection: 리플렉션 방향으로 레벨을 실제로 다시 렌더링하여 완벽하게 반사를 표현함. 따라서 매우 무거움.

📄 카오스(Chaos)

메쉬를 조각조각 파편화하여 부수는 피직스 표현 (Fracture)

💡 Force Field

  • Master Field: 파괴시키는 벡터를 만들 때 사용할 수 있는 부모 클래스
  • Anchor Field: 파괴되지 않고 고정되는 축을 설정 (Constraint)

📄 데칼(Decals)

마치 스티커처럼 투사(Project)하여 덧칠할 수 있는 머터리얼

📄 루멘(Lumen)

언리얼 엔진 5에 추가된 실시간 라이팅 렌더링
Bake하지 않아도 실시간으로 간접광(GI)를 자연스럽게 표현함
Directioanl Light Mobility를 Moveable로 해야 사용 가능

📄 나나이트(Nanite)

언리얼 엔진 5에 새로 도입된 가상화 지오메트리 시스템
고퀄리티 에셋을 퀄리티 손실 없이 그대로 사용할 수 있으며 폴리곤 최적화 기술이 포함됨

💡 Quixel Bridge

  • Quixel Bridge: 언리얼에서 제공해주는 고퀄리티 에셋 라이브러리. Megascan asset이라고도 부름.

Ch 3. 언리얼 클래스 구조

📄 클래스(Class)

오브젝트의 프로퍼티와 기능을 정의하는 코드.
C++이나 블루프린트로 생성한다.
부모 클래스의 멤버를 자식 클래스에게 상속해줄 수 있다.

💡 접두사(Prefix) 정리

  • U: UObject로부터 상속받은 클래스
  • A: AActor로부터 상속받은 클래스
  • F: 구조체 및 기타
  • T: 템플릿 클래스
  • I: 인터페이스 클래스
  • E: Enum 타입
  • b: Boolean 변수

📄 오브젝트(Object)

프로젝트 내의 일반적인 클래스들의 최상위 클래스(UObject).
UCLASS(), UFUNCTION() 등의 리플렉션을 사용 가능.

📄 액터(Actor)

오브젝트의 하위 클래스로, 레벨에 배치 가능함. (AActor)
3D Transform 값을 가지고 있음.
Mesh를 써서 시각적 표현 가능하고, Spawn과 Destroy도 가능.

📄 게임 모드(Game Mode)

레벨 별로 플레이 중인 게임의 규칙을 설정하는 클래스
게임 외적인 정보(플레이어의 수, 레벨간의 전환, 시네마틱 모드 시작 여부)를 저장 가능.
게임 내 모든 액터에서 접근 가능한 변수(시간, 점수)나 기능을 만들 때 편리하다.

💡 GameMode Settings

  • Default Pawn Class: 게임 시작시 플레이어가 빙의되는 폰
  • HUD Class: 게임플레이 중 보여지는 오버레이 (체력, 점수 등)

📄 게임 스테이트(Game State)

멀티 게임에서 연결된 모든 클라이언트에게 공유할 정보를 설정
게임 실행 기간, 참가 상태, 게임 시작 여부 등

📄 플레이어 스테이트(Player State)

플레이어의 정보를 설정.(APlayerState)
이름, 체력, 레벨, 점수 등

📄 형변환(Casting)

특정 클래스를 다른 클래스로 간주하려 시도하는 작업.
액터가 특정 클래스에 속하는지 확인하는데 사용할 수 있고, 성공하면 형변환한 액터 클래스의 멤버에 엑세스도 가능하다
A Pawn class "is a" Character class.

📄 애님 인스턴스(Anim Instance)

애니메이션을 만들 때 사용하는 변수와 함수를 집어넣는 일종의 컨테이너.

📄 비헤비어 트리(Behavior Tree)

AI가 결정을 내리는 두뇌. 왼쪽에서 오른쪽으로 생각을 체크하면서 행동을 전환하게 만들 수 있다.

💡 비헤비어 트리의 구성 요소

  • Composite : 브랜치가 어떻게 실행될 것인지에 대한 기본 흐름을 설정.
    Sequence : 좌에서 우로 실행. 실패할 때까지 순서대로 반복 실행.
    Selector : 좌에서 우로 실행. 실패할 때까지 현재의 노드를 실행.
    Simple Parallel : 메인 트리가 끝난 후에 실행되어 두번째 트리로 넘어가거나 대기시킴
  • Decorator : 브랜치의 실행 여부를 결정하는 조건문
  • Service : 브랜치가 실행되면 정해진 주기로 반복
  • Task : 구체적인 액션. Decorator나 Service를 가지고 있음.

📄 블랙보드(Blackboard)

AI가 비헤비어 트리에 따라 결정을 내리는데 필요한 정보를 모아놓은 저장공간 (메모리)


Ch 4. 액터 클래스

📄 액터(Actor)

오브젝트의 자식 클래스로, 레벨에 배치 가능.(AActor)
3D Transform 값을 가지고 있음
Mesh를 써서 시각적 표현이 가능하고, Spawn과 Destroy도 가능

📄 폰(Pawn)

액터의 자식 클래스로, 빙의(Possess)하면 컨트롤러(Controller)로 입력을 받을 수 있다.
휘발성이기 때문에(Destroy) UI, 점수 등은 GameMode나 PlayerController에 저장하는 것이 안전함.

📄 캐릭터(Character)

폰의 자식 클래스로, 게임 캐릭터의 기본적인 기능이 컴포넌트(Character Movement Component)로 붙은 채로 생성된다.

💡 캐릭터 클래스의 컴포넌트

  • Capsule component: 콜리전을 담당
  • Arrow component: 방향을 담당
  • Mesh component: 외형과 스켈레톤을 담당
  • Character movement component: 여러가지 이동을 담당

📄 컨트롤러(Controller)

빙의된(Possessed) 폰의 이동과 액션을 제어함.
Location은 없으나, Rotation은 있다.

💡 컨트롤러 종류

  • Player Controller: 플레이어의 입력을 Character Movement Component로 넘겨주어 게임 안의 상호작용으로 변환해주는 클래스.
  • AI Controller: 컴퓨터가 폰을 조종하게 할 때 사용하는 클래스

📄 컴포넌트(Component)

액터에 붙여서(Attach) 재사용 가능한 Subobject
An actor "has a" component.

💡 컴포넌트 종류

  • Actor Component: 모든 컴포넌트의 부모 클래스로 기능만 갖는다
  • Scene Component: Transform을 갖는 컴포넌트. 다른 컴포넌트에 붙일 수 있음. AttachTo()
  • Primitive Component: 주로 렌더링이나 콜리전이 필요할 때 사용하는 컴포넌트
  • Root Component: 해당 Actor의 Transform을 대표하는 Scene component

📄 카메라 액터(Camera Actor)

레벨을 보고 시네마틱 시퀀스를 생성하는데 사용

📄 오디오 & 사운드 액터(Audio & Sound Actor)

레벨에 사운드 이펙트를 추가하는데 사용


Ch 5. 언리얼 함수 용어

📄 Force

지속적으로 작용하는 물리적 상호작용

📄 Impulse

순간적으로 작용하는 물리적 상호작용

📄 Torque

회전을 일으키는 Force (지속적)

📄 Sweep

액터가 이동 중 충돌하는 물체에 닿으면 멈추고, 이동하는 물체에 닿으면 쓸려가게 됨.
액터간 blocking collision = true 인 경우에만 유효.

📄 Teleport

순간적으로 위치가 바뀌어도 관성에 영향을 주지 않음.
즉, 액터 이동 중에 Speed를 0으로 고정한 상태로 이동만 하게 만드는 옵션.
액터의 Speed가 0이므로 이동 애니메이션을 재생하지도 않고, 닿은 물체가 튕겨나가지도 않음.

📄 Spawn

플레이 중(런타임)에 액터를 생성하는 것

📄 Destroy

플레이 중(런타임)에 액터를 없애는 것

📄 Sleep

최적화를 위해 액터의 물리적 상호작용을 비활성화시키는 것.
반대 개념은 Wake.

📄 Clamp

수치의 최대값 또는 최소값을 설정하는 것

📄 Normalize

크기(스칼라)가 1인 단위벡터로 만드는 것.
즉, 벡터의 방향 성분만 추출한다.
GetActorForwardVector 등의 함수는 이미 Normalize 된 값을 반환해준다.

📄 Owner

컴포넌트가 붙어 있는 대상인 액터. 또는 Spawn을 해준 액터.
화살을 꽂혀있는 대상 등
An actor "has a" component.

📄 Instigator

가해자(사람). 액터를 만든 자.
즉, 총알(Spawned actor)을 쏜 사람(AController).

📄 Damage Causer

가해물(물체).
즉, 생성된 총알(Spawned actor)

📄 TArray

std::vector와 비슷하게 사용할 수 있는 동적배열

TArray<int32> IntArr;	// 선언하기
IntArr.Add(99);			// 원소 넣기
IntArr.Remove(99);		// 원소 지우기
IntArr.Num();			// 모든 원소 개수 반환
IntArr.Empty();			// 모든 원소 지우기

📄 TMap

std::map과 비슷하게 사용하는 동적배열 (Key-Value pair)

TMap<int32, FString> FruitMap;		// 선언하기
FruitMap.Add(5, TEXT("Banana"));	// 원소 넣기
FruitMap.Remove(5);					// 원소 지우기
FruitMap.Num();						// 모든 원소 개수 반환
FruitMap.Empty();					// 모든 원소 지우기
profile
노력하는 게임 개발자

0개의 댓글