컴포넌트를 C에서 만들 때
컴포넌트도 결국 변수기 때문에 직렬화 시켜줘야하고, VisibleAnywhere로 만든다
(4.26부터 defaultsOnly, instanceOnly와의 차이가 없어졌다)
UObject로부터 직접 상속받을 경우 클래스명 앞에 U를 붙여준다
(Actor에서 상속받을 경우 A를 붙인다)
에디터에서 동적할당 하는 법
CreateDefaultSubObject<우리가 쓸 자료형>("할당된 이름")
RootComponent에 할당 (블루프린트에서는 가상 루트에 자동으로 할당되지만 C++에서는 꼭 할당 해줘야한다)
CHelpers - 템플릿화 해서 사용할 클래스
템플릿은 헤더파일에 정의
CoreMinimal.h - 진짜 꼭 필요한 거만 모여있는 헤더파일
문자열(FString)을 text로 바꿀때 *(포인터)를 붙인다
동적할당 템플릿 정의
template<typename T>
static void CreateComponent(AActor* InActor, T** OutComponent, FName InName, USceneComponent* InParent = nullptr, FName InSocketName = NAME_None)
{ //이 컴포넌트가 붙을 클래스, 생성해서 내보낼 컴포넌트, 얘의 이름, 부모 컴포넌트가 있을 경우
*OutComponent = InActor->CreateDefaultSubobject<T>(InName);
if (!!InParent) //!!은 not null을 의미
{
(*OutComponent)->SetupAttachment(InParent, InSocketName); //부모 컴포넌트에 붙여주는 작업
return;
}
InActor->SetRootComponent(*OutComponent);
}
CHelpers::CreateComponent<UStaticMeshComponent>(this, &Mesh, "Mesh");
ConstructorHelpers::FObjectFinder()
생성자에서만 사용 가능하다
기존 코드
UObject* obj = StaticLoadObject
(
UMaterialInstanceConstant::StaticClass()
// 해당 클래스 타입을 넣어줘야하는 경우 (UObject를 반환하기 때문에),
nullptr,
L"path"
)
UMaterialInstanceConstant* material = Cast<UMaterialInstanceConstant>(obj);StaticLoadObejct
템플릿화
template<typename T>
static void GetAssetDynamic(T** OutObject, FString InPath)
{
*OutObject = Cast<T>(StaticLoadObject(T::StaticClass(), nullptr, *InPath));
}
템플릿을 사용한 코드
UMaterialInstanceConstant* material = nullptr;
CHelpers::GetAssetDynamic<UMaterialInstanceConstant>(&material, "MaterialInstanceConstant'/Game/Materials/M_White_Inst.M_White_Inst'");
델리게이트(Delegate)는 이벤트 디스패쳐와 비슷하다
델리게이트로 호출될 함수는 반드시 직렬화 되어있어야 한다
함수이기 때문에 UFUNCTION()을 사용한다
#include 헤더 에는 U 붙이지 않는다
#include "Kismet/KismetSystemLibrary.h"
UKismetSystemLibrary::K2_SetTimer(this, "SetRandomColor", 1, true);
//1초마다 SetRandomColor()함수를 loop를 키고 호출
'> Study > Unreal Engine 4' 카테고리의 다른 글
[Unreal C++] EQS (Environment Query System) (0) | 2024.02.26 |
---|---|
[Unreal C++] Component Overlap, Delgate, Trigger (0) | 2023.07.14 |
[Unreal C++] Player, Animation, Delgate (0) | 2023.07.06 |
[Unreal C++] Spawn, Log, TSubClassOf (0) | 2023.06.22 |
[Unreal C++] Module, 직렬화, UPROPERTY (0) | 2023.06.21 |