본문 바로가기
Unreal/Solution

Unreal UseBlackboard TObjectPtr 문제

by Dev_카페인 2023. 12. 18.
반응형

[Unreal/C++] UseBlackboard TObjectPtr<> 문제

 

Unreal Engine5에서 나타나는 문제점이다.

먼저 UE4 에서는 Blackboard Component가 UBlackboardComponent* 자료형으로 선언되어 있다.

하지만 UE5에서는 TObjectPtr<UBlackboardComponent>로 선언되어 있는데,

UseBlackboard 함수를 사용할 때에는 UBlackboardComponent*& 형식으로 받기 때문에 전달할 수 없는 문제가 생긴다.

AAIController::UseBlackboard(UBlackboardData* BlackboardAsset, UBlackboardComponent*& BlackboardComponent)

 

UE4 강의 자료로 학습하고 UE5로 공부하고 있는 사람들이 많이 겪는 문제이다.

 

먼저 TObjectPtr은 언리얼 5에서 기존의 원시 포인터를 대체하기 위한 UObject용 포인터 이다. 언리얼이 32비트를 더 이상 지원하지 않게 되면서 생긴 64비트 포인터 시스템으로 일단 원시 포인터와 동일한 역할을 한다고 하는데 대부분의 원시 포인터가 TObjectPtr로 바뀌면서 학습하는 사람들에게는 따라야 할 약속이 생긴 것이다.

 

어쨋거나 이 문제의 해결책은 UBlackboardComponent* 형식으로 변환해 주는 것이다.

UBlackboardComponent* blackboardComp = Blackboard;
UseBlackboard(OwnerEnemy->GetBehaviorTree()->BlackboardAsset, blackboardComp);

Blackboard를 다시 Component*로 생성해주거나 형변환을 통해 가능할 수도 있다. (시도해보지는 않았다.)

UseBlackboard(OwnerEnemy->GetBehaviorTree()->BlackboardAsset, (UBlackboardComponent*)blackboardComp);

 

OnPossess(APawn* InPawn) 함수 내에서 사용하게 되는데 이보다 더 좋은 방법이 있다면 공유해줬으면 좋겠다.

반응형