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