강의

멘토링

로드맵

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

충실한 전복님의 프로필 이미지
충실한 전복

작성한 질문수

이득우의 언리얼 프로그래밍 Part2 - 언리얼 게임 프레임웍의 이해

8강 아이템 시스템

TSoftObjectPtr 를 사용했음에도, 메모리에 로드 됩니다.

작성

·

10

0

  1. UABWeaponItemData 의 WeaponMesh 의 속성을 TSoftObjectPtr 으로 변경 및 Base 에서 팬딩 대기 및 처리까지 모두 수정하였으나 최초 실행 시 여전히 검이 로드가 된 상황입니다.

  2. 혹시 몰라 코드를 아예 복붙을 하였음에도 여전합니다.

위 내용중 코드 내용에 문제가 없다면, 강의 내용중 에디터에서 무언가 제가 행위를 빼먹은 것 같은데 죄송합니다. 계속 돌려보는데 잘 찾지를 못하겠습니다.

 

혹 TSoftObjectPtr 을 사용할 WeaponMesh 등을 에디터에서 무언가 설정해야 할 것이 있을까요?

 

별도로 아주 만약 TSoftObjectPtr 가 어떠한 캐릭터를 레퍼런싱 한다고 하면 그리고 그 캐릭터가 중간에 삭제가 된다고 한다면 다시 로드해야 하는 행위가 필요할까요?

아니면 tweakobjectptr 와 다르게 TSoftObjectPtr 를 단지 디스크에서 에셋을 참조하기 위한 역활로만 사용하는 것일까요? 즉 런타임에 도중 TSoftObjectPtr 에 무언가를 할당하는 것은 안되고 단지 디스크에서 객체를 참조하는 역활인지 그것이 헷갈립니다.

 

답변 1

0

안녕하세요, 인프런 AI 인턴입니다. 충실한 전복님.

언리얼 엔진에서 TSoftObjectPtr을 사용하는 방법에 대해 문의 주셨네요. 먼저, TSoftObjectPtr은 런타임에 객체를 필요할 때 로드하여 메모리에 올리는 소프트 레퍼런스입니다. 이를 통해 처음부터 모든 에셋을 메모리에 담지 않고 필요한 시점에 로딩함으로써 초기 로딩 시간을 줄이고 메모리 사용을 최적화할 수 있습니다.

  1. TSoftObjectPtr로 전환 후에도 에셋이 로드되는 문제:

    • TSoftObjectPtr을 사용하고 있음에도 불구하고 실행 시 에셋이 로드된다면, 메모리에 해당 에셋이 남아 있는 다른 이유가 있을 수 있습니다. 가장 흔한 원인은 에디터가 에셋을 캐쉬하고 있을 가능성입니다. 에디터에서 변경 사항을 반영할 때 최악의 경우 에디터 캐시를 비우거나 새로운 프로젝트를 만들어서 테스트해보는 것을 추천드립니다.
    • Obj List Class=SkeletalMesh로 검사할 때, 메모리에 남아 있다면 이전 게임 세션에서 캐쉬 된 것일 수 있습니다.
  2. TSoftObjectPtr의 역할:

    • TSoftObjectPtr는 디스크에서 해당 에셋의 경로만을 유지하고 있으며 실제 객체는 필요 시 LoadSynchronous()를 통해 로드하게 됩니다. 따라서, 에디터에서 이 포인터를 설정할 때 단순히 경로가 맞는지 확인하면 되며, 별도의 추가 설정은 필요하지 않습니다.
    • 이 포인터는 약 참조의 일종으로, 참조된 에셋이 삭제된다면 다시 로드해야 하며, 안전하게 사용할 수 있도록 로드 상태를 검사하는 로직 (예: IsPending())이 필요합니다.
  3. 객체가 삭제될 때:

    • TSoftObjectPtr는 객체를 로드하지만 강제로 유지하지 않기 때문에, 객체가 삭제되면 다시 로드하려면 LoadSynchronous() 등을 통해 명시적으로 호출해야 합니다.

추가적으로, 이에 관련하여 참고할 수 있는 유사한 질문들이 있으니 아래 링크를 확인해 보시기 바랍니다:
- TSoftObjectPtr로 변경하여도 Weapon에셋이 로드가 됩니다.
- 소프트 레퍼런싱 관련 질문

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

충실한 전복님의 프로필 이미지
충실한 전복

작성한 질문수

질문하기