Multi-Scene editing
플러그인(Plugins)

런타임 시점의 리소스(Resources) 로드

어떤 상황에서는 씬의 일부로 로드하지 않고 프로젝트에서 사용할 수 있게 하는 것이 유용합니다. 예를 들어, 게임의 모든 씬에 등장할 수 있지만 드물게 사용되는 캐릭터 또는 기타 오브젝트가 있을 수 있습니다(이것은 “비밀” 기능, 오류 메시지 또는 하이스코어 알림일 수 있습니다). 또한, 초기 다운로드 시간을 단축하거나 게임 콘텐츠를 교체하기 위해 별도의 파일 또는 URL에서 에셋을 로드할 수 있습니다.

Unity는 프로젝트에서 Resource Folders__를 지원하여 콘텐츠가 메인 게임 파일로 제공될 수 있게 하지만, 요청이 있을 때까지 로드하지 않을 수 있습니다. 또한, Asset Bundles__를 만들 수도 있습니다. 에셋 번들은 메인 게임 파일에서 완전히 분리된 파일들로 어떤 파일이나 URL에서 요청된 게임에 의해 엑세스되는 에셋을 포함합니다.

에셋 번들(Asset Bundles)

에셋 번들은 에셋의 외부 컬렉션입니다. 여러 개의 에셋 번들을 가질 수 있기 때문에 다른 에셋의 외부 컬렉션도 다수 가질 수 있습니다. 이러한 파일은 빌드된 Unity 플레이어의 외부에 존재하기 때문에 일반적으로 웹 서버에 있으며, 최종 사용자가 동적으로 액세스할 수 있습니다.

에셋 번들을 빌드하려면, 에디터 스크립트에서 BuildPipeline.BuildAssetBundles()를 호출해야 합니다. 인수에서 빌드된 파일에 포함된 Objects 배열을 다른 옵션과 함께 지정합니다. 이렇게 하면 추후 런타임에서 AssetBundle.LoadAsset()을 사용하여 동적으로 로드할 수 있는 파일을 빌드할 수 있습니다.

리소스 폴더(Resource Folders)

리소스 폴더는 빌드된 Unity 플레이어의 에셋 컬렉션이지만, 인스펙터에서 어떤 게임 오브젝트와 반드시 연결되어야 하는 것은 아닙니다.

리소스 폴더에 무언가를 넣으려면 __Project View__에 새 폴더를 만들고 폴더 이름을 “Resources”로 명해야 합니다. 프로젝트에 여러 리소스 폴더를 다른 형태로 배치할 수 있습니다. 폴더 중 하나에서 에셋을 로드하고 싶다면 Resources.Load()를 호출해야 합니다.

참고

Resources 폴더의 모든 에셋 및 종속성은 resources.assets_이라는 파일에 저장됩니다. 에셋이 이미 다른 레벨에서 사용되는 경우 해당 레벨의 .sharedAssets_에 저장됩니다. Edit -> PlayerSettings First Streamed Level 설정에 따라 _resources.assets_가 모아져 빌드에 포함될 레벨을 결정합니다.

“First streamed Level”보다 이전 레벨이 Resource 폴더의 ​​에셋을 포함하는 경우, 에셋은 해당 레벨의 에셋으로 저장됩니다. 이후에 포함될 경우 해당 레벨은 “resources.assets”의 에셋을 레퍼런스합니다.

_Resources 폴더_에 있는 에셋만이 Resources.Load()를 통해 액세스될 수 있습니다. 그러나 종속성을 지니고 있으면 더 많은 에셋이 “resources.assets” 파일에 포함될 수 있습니다(예를 들어, Resources 폴더의 ​​머티리얼은 Resources 폴더 외부의 텍스처를 레퍼런스할 수 있습니다).

리소스 언로드(Resource Unloading)

AssetBundle.Unload()를 호출해서 에셋 번들의 리소스를 언로드할 수 있습니다. unloadAllLoadedObjects 파라미터에 __true__을 전달하면 에셋 번들에서 내부적으로 보유한 오브젝트와 AssetBundle.LoadAsset()을 사용하여 에셋 번들에서 로드된 오브젝트가 모두 삭제되고 번들에 의해 사용된 메모리가 릴리스됩니다.

에셋 번들을 로드한 후 원하는 오브젝트를 인스턴스화하고 오브젝트를 유지하면서 번들이 사용하던 메모리를 해제하고 싶은 경우가 있습니다. 다른 에셋 번들을 위한 인스턴스 로드 등, 다른 작업을 위한 메모리를 비울 수 있다는 게 장점입니다. 이 경우 파라미터에 __false__을 전달해야 합니다. 번들이 삭제된 후에는 해당 번들에서 오브젝트를 로드할 수 없게 됩니다.

다른 레벨을 로드하기 전에 Resources.Load()를 사용하여 로드한 씬의 오브젝트를 삭제하려면 Object.Destroy()를 호출해야 합니다. 에셋을 해제하려면 Resources.UnloadUnusedAssets()를 사용해야 합니다..

Multi-Scene editing
플러그인(Plugins)