해결된 질문
작성
·
22
0
ItemData 의 경우, 코드 상에서 경로로 읽어오는 것이라고는 하나 ItemData 의 경우 에셋매니저에 등록되어 에셋매니저의 Primary 키값으로 가져옵니다.
반면 Box 와 같은 스태택 메쉬, 입력맵핑, 애님 몽타주 등은 코드 상 텍스트로 불러오는데요.
그냥 보았을때는 텍스트로 코드상에 직접 경로를 추가하여 불러오는 객체들의 경로(폴더)를 지정해야 할 것 같은데
반대로 에셋매니저를 통해 불러오는 아이템데이터만 쿠킹경로에 별도로 추가하였습니다.
이유를 알 수 있을까요?
기본적으로 빌드시, 맵에 대한 정보를 기본적으로 가져온다고 멘트하였는데 맵에는 또 위의 입력맵핑, 애님 몽타주 등은 없는 것 같은데.. 게임모드->게임플레이어컨트롤러->캐릭터 등등 하여 코드상 참조된 코드들의 FClassFinder, FObjectFinder 혹은 TSubclassOf, T(F)SoftObjectPtr 을 엔진이 알아서 알아내고 빌드시 추가되는 것인지 궁금합니다.
답변 2
0
네 애셋이라 함은 특정 클래스의 인스턴스를 시리얼라이즈하여 보관한 데이터입니다. 이는 언리얼 엔진이 지정한 경로 규칙에 1:1로 매핑됩니다.
우리가 레벨에 배치하는 애셋들은 기본적으로 레벨을 최상위 부모로하는 연결관계(Dependency)가 명확하게 파악됩니다. 그래서 굳이 쿠킹할 폴더를 지정할 필요가 없습니다. 어디 있는지 이미 다 알기 때문이죠.
하지만 애셋 매니저에 텍스트 경로로 등록해, 코드에서 런타임으로 로딩되는 애셋은 레벨입장에서는 미리 알 길이 없습니다.
최종 게임 패키지는 에디터에 등록된 전체 애셋 중 진짜 사용하는 것만 간추려야 하기에, 이를 수동으로 지정해준다고 이해해주시면 되겠습니다.
0
안녕하세요, 인프런 AI 인턴입니다. 충실한 전복님께서 질문해주신 언리얼 엔진의 쿠킹 과정과 관련된 부분에 대해 설명드리겠습니다.
언리얼 엔진은 게임을 빌드할 때 사용하는 리소스를 수집하여 패키징합니다. 이 때 에셋이 맵에 직접 배치되었거나, 코드 상에서 직접 참조되고 있다면 자동으로 쿠킹(target platform에 맞게 자원을 미리 변환) 되지만, 그렇지 않은 경우에는 패키지에 포함되지 않을 수 있습니다.
에셋 매니저(Asset Manager)를 사용하여 에셋을 관리하는 경우, 에셋의 사용 여부에 관계없이 명시적으로 사용한다고 선언해야 합니다. 그래서 경로를 지정하는데요, 이는 에셋 매니저가 각 에셋을 동적으로 로드할 때, 쿠킹 프로세스에 포함되도록 명시해주는 역할을 합니다. 만약 지정하지 않으면 실행시 애셋이 없다는 오류를 볼 수도 있습니다.
FClassFinder, FObjectFinder 등으로 코드에서 경로를 직접 사용해 참조된 애셋들은 패키징 시 자동으로 포함됩니다.이러한 이유로, 에셋 매니저로 관리하는 에셋이나 동적으로 로드할 필요가 있는 애셋들은 쿠킹 경로에 추가하여 패키징 시 꼭 포함되도록 하여야 합니다. 이는 게임 실행 시 누락에 의한 에러를 방지하는 중요한 단계입니다.
관련된 심층적인 이해를 돕기 위한 덧붙임 자료로, 다음 링크도 추천드립니다:
- Unreal Engine Docs: Managing Your Game’s Assets
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.