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

Jun Jun님의 프로필 이미지

작성한 질문수

이득우의 언리얼 프로그래밍 Part1 - 언리얼 C++의 이해

13강 언리얼 오브젝트 관리 I - 직렬화

혹시 TObjectPtr를 멤버변수로 가진 클래스의 직렬화 예제를 알려주실 수 있나요?

해결된 질문

24.07.26 00:58 작성

·

128

0

한번에 모아 보려고 한 프로젝트에서 작성중입니다.

Student의 부모인 Person에 있는 Card 때문에 오류가 나서요.

  1. 혹시 FString 변수만 따로 직렬화가 가능한지

  2. 불가능하다면 FArciveUObject를 이용해야되는것 같은데 예시가 있을지

이 두가지를 물어보고싶습니다. FArciveUObject는 사용법 예시를 아무리 검색해도 못찾아서요.

답변 2

0

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

2024. 08. 01. 04:31

음.. 이 부분을 깊게 들어가면 강의 내용이 복잡할 것 같아서 예제에는 안넣었는데,
우선 Ctrl+Shift+F를 눌러 엔진소스코드에 유사한 내용이 있는지 검색하는 것을 권장드립니다.
해당 내용이 있다면 참고하셔서 테스트해보시면 좋을 것 같아요.
만일 그래도 해결이 안되면, 한번 작성하고자 하는 예제 코드를 공유해주시겠어요? 저도 함께 고민해보겠습니다.

 

Jun Jun님의 프로필 이미지
Jun Jun
질문자

2024. 08. 01. 17:56

void UPerson::Serialize(FArchive& Ar)
{
    //Super::Serialize(Ar);

    Ar << Name;
    
    if (Ar.IsSaving())
    {
        bool bHasSubObject = Card != nullptr;
        Ar << HasSubObject;
        if (HasSubObject)
        {
            Card->Serialize(Ar);
        }
    }
    else if (Ar.IsLoading())
    {
        bool HasSubObject;
        Ar << HasSubObject;
        if (HasSubObject)
        {
            if (nullptr == Card)
            {
                Card = CreateDefaultSubobject<UCard>(TEXT("NAME_Card"));
                Card->Serialize(Ar);
            }
            else
            {
                Card->Serialize(Ar);
            }  
        }
    }
}


Super::Serialize()에서 UObject*는 지원을 안한다는 assert에 걸려서 주석처리하니 Card의 포인터 자체를 직렬화하려하지 않아서 입출력이 잘되긴 하는데, 이게 맞는지는 모르겠군요.

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

2024. 08. 02. 09:28

혹시 Part1 강의를 다 들으셨는지요?
지금 학습하고 있는 예제의 Serialization은 일반 C++ 기본 타입에 대한 직렬화를 다루고 있습니다. 현재 구현하고자 하시는 언리얼 오브젝트를 포함하는 일반 C++ 클래스의 Serialization은 잘 사용되지 않는 케이스인데, 다른 방법을 찾아보시는게 어떨까 싶습니다
Part1 후반부의 패키지를 사용해 언리얼 오브젝트를 저장하는 방법을 참고하시면 어떨까요?

Jun Jun님의 프로필 이미지
Jun Jun
질문자

2024. 08. 02. 20:13

아 제가 너무 성급한 호기심에 이것저것 찾아봤네요..ㅎㅎ 진득하게 끝까지 수강하겠습니다. 감사합니다

0

인프런 AI 인턴님의 프로필 이미지

2024. 07. 28. 01:01

안녕하세요, 인프런 AI 인턴입니다.

질문하신 내용과 관련된 구체적인 정보는 제공된 정보 내에 포함되어 있지 않습니다. 프로그래밍 관련 질문이시지만, 해당 내용에 대한 답변을 직접 제공하진 못하겠지만, 직렬화 관련된 기본적인 가이드를 조금 드릴 수 있겠습니다.

  1. FString 변수의 직렬화는 가능합니다. Unreal Engine에서 제공하는 모든 기본 데이터 타입들은 일반적으로 직렬화를 지원합니다. FString을 직렬화하는 방법에 대해서는 Unreal Engine의 공식 문서나 커뮤니티 포럼에서 더 다양한 예시를 찾아보실 수 있습니다.

  2. FArchiveUObject를 사용하는 방법에 대해서는, Unreal Engine의 공식 문서에서 “Serialization” 관련 부분을 참고하시는 것이 가장 좋습니다. Unreal Engine의 공식 문서는 매우 상세하게 다루고 있어서, FArchiveUObject를 포함해 필요한 클래스의 사용 방법을 찾아볼 수 있을 겁니다. 추가적으로, Unreal Engine의 GitHub 리포지터리나 커뮤니티 포럼에서 직접 사용 예시를 검색해보는 것도 좋은 방법입니다.

직접 문의하시고 싶은 내용이 있으시다면, 다양한 온라인 커뮤니티를 활용하시거나 Unreal Engine 공식 문의 채널을 이용해 보세요. 많은 개발자들이 유사한 문제를 겪었을 가능성이 높고, 에러 메시지나 구체적인 상황을 공유하면 해결책을 제안해 줄 수 있습니다.

Jun Jun님의 프로필 이미지

작성한 질문수

질문하기