{!See https://docs.google.com/document/d/1takg_GmIBBKKTj-GHZCwzxohpQz7Bhekivkk72kYMtE/edit for reference implementation of OneTrust, dataLayer and GTM} {!OneTrust Cookies Consent} {!OneTrust Cookies Consent end} {!dataLayer initialization push} {!dataLayer initialization push end} {!Google Tag Manager} {!Google Tag Manager end} 메모리 관리 개요 | Addressables | 1.21.17
docs.unity3d.com
"{0}"의 검색 결과

    목차 표시/숨기기

    메모리 관리 개요

    어드레서블 시스템은 에셋과 번들을 로드하는 데 사용하는 메모리를 관리하기 위해 로드하는 모든 항목의 레퍼런스 수를 유지합니다.

    Unity가 어드레서블을 로드하면 시스템은 레퍼런스 수를 증분합니다. Unity가 에셋을 해제하면 시스템은 레퍼런스 수를 줄입니다. 어드레서블의 레퍼런스 수가 0으로 돌아오면 언로드할 수 있습니다. 어드레서블 에셋을 명시적으로 로드한 경우, 사용을 완료하고 나면 에셋도 해제해야 합니다.

    메모리 누수

    에셋이 더 이상 필요하지 않은 후에도 메모리에 남아 있는 메모리 누수를 방지하려면 로드 메서드에 대한 모든 호출을 해제 메서드에 대한 호출로 미러링하십시오. 에셋 인스턴스 자체에 대한 레퍼런스 또는 원래 로드 작업이 반환하는 결과 핸들을 사용하여 에셋을 해제할 수 있습니다.

    하지만 Unity는 해제된 에셋을 메모리에서 즉시 언로드하지 않습니다. 에셋이 사용하는 메모리는 해당 에셋이 속한 에셋 번들도 언로드될 때까지 해제되지 않습니다. 해제된 에셋을 언로드하기 위해 Resources.UnloadUnusedAssets를 호출할 수 있지만, 느린 작업 속도로 인해 프레임 속도가 저하될 수 있습니다.

    에셋 번들에는 고유한 레퍼런스 수가 있으며, 시스템에서는 종속성으로 포함된 에셋을 사용하여 에셋 번들을 어드레서블처럼 처리합니다. 번들에서 에셋을 로드하면 번들의 레퍼런스 수가 증가하고, 에셋을 해제하면 번들 레퍼런스 수가 감소합니다. 번들의 레퍼런스 수가 0으로 돌아간다는 것은 번들에 포함된 에셋 중 사용 중인 에셋이 없다는 의미입니다. 그러면 Unity는 번들과 번들에 포함된 모든 에셋을 메모리에서 언로드합니다.

    프로파일러 모듈을 사용하여 로드된 콘텐츠를 모니터링합니다. 이 모듈은 에셋과 해당 종속성이 로드 및 언로드될 때 이를 표시합니다.

    메모리 정리

    에셋이 더 이상 참조되지 않는다고 해서(프로파일러 모듈에 비활성화된 텍스트와 해제된 상태로 표시) Unity가 해당 에셋을 언로드했다는 의미는 아닙니다. 일반적으로 해당되는 시나리오는 에셋 번들에 여러 에셋이 포함된 경우입니다. 예제:

    • 에셋 번들(stuff)에 세 개의 에셋(tree, tank, cow)이 있습니다.
    • tree가 로드되면 프로파일러에 tree, stuff에 대한 단일 레퍼런스 수가 각각 표시됩니다.
    • 나중에 tank가 로드되면 프로파일러는 tree 및 tank 모두에 대한 단일 레퍼런스 수를 표시하고, stuff 에셋 번들에 대해서는 두 개의 레퍼런스 수를 표시합니다.
    • tree를 해제하면 해당 레퍼런스 수가 0이 되고 파란색 막대가 사라집니다.

    이 예제에서 tree 에셋은 현재 언로드되지 않았습니다. 에셋 번들 또는 일부 콘텐츠는 로드할 수 있지만 에셋 번들의 일부는 언로드할 수 없습니다. 에셋 번들이 언로드될 때까지 stuff에 있는 에셋은 언로드되지 않습니다.

    이 규칙의 예외는 엔진 인터페이스 Resources.UnloadUnusedAssets입니다. 앞의 예제에서 이 메서드를 실행하면 tree가 언로드됩니다. 어드레서블 시스템은 이러한 이벤트를 인식하지 못하므로 프로파일러 그래프에는 어드레서블 레퍼런스 수만 반영됩니다(메모리 내 데이터는 반영되지 않음). Resources.UnloadUnusedAssets를 사용하는 경우 작업 속도가 느려지므로 로드 화면과 같이 오류가 표시되지 않는 화면에서만 호출해야 합니다.

    에셋 이탈 방지

    에셋 이탈은 에셋 번들의 마지막 항목인 오브젝트를 해제한 다음 해당 에셋이나 번들의 다른 에셋을 즉시 리로드하는 경우에 발생합니다.

    예를 들어, 텍스처를 공유하는 두 개의 머티리얼인 boat와 plane이 있고, 자체 에셋 번들에 cammo가 있다고 가정해 보겠습니다. 레벨 1은 boat를 사용하고 레벨 2는 plane을 사용합니다. 레벨 1을 종료하면 Unity는 boat를 해제하고 즉시 plane을 로드합니다. Unity가 boat를 해제하면 어드레서블은 텍스처 cammo를 언로드합니다. 그런 다음 Unity가 plane을 로드하면 어드레서블은 즉시 cammo를 리로드합니다.

    프로파일러 모듈을 사용하면 에셋 로드 및 언로드를 모니터링하여 에셋 이탈을 감지할 수 있습니다.

    문서 개요
    맨 위로
    Copyright © 2023 Unity Technologies — 상표 및 이용약관
    • 법률정보
    • 개인정보처리방침
    • 쿠키
    • 내 개인정보 판매 금지
    • Your Privacy Choices (Cookie Settings)