작성
·
63
·
수정됨
0
PawnData는 메타데이터를 들고있는 객체라고 생각해서 지나갔는데 AbilitySystemComponent는 TWeakObjectPtr이 조금 더 명확하지 않을까?? 생각이 들어서요..!
물론 UPROPERTY를 썼다고 해도 PlayerState가 없는데 PawnComponent가 정상적으로 존재한다는게 이상한 상태라 상관 없을 것 같긴 하지만 UPROPERTY까지 사용해가면서 들고있어야하는건가? 하는 생각도 있구요
BlueprintRead...가 없어서 BP에서 읽기위함도 아닌 것 같고..
아니면 혹시 WeakPtr을 사용하는 기준과 ObjectPtr를 사용하는 기준이 나눠져있는걸까요?
라이라에서도 UPROPERTY로 지정되어있어서 이유가 있을 것 같아서 여쭤봅니다!
답변 2
1
라이라 시스템에서 PawnExtensionComponent는 캐릭터의 메인 코어 역할을 담당한다고 보시면 됩니다.
또한, 라이라에서는 GAS를 활용하여 개발하기 때문에, 메인 코어인 PawnExtensionComponent에서 GAS의 핵심인 AbilitySystemComponent를 Weak로 참조하고 있다면, 메인코어에서 참조 중인 중요한 객체가 사라지는 이상한 상황이 발생해서는 안 되겠죠. 이러한 이유로 ObjectPtr을 사용했을 가능성이 있다고 추측할 수 있습니다.
0
안녕하세요, 인프런 AI 인턴입니다. 채명석님!
PawnExtensionComponent에 AbilitySystem을 캐싱할 때 TWeakObjectPtr 대신 다른 방식이 사용되는 이유는 여러 가지 요인이 있을 수 있습니다. 일반적으로 객체의 수명과 메모리 관리에 대한 차이는 두 포인터 타입을 선택할 때 결정적인 요소가 됩니다.
UPROPERTY 사용 이유: AbilitySystemComponent에 대해 UPROPERTY를 사용하면 엔진 레벨에서 메모리 관리를 돕는 기능들을 활용할 수 있습니다. 예를 들어, garbage collection(가비지 콜렉션)에서 안전하게 객체를 추적할 수 있게 됩니다. 이는 시스템 전체의 안정성을 높이는 데 기여할 수 있습니다.
TWeakObjectPtr의 역할: TWeakObjectPtr는 주로 객체의 라이프타임이 불확실하거나, 해당 객체에 대한 소유권을 명시적으로 주장하지 않을 때 사용합니다. 만약 AbilitySystemComponent가 항상 유효한 상태라면, 굳이 TWeakObjectPtr을 사용할 필요는 없습니다.
UE5의 설계 관점: 라이라와 같은 시스템에서는 객체 수명이 명확하거나 엔진 자체에서 객체의 소유권을 관리하게끔 설계되는 경우가 많습니다. 따라서 ObjectPtr를 통해 안정적으로 객체를 참조하는 것이 낫습니다.
추가적으로, WeakPtr과 ObjectPtr의 사용 기준에 대한 질문에서는 아래와 같은 일반적인 가이드를 참고할 수 있습니다:
- 여러 객체가 하나의 객체를 참조해야 하지만 소유권을 주장하지 않아야 하는 경우(즉, 객체의 수명이 보장되지 않는 경우): TWeakObjectPtr 사용
- 객체의 안정적인 상태가 필요하며, 참조 카운팅 관리가 필요 없는 경우: UPROPERTY와 일반 포인터 사용
관련된 내용을 더 알고 싶으시다면 다음의 포럼 토론이 도움이 될 수 있습니다:
- TObjectPtr과 TWeakObjectPtr의 차이점
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.