강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

Solution C님의 프로필 이미지
Solution C

작성한 질문수

[Rookiss University] UE5 Lyra 클론 코딩 (Haker)

Ability #5

ASC nullptr 문제

해결된 질문

작성

·

35

0

자꾸 UHakEquipmentInstance* FHakEquipmentList::AddEntry(TSubclassOf<UHakEquipmentDefinition> EquipmentDefinition)에서

UHakAbilitySystemComponent* ASC = GetAbilitySystemComponent();

	check(ASC);
	{
		for (const TObjectPtr<UHakAbilitySet> AbilitySet : EquipmentCDO->AbilitySetsToGrant)
		{
			AbilitySet->GiveToAbilitySystem(ASC, &NewEntry.GrantedHandles, Result);
		}
	}

이쪽, GiveToAbilitySystem에서 ASC가 nullptr이라면서 터지길래 열받아서 ASC를 아래처럼 플레이어스테이트에서 직접 가져왔더니 문제가 해결되었습니다.


	// 1. OwnerComponent의 소유자 (보통 Character일 것)
	ACharacter* OwnerCharacter = Cast<ACharacter>(OwnerComponent->GetOwner());
	// 2. Character의 PlayerState 가져오기
	AHakPlayerState* HakPlayerState = Cast<AHakPlayerState>(OwnerCharacter->GetPlayerState());
	// 3. PlayerState에서 ASC 가져오기
	UHakAbilitySystemComponent* ASC = HakPlayerState->GetHakAbilitySystemComponent(); // 혹은 직접 변수 접근
	

 

문제는 아래 함수인 것 같은데.


UHakAbilitySystemComponent* FHakEquipmentList::GetAbilitySystemComponent() const
{
	check(OwnerComponent);
	AActor* OwningActor = OwnerComponent->GetOwner();

	// GetAbilitySystemComponentFromActor를 잠시 확인해보자:
	// - EquipmentManagerComponent는 AHakCharacter를 Owner로 가지고 있다
	// - 해당 함수는 IAbilitySystemInterface를 통해 AbilitySystemComponent를 반환한다
	// - 우리는 HakCharacter에 IAbilitySystemInterface를 상속받을 필요가 있다
	return Cast<UHakAbilitySystemComponent>(UAbilitySystemGlobals::GetAbilitySystemComponentFromActor(OwningActor));
}

이 코드가 제대로 작동 안 하고 null을 주는 것 같은데 왜 그런걸까요?

HakCharacter에서 제대로 IAbilitySystemInterface 구현했고, 강의 코드 제대로 따라갔다고 생각하는데...

답변 1

0

Liu님의 프로필 이미지
Liu
지식공유자

이런 경우는 간단해서 3가지로 나눠서 디버깅 해보면 됩니다.
1. OwingActor 변수에 nullptr 여부
2. Cast 여부
3. GetAbilitySystemComponentFromActor 여부

Solution C님의 프로필 이미지
Solution C
질문자

감사합니다 해보겠습니다

 

Solution C님의 프로필 이미지
Solution C

작성한 질문수

질문하기