GameDevelop/UnrealEngine 13

UnrealEngine 5.4 - 몬스터가 버벅이는 현상 / 길찾기 버벅이는 현상 / 네비메쉬 간섭 문제

몬스터 이동 버벅임 현상 해결하기: 네비메쉬 간섭 문제 언리얼 엔진으로 몬스터 AI를 구현하고 테스트하던 중, 몬스터가 이동할 때 버벅이는 현상을 겪었다. 처음에는 뭔가가 충돌해서 몬스터를 밀치는건가 싶었는데 아니었다.범인은 네비메쉬(NavMesh)였다. 언리얼 엔진에서는 콜리전(Collision)이 있는 오브젝트가 월드에 스폰되면, 기본적으로 네비메쉬에 영향을 주어 AI가 그 위를 걷지 못하도록 장애물 처리를 한다. 결과적으로 몬스터는 발밑에 떨어지는 작은 골드나 시체들을 '피해야 할 벽'으로 인식하고 계속해서 경로를 재계산 하느라 버벅였던 것이다. 내 경우에는 '골드'가 범인이었는데, 몬스터 처치 시 골드가 팝콘처럼 튀어나오는 방식이다.이 때, 골드가 공중에 떠있을 때는 벽으로 인식하면서 피하려고 ..

UnrealEngine 5.4 - 랙돌 적용, 랙돌 적용 시 바닥 뚫음 현상

랙돌 적용몬스터가 죽을 때 랙돌 기능을 적용하여 타격감을 살리고자 한다.랙돌 적용 자체는 아주 간단했다. 적용하고 싶은 시점에 아래 코드를 호출하면 된다.GetMesh()->SetCollisionProfileName(TEXT("Ragdoll"));GetMesh()->SetSimulatePhysics(true)콜리전 프로필을 언리얼에서 제공하는 Ragdoll 프로필로 변경 후피직스를 켜주면 바로 흐느적거린다. 단, 아래와 같은 조건이 적용되어 있어야 동작을 할 것이다.스켈레탈 메시에 피직스 애셋이 적용되어 있어야 한다.피직스 애셋의 PhysicsType이 Kinematic이 아니어야 한다. 잘 적용되어있다면 피직스 애셋에서 시뮬레이트를 눌러 잘 흐느적거리는지 확인해보자. 랙돌 적용 시 바닥 뚫음 현상나는 ..

UnrealEngine 5.4 - 마우스로 뷰포트를 클릭해야 키 입력 이벤트가 발생 / 뷰포트 포커스 / 키 입력 이벤트 발생 안함

언리얼엔진으로 마우스 이동 및 WASD 이동을 구현하고 있는데,WASD 이동을 하려면 Play후에 뷰포트를 한 번 클릭해줘야 키 입력 이벤트가 발생을 하는 현상이 있었다. EnhancedInputComponent->BindAction(SetWASDMoveAction, ETriggerEvent::Triggered, this, &AMyHackSlashPlayerController::OnSetWASDMove);사용했던 키 입력 이벤트. 처음에는 코드 문제인가 했는데 그건 아니고에디터에서 플레이할 때에만 발생하는 문제이다. 이걸 해결하려면 편집 - 에디터 개인설정 - Play in Editor - 게임이 마우스 컨트롤 획득 을 켜주면 된다. 다만 이럴 경우 마우스가 뷰포트를 빠져나오려면 Shift + F1 ..

언리얼엔진의 애셋매니저(AssetManager)

언리얼엔진의 애셋매니저에 대해 정리. 언리얼 엔진의 AssetManager는 프로젝트 내의 애셋을 탐색, 로드, 관리하는 싱글톤 오브젝트이다.특히 런타임 중에 필요한 시점에 애셋을 동적으로 로드(비동기 로드)하는 데 핵심적인 역할을 한다. 아래와 같은 역할을 한다. 1. 애셋 검색 및 식별프로젝트 설정에 등록된 Primary Asset 들을 자동으로 검색하고, 이를 PrimaryAssetID를 통해 고유하게 식별한다. 2. 비동기 로딩FStreamableManager를 내장하고 있어, 비동기 로딩(Async Loading)을 통해 애셋을 백그라운드에서 로드할 수 있도록 한다. 3. 메모리 관리어떤 애셋이 로드되어 있는지 추적 및 더 이상 필요하지 않은 애셋을 메모리에서 해제하는 시점을 제어할 수 있다. ..

UBT (Unreal Build Tool)

UBT (Unreal Build Tool)1. 한 줄 정의UBT는 Unreal Engine 프로젝트의 빌드 과정을 총괄하는빌드 시스템이자 자동화 도구다.2. UBT는 왜 필요한가?Unreal은 다음과 같은 특성이 있다.멀티 플랫폼 (Windows, Console, Mobile)수많은 모듈 구조엔진 + 게임 코드 혼합 빌드에디터 / 클라이언트 / 서버 분리 빌드👉 일반 C++ 빌드 시스템으로는 관리가 어렵다.3. UBT의 핵심 역할UBT는 다음을 담당한다.전체 빌드 파이프라인 관리UHT 실행 제어C++ 컴파일러 호출링크 단계 관리플랫폼별 설정 적용4. UBT와 UHT의 관계[ UBT ] ├─ UHT 실행 ├─ C++ 컴파일 ├─ 링크 └─ 패키징 연계👉 UHT는 UBT가 호출한다👉 UH..

