Multi Scene Editing
Plugins

런타임 시 리소스를 로드

어떤 상황에서는, 프로젝트에 씬의 일부로써 로드하지 않고 에셋을 사용할 수 있도록 하는 것이 편리합니다. 예를 들어, 게임의 어떤 씬에서든 등장 할수 있는 캐릭터 또는 다른 오브젝트가 있다고 가정하고, 그다지 빈번하게 나오지 않다고 합시다. (이것은 “비밀” 기능, 오류 메시지 또는 hightscore 소식 등 일 수 있습니다.). 또한 분리된 파일에서 애셋을 로드하거나 URL로 부터의 초기 다운로드 시간을 단축하거나, 게임 컨텐츠를 교체 할 수 있기를 원합니다.

Unity는 Resource Folders를 지원하여 콘텐츠가 메인 게임 파일로 제공되지만, 요청이 있을 때까지 로드하지 않을 수 있습니다. 또한, Asset Bundles를 만들 수 있습니다. 이러한 파일은 메인 게임 파일에서 완전히 분리되어, 파일 또는 URL에서 게임이 요청했을 때 액세스 할 수 있는 에셋을 포함합니다.

Asset Bundles

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

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

리소스 폴더

리소스 폴더는 빌드된 Unity Player 에셋의 집합 이지만, 반드시 인스펙터에서 어떤 게임 오브젝트가 연결되어 있는 것은 아닙니다.

리소스 폴더에 무언가 넣을 때는, 단순히 Project View에 새 폴더를 만들고 폴더 이름을 “Resources”라고 합니다. 여러 리소스 폴더를 프로젝트에 다른 형태로 배치할 수 있습니다. 이 폴더 중 하나에서 에셋을 로드하고 싶을 때, [Resources.Load()](ScriptRef : Resources.Load.html)를 호출합니다.

만약 배포 대상이 Streaming Web Player인 경우, 씬의 모든 리소스 폴더에 포함하여 정의할 수 있습니다. 이것을 Player SettingsEdit->Project Settings->Player에서 할 수 있습니다. 스트리밍 큐(Stream queue)는 Build Setting의 scene order에서 결정됩니다.

참고:

Resources 폴더에서 찾을 수 있는 모든 에셋 및 의존 관계는 resources.assets_라는 파일에 저장됩니다. 만약 에셋이 이미 다른 레벨에서 사용되는 경우, 그 레벨의 .sharedAssets_에 저장됩니다. Edit->PlayerSettings First Streamed Level 설정에 따라 resources.assets 이 모아져, 빌드에 포함할 레벨을 결정합니다.

“First streamed Level” 은 리소스 폴더의 ​​에셋을 포함하는 경우, 에셋은 그 레벨의 에셋으로 저장됩니다. 만약 나중에 포함한 경우, 그 레벨은 “resources.assets”에서 에셋을 참조합니다.

_Resources folder_에 있는 에셋만이 Resources.Load() 통해 액세스 할 수 있습니다. 그러나 종속성이 있기 때문에 더 많은 에셋이 “resources.assets”파일에 포함될 지도 모릅니다 (예를 들어 리소스 폴더의 ​​메테리얼은 Resources 폴더 외부의 텍스처를 참조하고 ​​있을지도 모릅니다).

리소스 언로드

에셋 번들의 리소스를 언로드하려면 AssetBundle.Unload()를 호출합니다. 만약 unloadAllLoadedObjectstrue를 전달하면 에셋 번들에 의해 내부적으로 유지된 오브젝트 및 AssetBundle.LoadAsset()를 호출하여 에셋 번들에서 로드된 것은 삭제되어, 번들이 사용하고 있던 메모리가 해제됩니다.

가끔 에셋 번들을 로드하는 편이 좋은 경우가 있어, 선택한 오브젝트를 인스턴스화하고 오브젝트를 남기면서 번들이 사용하는 메모리를 해제하고 ​​싶을것 입니다. 장점은 다른 작업, 예를 들면 다른 에셋 번들 로드 등을 위해 메모리를 해제합니다. 이 시나리오에서는 false를 파라미터로 전달합니다. 번들이 삭제된 후에는 거기에서 오브젝트를 로드할 수 없게 됩니다.

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

Multi Scene Editing
Plugins