씬 로드
Addressables.LoadSceneAsync
메서드를 사용하면 주소 또는 기타 어드레서블 키 오브젝트로 어드레서블 씬 에셋을 로드할 수 있습니다.
Addressables.LoadSceneAsync
는 내부적으로 Unity 엔진 SceneManager.LoadSceneAsync
메서드를 사용합니다. SceneManager.LoadSceneAsync
의 동작에 영향을 미치는 API는 Addressables.LoadSceneAsync
에도 동일한 방식으로 영향을 미칩니다(예: Application.backgroundLoadingPriority
).
Addressables.LoadSceneAsync
메서드의 나머지 파라미터는 SceneManager.LoadSceneAsync
메서드와 함께 사용되는 파라미터에 해당합니다.
loadMode
: 로드된 씬을 현재 씬에 추가할지, 아니면 현재 씬을 언로드 및 교체할지 여부입니다.loadSceneParameters
:loadMode
및localPhysicsMode
를 포함합니다. 씬을 로드할 때 2D 또는 3D 물리 씬을 생성할지 여부를 지정하는 데 사용됩니다.activateOnLoad
: 로드가 완료되는 즉시 씬을 활성화할지, 아니면SceneInstance
오브젝트의ActivateAsync
메서드를 호출할 때까지 기다릴지 여부입니다.AsyncOperation.allowSceneActivation
옵션에 해당합니다. 기본값은 true입니다.priority
: 씬을 로드하는 데 사용되는AsyncOperation
의 우선순위입니다.AsyncOperation.priority
옵션에 해당합니다. 기본값은 100입니다.
[!경고]
activateOnLoad
파라미터를 false로 설정하면 씬을 활성화할 때까지 다른 어드레서블 에셋의 로딩을 포함한AsyncOperation
대기열이 차단됩니다. 씬을 활성화하려면LoadSceneAsync
에 의해 반환된SceneInstance
의ActivateAsync
메서드를 호출합니다. 자세한 내용은 AsyncOperation.allowSceneActivation을 참조하십시오.
다음 예제에서는 씬을 가산적으로 로드합니다. 씬을 로드하는 컴포넌트는 작업 핸들을 저장하고 부모 게임 오브젝트가 파괴될 때 이를 사용하여 씬을 언로드 및 해제합니다.
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;
using UnityEngine.ResourceManagement.ResourceProviders;
using UnityEngine.SceneManagement;
internal class LoadSceneByAddress : MonoBehaviour
{
public string key; // address string
private AsyncOperationHandle<SceneInstance> loadHandle;
void Start()
{
loadHandle = Addressables.LoadSceneAsync(key, LoadSceneMode.Additive);
}
void OnDestroy()
{
Addressables.UnloadSceneAsync(loadHandle);
}
}
추가 예제는 Addressables-Sample 저장소의 Scene Loading 프로젝트를 참조하십시오.
LoadSceneMode.Single
을 사용하여 씬을 로드하면, Unity 런타임은 현재 씬을 언로드하고 Resources.UnloadUnusedAssets
를 호출합니다. 자세한 내용은 어드레서블 에셋 해제를 참조하십시오.
[!참고] 에디터에서는 현재 프로젝트에서 언제든지 씬을 로드할 수 있습니다. 씬이 사용 불가능한 원격 번들에 패키징되어 있고 Play Mode Script를 Use Existing Build 로 설정한 경우에도 마찬가지입니다. 에디터는 에셋 데이터베이스를 사용하여 씬을 로드합니다.
씬에서 어드레서블 사용
씬이 어드레서블인 경우 다른 에셋과 마찬가지로 씬에서 어드레서블 에셋을 사용할 수 있습니다. 씬에 프리팹 및 기타 에셋을 배치하고 컴포넌트 프로퍼티에 에셋을 할당할 수 있습니다. 어드레서블이 아닌 에셋을 사용하면 해당 에셋은 씬의 암시적 종속 관계가 되며, 빌드 시스템은 콘텐츠 빌드 시 씬과 동일한 에셋 번들에 해당 에셋을 패킹합니다. 어드레서블 에셋은 해당 에셋이 속한 그룹에 따라 자체 에셋 번들에 패킹됩니다.
[!참고] 두 곳 이상에서 사용되는 암시적 종속성은 여러 에셋 번들과 빌트인 씬 데이터에서 중복될 수 있습니다. 빌드 레이아웃 보고서를 사용하여 프로젝트 콘텐츠 구성으로 인해 원치 않게 발생하는 에셋 중복을 식별하고 해결하십시오.
씬이 어드레서블이 아닌 경우 씬 계층 구조에 직접 추가한 어드레서블 에셋은 암시적 종속성이 되며, 해당 에셋이 어드레서블 그룹에도 존재하더라도 Unity는 빌트인 씬 데이터에 해당 에셋의 사본을 포함합니다. 씬의 게임 오브젝트에서 컴포넌트에 할당된 머티리얼과 같은 에셋도 마찬가지입니다.
커스텀 컴포넌트 클래스에서는 AssetReference
필드를 사용하여 어드레서블 에셋이 비 어드레서블 씬에 할당되도록 허용할 수 있습니다. 그렇지 않으면 주소 및 레이블을 사용하여 런타임에 스크립트에서 에셋을 로드할 수 있습니다. 씬이 어드레서블인지 여부에 관계 없이 코드에 AssetReference
를 로드해야 합니다.