문제점
AnimInstance 클래스에서 DraculaCrossBow 오브젝트를 가져오고 싶은데 가져와지지 않음
원인
[의심 1] TryGetPawnOwner
TryGetPawnOwner 함수 이름 자체 Try.
그래서 100% 가져온다는 확신이 없기 때문에 null체크를 하는 것임.
안된다는 것은 실패했다는 것이다.
기본적으로 배치될 수 있는 모든 것들은 Actor로 부터 상속을 받고
Actor -> Pawn -> Charactor 순으로 상속 받는다.
여기서는
Actor -> Pawn -> Charactor -> R1Pawn이 될 것이다.
내 코드를 보면 crossBowObject는 Pawn이 아니기 때문에 TryGetPawnOwner로 가져오면 안된다는 것을 예상할 수 있음
해결 과정
crossBowObject를 다른 방법으로 가져와보자!
[시도 1]
ObjectManager를 가지고 와서 빌드해주니까 ObjectManager를 식별할 수 없다는 오류가 뜸
현재 ObjectManager은 Actor Base인데 내가 만든 AnimInstance는 ActorBase가 아니기 때문임
따라서 AnimInstance에서 ObjectManager를 가져올 방법을 생각해내야 하고 ObjectManager는 GameMode를 상속 받으니까 이 GameMode를 AnimInstance에서 가져오면 된다.
해결
AnimInstance 용으로 GameMode랑 ObjectManager를 만들어줘야 하는데 임시로 처리해줌
배운것
Cast
- 언리얼 엔진에서는 레벨에 배치되는 모든 클래스가 AActor 클래스를 상속받고 있다.
따라서 몇몇 함수들에서는 메인이 되는 부모 클래를 매개변수로 받거나 돌려준다.
형 변환은 어떨 때 하는 것인가?
총알이 타겟에 맞았는지를 확인하고 싶다고 할 때
NotifyActorBeginOverlap(AActor* OtherActor) 함수를 이용해서 확인한다고 가정해보자.
여기서 OtherActor이 정확히 총알일 때만 판별을 하고 싶을 때 Cast를 쓴다.
TryGetPawnOwner
APawn* UAnimInstance::TryGetPawnOwner() const
{
USkeletalMeshComponent* OwnerComponent = GetSkelMeshComponent();
if (AActor* OwnerActor = OwnerComponent->GetOwner())
{
return Cast<APawn>(OwnerActor);
}
return NULL;
}
'Unreal' 카테고리의 다른 글
[Unreal] Lightmap, Lightmass가 뭐지? (0) | 2024.01.26 |
---|---|
[Unreal] Chaos Destruction - Field (0) | 2023.09.30 |
[Unreal] 애니메이션 (0) | 2023.03.08 |
[UE5- 언리얼 웨비나 1주차] 게임 제작의 시작 (0) | 2022.08.15 |
[언리얼] 클래스, 기본 이벤트, 변수와 UPROPERTY (0) | 2022.08.11 |
댓글