열심히 강의 듣는데 첫번째 챕터부터 막히는 부분이 있었다.
Actor를 하나 만들고 Material을 입히려는데 외않되?

#include "Item.h"
AItem::AItem()
{
SceneRoot = CreateDefaultSubobject<USceneComponent>(TEXT("SceneRoot"));
SetRootComponent(SceneRoot);
StaticMeshComp = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("StaticMeshComp"));
StaticMeshComp->SetupAttachment(SceneRoot);
static ConstructorHelpers::FObjectFinder<UStaticMesh> MeshAsset(TEXT("/Game/Resources/Props/SM_Chair.SM_Chair"));
if (MeshAsset.Succeeded())
{
StaticMeshComp->SetStaticMesh(MeshAsset.Object);
}
///Script/Engine.MaterialInstanceConstant'/Game/Resources/Materials/M_Armor_B.M_Armor_B'
static ConstructorHelpers::FObjectFinder<UMaterial> MaterialAsset(TEXT("/Game/Resources/Materials/M_Armor_B.M_Armor_B"));
if (MaterialAsset.Succeeded())
{
StaticMeshComp->SetMaterial(0, MaterialAsset.Object);
}
}
이렇게 작성하고 보니까 암만봐도 틀린게 없어보인다... 멀까했음
나으 힘으로는 찾기 힘들 것 같아서 재미나이를 사용했더니
경로에
/Script/Engine.MaterialInstanceConstant'/Game/Resources/Materials/M_Armor_B.M_Armor_B'
이게 들어가면 템플릿을 < UMaterialInterface >로 변경해야 하나보더라

빛 때문에 잘 안보이지만 색이 바뀌었음 따단
아니면 아예 경로가 Engine.Material인 Material을 찾고 템플릿을 그대로 사용하는 방법도 있다
근데 보니까 템플릿이
< UMaterial >
< UMaterialInstance >
< UMaterialInterface >
이렇게 있는데 그러면 UMaterialInstance를 사용해도 되지 않을까? 했다
근데 왜 UMaterialInstance를 사용하지 않고 UMaterialInterface를 사용했는지를 찾아보아따
우선 UMaterialInterface는 UMaterialInstance와 UMaterial의 부모 클래스이다.
만약 에셋이 Instance가 아닌 일반 Material로 변경이 되면 유지보수 하는데 있어 상위 클래스가 유리하기 때문에 UMaterialInterface를 사용한다고 한다!
업캐스팅을 또 이렇게 사용하는구나 싶다.
언리얼 까다로웡