23.12.01

신승빈·2023년 12월 1일

UE

목록 보기
1/15

23_12_01

Interface

https://docs.unrealengine.com/5.3/ko/interfaces-in-unreal-engine/

UInterace를 상속받는 class를 통해 Reflection할 정보 제작

접두사가 I인 Class를 통해 Interface 정의

즉, 접두사가 I인 Class는 일반적인 cpp의 Interface와 동일하게 처리된다는 의미인 듯
그렇다면 꼭 접두사가 I가 아니어도 Interface로 만들고 상속할 수 있지 않을까?

특히 Blueprint에서 재정의가 가능한 Method들은 virtual키워드가 붙어선 안되고 BlueprintNativeEvent지정자가 붙는 Method들은 cpp에서 구현하기 위해서는 _Implementation이 붙은 조금 다른 Method가 필요한걸 보면 UE내부에서 사용하는 Interface는 U접두사가 붙은 Class만 사용하는 듯?

또한 UClass를 통해 접근할 경우 U접두사가 붙은 Class를 통해 접근해야 하지만 Cast를 통해 접근할 경우 I접두사가 붙은 Class를 통해 접근해야 하는것도 비슷한 이유일 듯

여러 Interface를 구현하는 UObject의 경우 Interface사이를 Casting해서 변환될 수 있음

UObject

https://docs.unrealengine.com/5.3/ko/objects-in-unreal-engine/

UClass는 CDO를 생성

UFUNCTION, UPROPERTY를 갖지 못하는 Method와 Variable은 UE의 Reflection에서 확인할 수 없음

UObject는 NewObject, CreateDebulfSubObject를 통해 생성되야 하며 new, delete를 통해 메모리를 관리할 경우 GC에 문제가 발생할 수 있음

UObject를 이용할 경우 GC, Refelection, Serialization 지원

UHT를 통해 UObject가 전처리가 수행되기 위해서는

#include "ClassName.generated.h"

class PROJECT_API UClassName : public UObject
{
    GENERATED_BODY()
}

의 형식으로 선언 필요

UObject의 파괴는 강한 참조가 모두 해제되어야 GC작동

강한 참조는 그냥 소유권으로 해석하면 될 듯

약한 참조를 갖는 포인터들은 IsValid()를 통해 GC 수행 여부를 확인

profile
이상을 길잡이 삼아 로망을 추구합니다.

0개의 댓글