• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

template UCLASS 관련 질문 드립니다.

22.11.13 16:45 작성 조회수 833

0

안녕하세요. 질문에 앞서, 항상 좋은 강의를 제공해주셔서 감사합니다.

알려주신 강의를 바탕으로 추가적인 공부를 진행하던 중, 해결하지 못하는 점이 생겨서

이렇게 글을 남깁니다.

 

UCLASS를 만드는데 template을 사용할 경우 문제가 발생합니다.

포럼 등에 찾아보니 여러 이유로 template 기능이 지원되지 않는 것 같은데

이런 경우 template을 사용하지 못하게 되면 여러 자료형에 대해 모두 코드를 짜주어야 하나요?

 

현재 제가 하고자 하는 건 퀘스트와 관련된 내용인데,

예를 들면 몬스터 사냥 퀘스트의 경우, 해당 몬스터를 죽였을 때 해당 퀘스트의 잡은 몹 수를 늘려야하는데, 해당하는 타입의 몬스터를 사냥 했는지를 판단하는 코드를 template으로 짜려고 했습니다.

 

간단히 아래 코드와 같습니다. (UKillEnemyQuest나 UQuestInterface는 제가 작성한 클래스입니다)

template<typename EnemyType>

UCLASS()

class PORTFOLIO1_API UKillEnemyQuest: public UQuestInterface

{

	GENERATED_BODY()

      ...

}

==============================================

template<typename EnemyType>

void UKillEnemyQuest<EnemyType>::ProcessQuest(UObject* KilledObject)

{

  auto KilledEnemy = Cast<EnemyType>(KilledObject);

  if (IsValid(KilledEnemy))

  {

    // 몬스터를 죽였을 때 퀘스트 내부에서 수정되는 로직

  }
}

위와 같이 구성하여

늑대를 잡는 퀘스트의 경우 UKillEnemyQuest<Wolf>,

고블린을 잡는 퀘스트의 경우 UKillEnemyQuest<Goblin>

이런 식으로 짜고 싶었습니다..

 

이런 경우 각 몬스터에 해당하는 Quest 클래스들을 일일히 다 작성해주어야 할까요..?

다른 방법이 있는지 궁금하여 질문 남깁니다ㅠㅠ

답변 1

답변을 작성해보세요.

1

https://docs.unrealengine.com/4.27/ko/ProgrammingAndScripting/ProgrammingWithCPP/UnrealArchitecture/TSubclassOf/

TSubclassOf를 이용해보세요!
Wolf::StaticClass() 이런 식으로 넘기면 됩니다.

rsfnqf98님의 프로필

rsfnqf98

질문자

2022.11.13

감사합니다ㅠㅠ

말씀하신대로 TSubclassOf 사용하니까 비교가 가능하네요!!

덕분에 해결할 수 있었습니다!! 정말 감사합니당!