본문 바로가기

전체 글

(42)
[UE4] Asset 비동기 로딩 (FStreamableManager::RequestAsyncLoad) 0. 설명 참고 : 비동기 애셋 로딩 FStreamableManager::RequestAsyncLoad 함수를 이용한 Asset async load 코드 예제. BeginPlay시 임의의 SkeletalMesh를 비동기 로드하고, 이를 SkeletalMeshComponent에 SetSkeletal 하는 코드. 1) GEngine / UAssetManager UAssetManager는 UEngine 클래스의 멤버 변수이며, UEngine 클래스는 다음과 같이 전역 변수로 존재한다. // Runtime/Engine/Classes/Engine/Engine.h /** * Abstract base class of all Engine classes, responsible for management of system..
[UE4] FTimerManager::SetTimer/ClearTimer/GetTimerElapsed 0. 설명 참고 : 게임플레이 타이머 아래 코드에서는 전반적인 타이머를 사용법을 보여주고 있다. UWorld::GetTimerManager() 함수는 다음과 같다. // Runtime/Engine/Classes/Engine/World.h /** Gameplay timers. */ class FTimerManager* TimerManager; inline FTimerManager& GetTimerManager() const { // GameInstance가 있으면 GameInstance의 TimerManager를 반환하고, // 그렇지 않다면, 자신의 TimerManager를 돌려준다 return (OwningGameInstance ? OwningGameInstance->GetTimerManager() :..
[UE4] World 내 Object/Actor 순회 0. 서문 Object / Actor 순회는 개별 대응되는 iterator 클래스(ObjectIterator / ActorIterator)와 이에 대한 ranged-for-base 기능을 지원하기 위해 만들어진 wrapper 클래스(ObjectRange / ActorRange)를 사용하는 두 가지 방식으로 나뉠 수 있다. 1. ObjectIterator/ObjectRange 현재 월드에 로딩된 언리얼 오브젝트(UObject)를 순회하기 위해 사용한다. 모든 언리얼 오브젝트를 순회하는 FObjectIterator와 특정 타입의 언리얼 오브젝트를 순회하는 TObjectIterator/TObjectRange로 나눌 수 있다. Iterator와 Range 클래스는 "Runtime/CoreUObject/Publi..
[UE4] MyLogMacro.h 0. 설명 UE4_LOG를 확장하여 로그를 남기는 클래스와 함수명, 그리고 코드 라인수를 함께 로깅하도록 하는 매크로. 빌드 확인 : 4.17.2 1. Code #pragma once #define GET_CLASS_NAME_WITH_FUNCTION FString(__FUNCTION__) #define GET_LINE_NUMBER FString::FromInt(__LINE__) #define LOG(LogCategory, Format, ...) \ UE_LOG(LogCategory, Log, TEXT("%s [%s] : %s"), *GET_CLASS_NAME_WITH_FUNCTION, *GET_LINE_NUMBER, *FString::Printf(Format, __VA_ARGS__)) #define LO..
[UE4] 프로퍼티 및 UPROPERTY 주요 지정자 0. 서문 이 글을 읽기에 앞서, UE4의 Reflection에 대한 이해가 없다면, 꼭 아래 문서부터 읽도록 하자. 언리얼 프로퍼티 시스템 : 리플렉션 프로퍼티는 표준 C++ 변수 문법 앞에 UPROPERTY 매크로를 붙이면서 프로퍼티 메타데이터와 변수 지정자를 붙여 선언한다. UPROPERTY([specifier, specifier, ...], [meta(key=value, key=value, ...)]) Type VariableName; UE4의 프로퍼티 전반적인 내용과 모든 specifier 대한 내용은 아래 문서를 참고하기 바란다. UnrealDoc : 프로퍼티 이후 문서엔 자주 사용되는 specifier 위주로만 조금 더 자세히 정리하였다. (UPROPERTY specifier 열거값들은 Ob..
[UE4] 클래스 및 UCLASS 주요 지정자 0. 서문 이 글을 읽기에 앞서, UE4의 Reflection에 대한 이해가 없다면, 꼭 아래 문서부터 읽도록 하자. 언리얼 프로퍼티 시스템 : 리플렉션 UE4의 클래스에 대한 전반적인 내용에 대해서는 아래 문서를 통해 살펴볼 수 있다. UnrealDoc : 게임플레이 클래스 몇몇 기억해야 할 것들만 추려보면 다음과 같다. 1) 클래스 추가하기 엔진과 관련없는 구현체가 아닌 경우엔, C++ 클래스 마법사를 통해서 클래스를 생성하라. Unreal Header Tool (UHT)가 엔진과 에디터에서 필요한 구성 모두를 자동으로 만들어 준다. #include "ClassName.generated.h" 생성 및 자동 포함 UCLASS(...) 매크로 및 GENERATED_BODY() 매크로 자동 포함 필요시 M..
[UE4] 함수 및 UFUNCTION 주요 지정자 0. 서문 이 글을 읽기에 앞서, UE4의 Reflection에 대한 이해가 없다면, 꼭 아래 문서부터 읽도록 하자. 언리얼 프로퍼티 시스템 : 리플렉션 함수는 일반 C++ 함수와 UFUNCTION, 두 가지의 기본적 형태로 존재 가능하다. UFUNCTION은 전용 문법이 있어, 함수 지정자를 통해 함수에 대한 부가 정보를 선언부에 지정할 수 있다. UFUNCTION([specifier, specifier, ...], [meta(key=value, key=value, ...)]) ReturnType FunctionName([Parameter, Parameter, ...]) UE4의 함수 전반적인 내용과 모든 specifier, meta에 대한 내용은 아래 문서를 참고하기 바란다. UnrealDoc : 함..
[UE4] Garbage Collection overview 0. 서문 참조(레퍼런스)가 더 이상 존재하지 않는, 미사용되는 오브젝트들을 주기적으로 메모리에서 제거해 주는 일은 게임 엔진에서의 메모리 관리 측면에서 상당히 중요한 기능이다. UE4는 이를 위해 Reflection 기능을 활용하는데, 효과적으로 언리얼 엔진에서 개발하기 위해선 이 두 가지 시스템이 어떻게 상호작용하는지 정확하게 이해할 필요가 있다. 참고로, 이 글은 Unreal Wiki의 Garbage Collection Overview 문서를 번역하면서 약간의 보충을 더하는 식으로 작성하였다. (예를 들어, 언리얼 오브젝트 처리 같은 문서의 내용도 포함되는 등...) 또한 overview의 성격을 가지는 문서이므로, 너무 깊숙한 부분들까지는 다루지 않았다. 1. Reflection UE4의 리플렉션..