UClass* AssetClass = LoadClass<UUserWidget>(GetWorld(), TEXT("/Game/BlueHUDWidget.BlueHUDWidget_C"));
UUserWidget* NewWidget = CreateWidget(GetWorld(), AssetClass);
NewWidget->AddToViewport();
UUserWidget* NewWidget = CreateWidget(GetWorld(), AssetClass);
NewWidget->AddToViewport();
에디터에선 되는데 왜 Shipping 에서 안되지,,
에셋 패키징하는 과정이 추가로 있나,,?
프로젝트 세팅 > 프로젝트 > 패키징 > 고급 > 쿠킹할 추가 에셋 디렉터리 > /콘텐츠 디렉토리 추가 이거 하니까 되는데, 원래 콘텐츠 폴더 하위는 알아서 다 패키징 되는거 아니었어?
아니요 그러면 에셋산거 Import 하믄 데모씬 같은거 잔뜩 딸려오는데 그런 에셋들도 다 패키징 될거같아요 Additional Asset Directories to Cook 에 Game 통째로 박는게 그리 좋은 생각은 아닌거같아요 제가 c++쪽 잘 모르지만 어떻게 TSubclass 이런걸로 받아서 자동 추적되게 하는게 맞지 않을까 싶음
음 그러면 프로젝트 내에 그런 에셋들을 지우는 편이 낫지 않을까요? 아니면 "쿠킹하지 않을 디렉토리" 옵션도 있어서 이걸로 대응해도 될 것 같구여
의구심이 드는건, 왜 디폴트 설정으로 쿠킹 디렉토리가 지정이 안되있냐는 부분,,,
UProperty로 tsoftclassptr를 받아서 에디터에서 BlueHUDWidget을 설정하면 컨텐츠 디렉토리를 전부 때려박지 않아도 자동으로 추적해주지 않을까? 라는 예상이있음
게임에서 쓰지도 않는거 다 넣으면 용량이 넘 많으니까 그런거 아닐까요
아,, 언리얼을 시작한지 별로안돼서 UPROPERTY 나 블루프린트 같은걸로 참조하면 엔진측에서 인식해서 알아서 패키징해줄수 있단거죠? 음 그런데 항상 그런식으로 에셋을 참조하는게 아니라 PATH 를 통해 로드해야하는 부분도 있다보니 그건 어렵지 않을까 싶긴하네요 ㅠ
저도 얼마 안됐어요! 딱 1년째. 이리 말하다보면 더 잘아시는분이 답 달아주실거라 믿음
믿습니다~
제가 마침 게임업계 갤에서 5년차 언리얼 고수가 무엇이든 물어보라길래 정석 알려달라고 물어봄
https://gall.dcinside.com/mgallery/board/view/?id=gamejob&no=31986
답이 달림!
무슨일이 있었는지 글삭되었는데쿠킹에 포함시키려면 Primary Asset 이거나, 얘로부터 레퍼런스 UPROPERTY 가 있거나, 명시적으로 (프로젝트 세팅) 쿠킹에 포함을 시켜야 함 추가적인 정보가 궁금하면 Asset Management, Primary / Secondary Asset 이런걸로 검색해봐 보통 저런 LoadAsset 같은 식으로 로드 안하고, 직접적으로 TObjectPtr 같은 걸로 에셋을 레퍼런싱 하는게 언리얼 권장 사항이야. 만약 로드 시점을 조절하고 싶으면 TSoftObjectPtr 쓰고라고하심
땡큐 배워갑니당
내가 잘못 알고 있을 수도 있는데 패키징할 때 맵을 기준으로 해서 맵에서 참조 안하고 맵의 월드 세팅에서도 참조를 안하면 패키징에 포함 안되는 걸로 알고 있어. 소프트 참조는 경로만 문자열로 저장하는 걸로 알고 있고. 또 중요한건 맵을 기준으로 모든 참조를 패키징하기 때문에 같은 에셋이 각 맵들에 중복으로 저장되서 용량이 급격하게 늘어난다는 거야. 그래서 중복되지 않게 가능한 소프트 참조로 바꿔 본적도 있는데 로딩이 미친듯이 느려지고 스터터링이 엄청 심해져서 원래대로 돌려놨어.
글 작성자인데, 소프트 참조로 인해 로딩이 느려진 이유는 동적으로 많은 에셋을 로드하려고 해서인가??
내 경험으로는 초보자가 구현하듯 c++ 에서 포인터 변수 선언하고 상속받은 블루프린트에서 참조를 설정해주는게 가장 빨랐어. 노트북의 느린 hdd 에서 돌렸을때 확 체감이 오더라고. 그래서 오히려 처음 배우던 시절의 코딩으로 다시 돌아가는 아이러니가 ㅎㅎ