[Unreal 5] 모듈 API 지정자
·
Unreal 5/Study
언리얼 엔진 모듈 API 지정자에 대해언리얼 엔진은 모듈 단위로 구성되어 있으며, 각 모듈은 특정 기능 집합을 캡슐화하여 엔진 전체의 확장성과 유지보수성을 높인다. 모듈 API 지정자(Module API Specifiers)는 이러한 모듈들 간의 경계와 노출되는 인터페이스를 관리하는 데 중요한 역할을 한다. 이 TIL에서는 언리얼 엔진의 모듈 API 스펙파이어가 무엇인지, 왜 중요한지, 그리고 주요 스펙파이어들에 대해 살펴보겠다.1. 모듈 기반 아키텍처언리얼 엔진은 모듈(Module) 이라는 단위로 구성된다.각 모듈은 특정 기능을 담당하며, 서로 독립적인 컴파일 단위로 관리된다.모듈 간의 의존성은 명확히 정의되어 있으며, 이를 통해 엔진의 빌드 시간 및 관리가 용이해진다.2. 모듈 API 스펙파이어의 역..
2. [Unreal 5 / C++] 2D 절차적 맵 생성 알고리즘 (미로 생성 알고리즘)
·
Unreal 5/Study
서론이전 시간에 백 트래킹과 BFS를 사용하여 무려 $O(4^M \cdot M \cdot N^2)$ 이 걸리는 맵 생성 알고리즘을 설명하였다. 이번시간에는 이를 대략 $O(M^2 \cdot N^2)$ 정도로 획기적으로 단축하는 방법을 설명하고자 한다. 기존 방식은 N(=MapSize)과 M(=EndRoom)이 각각 10이라면 대략 10억의 계산량이 발생하지만 새로 고안한 방법은 고작 10000의 계산량 밖에 발생하지 않는다 단순 수치로 보면 대략 100000배 빨라졌으니 이전 방식이 얼마나 비효율적인지 알 수 있다.Solution 2 : Kruskal + BFS이전에는 EndRoom의 개수만큼 Grid에 랜덤으로 방을 생성하여 해당 점의 방향의 모든 경우의 수를 백트래킹으로 찾아 맵을 생성하였다. 이번에..
1. [Unreal 5 / C++] 2D 절차적 맵 생성 알고리즘 (미로 생성 알고리즘)
·
Unreal 5/Study
절차적 맵 생성아이작과 같은 로그라이크류 게임에서 새로운 맵을 랜덤으로 생성할 때 특정한 알고리즘을 사용하여 자동으로 맵을 생성하는 알고리즘들을 지칭한다. 여러 맵 생성 알고리즘들이 구글에 널려있지만 정확하게 아이작의 구속의 맵 생성 시스템과 비슷한 결과는 없는 것 같아서 본인이 직접 고심하여 알고리즘을 제작해보았다.아이작에서의 맵 생성 방식아이작이 워낙 유명한 게임이다 보니까 모작등을 통해 여러 블로그에서 아이작의 맵 생성 방식을 흉내내는 글이 많았다. 하지만 본인이 원하는 아이작에서 비밀방을 제외한 맵 생성 알고리즘과 정확히 일치하는 알고리즘은 찾지 못하였다. 물론 아이작의 맵생성 알고리즘이 오픈되어 있지 않으니 경험을 토대로 역산할 수 밖에 없는 까닭도 있지만, 최대한 비슷한 결과를 만들기 위해 직..
[Unreal 5 / C++] 3. Pawn 클래스로 3D 캐릭터 만들기 - 이동 및 비행체
·
Unreal 5/Study
앞서 Playable 클래스를 통해 Physics pipeline을 만들었으면 이것을 활용해서 일반적인 이동을 하는 클래스와 드론과 유사한 이동을 하는 클래스를 만들어보자.우선 일반적인 이동만 하는 클래스인 DefaultPlayable 클래스이다. 해당 클래스는 WASD 와 Shift, Space 입력을 받아 움직이고 뛰고 점프를 할 수 있다.  DefaultPlayable.h#pragma once#include "CoreMinimal.h"#include "Playable.h"#include "DefaultPlayable.generated.h"UCLASS()class ASSIGNMENT_API ADefaultPlayable : public APlayable{ GENERATED_BODY()public: A..
[Unreal 5 / C++] 2. Pawn 클래스로 3D 캐릭터 만들기 - Collision
·
Unreal 5/Study
이전 시간에 오일러 방법으로 물체의 이동을 구현했었다. 이번 시간에서는 이전 시간에 이어서 Tick 내의 Physics pipeline 중 충돌 처리에 대해서 다뤄보자.void APlayable::Tick(float DeltaTime){ Super::Tick(DeltaTime); AddGravity(); Integration(DeltaTime); HandleCollision(DeltaTime); UpdatePosition(DeltaTime);}지난 게시글의 Tick 함수 내부에 보면 Integration과 UpdatePosition 사이에 HandleCollision 이라는 함수가 있는데 이 함수에서 물체의 충돌을 관리할 것이다.이번 구현의 목표는 단순히 물체가 이동할때 콜라이더를 가진 객체를 관통(Pe..
[Unreal 5 / C++] 1. Pawn 클래스로 3D 캐릭터 만들기 - Physics base
·
Unreal 5/Study
Pawn 클래스의 이동과 충돌을 언리얼에서 지원하는 Physics를 사용하지 않고 직접 구현해보았다. 해당 주제의 기능 구현에 중점을 두었으므로 애니메이션등 비주얼적인 요소는 다루지 않는다. 컨트롤러나 InputAction을 바인딩하는 부분 또한 다른 블로그를 참조하길 바란다. 이 게시글은 오일러 방법(Euler's Method)을 통해 Pawn의 위치를 직접 업데이트 하고 실제 물리엔진에서 사용하는 방법과는 차이는 있지만 나름 물리적인 연산을 통해 충돌을 구현하는 방법에 대해서 다루겠다. 우선 Force를 받아 이동과 다음 위치를 계산하는 기능을 갖고있는 Playable 클래스를 생성한다. 해당 클래스를 상속받아 입력 콜백 함수들을 재정의하여 사람, 자동차, 비행기 등 동적으로 움직이는 모든 물체를 구..
[Unreal 5/C++] 회전 발판과 움직이는 장애물 퍼즐 스테이지
·
Unreal 5/Study
서론회전하는 발판 & 움직이는 발판을 적절하게 조합해서 특정 시작점에서 도착지점까지 랜덤으로 맵을 생성하는 것을 구현해보았다.우선 중요한건 시작점에서 도착지점까지 4방향으로 랜덤한 범위만큼 왕복 이동하는 발판과 정지해있는 발판이 반드시 만나야하며 발판끼리 겹치는 경우도 없어야 한다. DynamicActor 클래스 구현우선 발판들의 공통적인 속성을 가지고 있는 Actor를 상속받는 부모 클래스인 DynamicActor를 만들어 준다. DynamicActor.h#pragma once#include "CoreMinimal.h"#include "GameFramework/Actor.h"#include "DynamicActor.generated.h"UCLASS()class ASSIGNMENT_API ADynamic..
[Unreal 5] 언리얼 엔진 C++ 개발 환경 설정과 기본 구조 익히기
·
Unreal 5/Study
언리얼 프로젝트 생성 시 폴더 구조.vs 폴더Visual Studio가 자동 생성하는 디버깅·솔루션 설정 관련 폴더.일반적으로 직접 수정할 일은 없다.Binaries 폴더C++ 코드를 빌드하면 생성되는 실행 파일(.exe, .dll 등)이 저장된다.삭제 시, 다음 빌드에서 처음부터 다시 빌드하므로 시간이 더 걸릴 수 있다.Config 폴더게임플레이, 렌더링, 입력 등의 설정을 담은 .ini 파일들이 위치.에디터나 코드로 특정 설정을 변경하면 이 폴더의 파일이 수정된다.Content 폴더언리얼 에디터의 Content Browser와 연결된 폴더로, 모든 에셋(모델, 머티리얼, 사운드 등)이 포함된다.새 에셋을 생성하거나 불러오면 이 폴더에 저장된다.DerivedDataCache 폴더에셋, 쉐이더 등의 캐시..