UHT (Unreal Header Tool)

UHT (Unreal Header Tool)1. 한 줄 정의UHT는 Unreal Engine의 리플렉션 시스템을 위해C++ 헤더를 분석하고 자동 코드를 생성하는 도구다. 2. UHT는 왜 필요한가?C++ 자체에는 다음 기능이 없다.런타임 타입 정보 확장에디터 노출 메타데이터Garbage Collection 추적Blueprint 연동👉 Unreal은 이를 코드 생성 방식으로 해결한다. 3. UHT의 핵심 역할UHT는 다음을 담당한다.UCLASS, USTRUCT, UENUM, UFUNCTION, UPROPERTY메타데이터 파싱.generated.h 파일 생성리플렉션 데이터 구축4. 동작 흐름 (빌드 파이프라인)[ C++ Header (.h) ] ↓[ Unreal Header Tool ] ..

TArray, TMap

언리얼 엔진의 TArray와 TMap에 대해 정리해보았습니다.구글링 및 AI를 참고했습니다. Unreal Engine의 TArray와 TMap1. Unreal 컨테이너를 왜 따로 쓰는가?언리얼 엔진에는 STL 대신 자체 컨테이너(TArray, TMap, TSet) 가 있다.이유는 다음과 같다.엔진 메모리 관리 시스템과 통합Garbage Collection / Reflection 지원플랫폼별 최적화직렬화(Serialize) 지원👉 STL보다 엔진 친화적 2. TArray란?1) 한 줄 정의TArray는 언리얼 엔진의 동적 배열 컨테이너다.STL의 std::vector 와 유사하다.2) 기본 특징연속 메모리 구조인덱스 기반 접근자동 크기 확장3) 내부 구조 핵심내부적으로 힙 메모리 연속 할당Capacity..

UnrealEngine - 언리얼엔진의 UI 렌더링 과정

언리얼 엔진의 UI 렌더링 과정에 대해 정리해보았습니다.구글링 및 ChatGPT, Gemini를 참고했습니다. -> 무조건 신뢰하지 마시고 참고만 해주시길 바랍니다.흐름 요약[Game Thread] ├─ Input & State Update │ - 마우스 / 키보드 / 터치 입력 처리 │ - Focus, Hover, Capture 상태 갱신 │ - Widget Tick (NativeTick) │ - UI 애니메이션 상태 업데이트 │ ├─ Slate Tick │ ├─ Layout Pass │ │ ├─ Prepass │ │ │ - SlatePrepass() │ │ │ - Widget Tree 순회 (..

UnrealEngine - UObject와 AActor

언리얼 엔진의 UObject와 AActor에 대해 정리해보았습니다.구글링 및 Gemini를 참고했습니다. 1. UObject언리얼 엔진에서 관리되는 최상위 기본 클래스입니다.특징: 월드에 존재(배치)할 수 없으며, 형체가 없습니다.제공 기능:리플렉션 시스템 : UObject는 UCASS, UPROPERTY, UFUNCTION 매크로를 통해 언리얼 엔진의 리플렉션 시스템을 사용할 수 있습니다. 덕분에 에디터에서 속성을 조작하거나 블루프린트 연동, 저장 및 로드 될 수 있습니다.가비지 컬렉션 : UObject를 상속받은 객체는 언리얼엔진의 GC에 의해 자동으로 메모리 수명주기가 관리됩니다.직렬화 : 자신의 속성을 저장하고 불러올 수 있습니다. 게임상태를 저장하거나 네트워크를 통해 객체 데이터를 전송할 때 유..

UnrealEngine - Garbage Collection(GC)

언리얼 엔진에서 구현된 가비지 컬렉션에 대해 정리해보았습니다.구글링 및 Gemini를 참고했습니다. 언리얼 엔진의 Garbage Collection(GC)C#과 달리 C++은 가비지 컬렉션을 제공하지 않습니다.그래서 언리얼 엔진에서는 가비지 컬렉션을 직접 구현하여 제공하고 있습니다. GC란 '더 이상 사용하지 않게된 객체 (= 다른 객체에서 참조하지 않는 객체) '를시스템에서 자동으로 해제해주는 기능을 말합니다. 언리얼은 리플렉션 시스템을 사용하여 GC를 수행합니다.리플렉션이란 런타임 중에 객체가 자기 자신 정보를 파악할 수 있게 해주는 시스템입니다.리플렉션 시스템이 있기 때문에 엔진이 객체의 속성을 알 수 있고, 사용되지 않는 객체를 구분할 수 있습니다. 언리얼 엔진에서 UObject를 상속받은 객체..