해결된 질문
작성
·
44
0
안녕하세요. 현재 프로젝트 진행중이라 강의를 잠시 쉬고 있지만 정말 큰 도움을 받아서 감사드립니다. ^^여쭤보고 싶은게 있어서요.
강의 외 질문이 있어서. 여쭤봅니다.
Resources폴더에 scriptable파일을 15개 정도 두고 게임을 진행했는데
Resources.LoadAll이 함수에서 계속 걸려서 앞으로 나가지를 못하네요.
왜이렇게 시간이 걸리는건지?? 구글링 해 보니 대규모 프로젝트에서는 addressable을 많이 사용한다는데 파일 15개정도를 로드하는 것을 대규모라고 볼 수는 없을 것 같은데요. 조언 구합니다.
답변 2
0
안녕하세요! 강의가 도움이 되었다니 정말 기쁩니다 😊
말씀하신 상황에 대해 설명드리면, Resources.LoadAll이 반드시 파일 개수만으로 느려지는 건 아닙니다. 내부적으로 동기 방식으로 작동하기 때문에, 로드되는 에셋의 크기나 복잡도, 스크립터블 오브젝트가 참조하고 있는 다른 에셋들, 그리고 실행 시점 등에 따라 일시적으로 멈춘 것처럼 보일 수도 있습니다.
15개 정도의 ScriptableObject라면 대규모는 아니지만, 다음 사항들을 체크해 보시는 걸 권장드립니다:
ScriptableObject 내부에서 다른 에셋(예: 프리팹, 텍스처 등)을 참조하고 있지 않은지
-> 의존성이 많으면 로드 시간이 증가할 수 있습니다.
로드 시점이 게임 실행 직후인지
-> Unity는 초기 로딩 중 GC(가비지 컬렉션)나 기타 시스템 작업으로 인해 순간적으로 멈출 수 있습니다.
에디터에서는 괜찮은데 빌드에서는 느린 경우
-> 빌드 후에는 Resources 폴더가 하나의 압축된 번들로 처리되므로, 압축 해제 시간이나 디스크 I/O 영향도 있습니다.
말씀하신 것처럼 Addressables는 대규모 프로젝트에 유리하지만, 소규모라 해도 비동기 로딩, 메모리 관리, 리소스 분리 같은 장점이 있어, 시간이 되시면 점차 도입을 고려해보셔도 좋습니다.
일단 당장 해결을 원하신다면:
Resources.LoadAll이 호출되는 시점을 Start()가 아닌 Coroutine에서 yield return null 이후에 호출해보시거나,
Resources.Load로 하나씩 필요한 데이터만 로드하는 방식도 고려해보시면 좋습니다.
0
안녕하세요, 인프런 AI 인턴입니다. 양승근님.
Resources.LoadAll을 사용할 때 성능이 저하되는 문제로 인해 걱정이 많으셨을 것 같습니다. 이유와 해결책을 간단히 설명드리겠습니다.
Resources.LoadAll은 Resources 폴더 안의 모든 자원을 메모리에 로드합니다. 이 과정에서 시간이 걸릴 수 있으며, 특히 더 많은 파일이 있거나 파일의 크기가 큰 경우 성능에 영향을 줄 수 있습니다.
스크립터블 오브젝트가 많지 않더라도, 로드할 때 Resources 폴더 구조를 탐색하고 파일을 즉시 메모리에 로드하는 과정 때문에 시간이 걸릴 수 있습니다.
파일 최적화:
Addressable 사용 고려:
로드 방법 최적화:
Addressables는 처음 사용할 때 복잡해 보일 수 있지만, 자원의 관리를 효율적으로 할 수 있는 방법이기 때문에 한 번 학습하고 적용해 보시면 장기적으로 큰 도움이 될 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
답변 감사합니다.
파이에 베이스에서 로그인하고 난 다음 Resources함수를 호출하는데요. 어쩌다 될 때도 있는데 딱 뻗어버리는 경우나 더 많아서 어찌해야 하나 고민하고 있습니다. 한번 시점 변화를 줘 보겠습니다.