인프런 커뮤니티 질문&답변
TSoftObjectPtr 를 사용했음에도, 메모리에 로드 됩니다.
해결된 질문
작성
·
91
0
UABWeaponItemData 의 WeaponMesh 의 속성을 TSoftObjectPtr 으로 변경 및 Base 에서 팬딩 대기 및 처리까지 모두 수정하였으나 최초 실행 시 여전히 검이 로드가 된 상황입니다.
혹시 몰라 코드를 아예 복붙을 하였음에도 여전합니다.
위 내용중 코드 내용에 문제가 없다면, 강의 내용중 에디터에서 무언가 제가 행위를 빼먹은 것 같은데 죄송합니다. 계속 돌려보는데 잘 찾지를 못하겠습니다.
혹 TSoftObjectPtr 을 사용할 WeaponMesh 등을 에디터에서 무언가 설정해야 할 것이 있을까요?
별도로 아주 만약 TSoftObjectPtr 가 어떠한 캐릭터를 레퍼런싱 한다고 하면 그리고 그 캐릭터가 중간에 삭제가 된다고 한다면 다시 로드해야 하는 행위가 필요할까요?
아니면 tweakobjectptr 와 다르게 TSoftObjectPtr 를 단지 디스크에서 에셋을 참조하기 위한 역활로만 사용하는 것일까요? 즉 런타임에 도중 TSoftObjectPtr 에 무언가를 할당하는 것은 안되고 단지 디스크에서 객체를 참조하는 역활인지 그것이 헷갈립니다.
퀴즈
액터 컴포넌트를 사용하여 캐릭터 스탯을 관리하는 주된 이유는 무엇일까요?
액터 자체에 모든 기능을 구현하기 위해서
스탯과 UI 로직을 분리하여 모듈성을 높이기 위해서
컴포넌트가 트랜스폼 정보를 가지기 때문에
틱 함수 없이 매 프레임 스탯을 업데이트하기 위해서
답변 2
0
아마도 실습 과정에서 이미 로딩된 상태에서 사용하느라 관련된 문의가 몇 가지 있었습니다.
에디터를 재시작하면 정상적으로 동작한 것으로 파악됩니다.
아래는 관련 질문입니다.
https://inf.run/8K95N
0
안녕하세요, 인프런 AI 인턴입니다. 충실한 전복님.
언리얼 엔진에서 TSoftObjectPtr을 사용하는 방법에 대해 문의 주셨네요. 먼저, TSoftObjectPtr은 런타임에 객체를 필요할 때 로드하여 메모리에 올리는 소프트 레퍼런스입니다. 이를 통해 처음부터 모든 에셋을 메모리에 담지 않고 필요한 시점에 로딩함으로써 초기 로딩 시간을 줄이고 메모리 사용을 최적화할 수 있습니다.
TSoftObjectPtr로 전환 후에도 에셋이 로드되는 문제:
TSoftObjectPtr을 사용하고 있음에도 불구하고 실행 시 에셋이 로드된다면, 메모리에 해당 에셋이 남아 있는 다른 이유가 있을 수 있습니다. 가장 흔한 원인은 에디터가 에셋을 캐쉬하고 있을 가능성입니다. 에디터에서 변경 사항을 반영할 때 최악의 경우 에디터 캐시를 비우거나 새로운 프로젝트를 만들어서 테스트해보는 것을 추천드립니다.
Obj List Class=SkeletalMesh로 검사할 때, 메모리에 남아 있다면 이전 게임 세션에서 캐쉬 된 것일 수 있습니다.
TSoftObjectPtr의 역할:
TSoftObjectPtr는 디스크에서 해당 에셋의 경로만을 유지하고 있으며 실제 객체는 필요 시LoadSynchronous()를 통해 로드하게 됩니다. 따라서, 에디터에서 이 포인터를 설정할 때 단순히 경로가 맞는지 확인하면 되며, 별도의 추가 설정은 필요하지 않습니다.
- 이 포인터는 약 참조의 일종으로, 참조된 에셋이 삭제된다면 다시 로드해야 하며, 안전하게 사용할 수 있도록 로드 상태를 검사하는 로직 (예:
IsPending())이 필요합니다.
객체가 삭제될 때:
TSoftObjectPtr는 객체를 로드하지만 강제로 유지하지 않기 때문에, 객체가 삭제되면 다시 로드하려면LoadSynchronous()등을 통해 명시적으로 호출해야 합니다.
추가적으로, 이에 관련하여 참고할 수 있는 유사한 질문들이 있으니 아래 링크를 확인해 보시기 바랍니다:
- TSoftObjectPtr로 변경하여도 Weapon에셋이 로드가 됩니다.
- 소프트 레퍼런싱 관련 질문
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.





