건전한 건전지
728x90
반응형
ItemSpawner.h

UPROPERTY(EditDefaultsOnly)
TSubClassOf<AItemClass> Item;

 

과 같이 선언해주고 블루프린트에서 AItemClass를 매핑시켜준 다음 해당 클래스의 멤버 변수를 사용하고 싶었다.

 

내 생각에는 AItemClass를 담고 있으니까 매핑 후 Item에 그냥 접근해서 사용하면 될 줄 알았는데 문제가 발생했다.

만약 AItemClass에 있는 public 변수인 ItemName을 받아오고 싶다면

 

ItemSpawner.cpp

BeginPlay(){
	FString = Item->ItemName; -> 아예 접근이 안됨

}

 

처럼은 접근이 아예 안됐다.

 

그래서 AItemClass로 캐스팅을 해서 사용을 해보려고 했는데

 

ItemSpawner.cpp

BeginPlay(){
	FString = Item->ItemName; -> 아예 접근이 안됨
    
    if(AItemClass* NewItem = Cast<AItemClass>(Item)){
    	-> 이 경우도 캐스팅에 실패하였다.
    }
}

 

 

방법은 ClassDefaultsObject. 즉 CDO를 가져와서 캐스팅 해주는 것이었다.

 

ItemSpawner.cpp

BeginPlay(){
	FString = Item->ItemName; -> 아예 접근이 안됨
    
    if(AItemClass* NewItem = Cast<AItemClass>(Item)){
    	-> 이 경우도 캐스팅에 실패하였다.
    }
    
    if(AItemClass* NewItem = Cast<AItemClass>(Item->GetDefaultsObject()){
    	이렇게 CDO를 얻어오거나 혹은
    }
    if(AItemClass* NewItem = Cast<AItemClass>(Item->ClassDefaultObject){
    	처럼 CDO를 받아오면 된다.
    }
}

 

음... 맞는 방법인지는 모르겠음

 

유저 위젯타입은 그냥 생성 가능

 

TSubClassOf<UUserWidget> MyWidget;

 

CreateWidget(GetWorld(), MyWidget);

728x90
반응형
profile

건전한 건전지

@건전한 건전지

나는 언리얼의 왕이 될 남자다 👑