리소스 URL 변경
다음과 같은 방법으로 어드레서블이 런타임에 에셋을 로드하는 데 사용하는 URL을 수정할 수 있습니다.
정적 프로파일 변수
RemoteLoadPath 프로파일 변수를 정의할 때 정적 프로퍼티를 사용하여 카탈로그, 카탈로그 해시 파일, 에셋 번들 등 애플리케이션에서 원격 콘텐츠를 로드하는 URL의 전체 또는 일부를 지정할 수 있습니다. 프로파일 변수에 프로퍼티 이름을 지정하는 방법에 대한 자세한 내용은 프로파일 변수 구문을 참조하십시오.
정적 프로퍼티의 값은 어드레서블이 초기화되기 전에 설정해야 합니다. 초기화 후에 값을 변경하면 효과가 없습니다.
ID 변환 메서드
Addressables.ResourceManager
오브젝트의 InternalIdTransformFunc
프로퍼티에 메서드를 할당하여 어드레서블에서 에셋을 로드하는 URL을 개별적으로 변경할 수 있습니다. 관련 작업이 시작되기 전에 메서드를 할당해야 하며, 그렇지 않으면 기본 URL이 사용됩니다.
TransformInternalId
를 사용하면 원격 호스팅에 유용합니다. 하나의 IResourceLocation
이 주어지면 런타임에 지정된 서버를 가리키도록 ID를 변환할 수 있습니다. 이는 서버 IP 주소가 변경되거나 애플리케이션 에셋의 다른 배리언트를 제공하기 위해 다른 URL을 사용하는 경우에 유용합니다.
ResourceManager
는 에셋을 조회할 때 TransformInternalId
메서드를 호출하여 해당 에셋에 대한 IResourceLocation
인스턴스를 메서드에 전달합니다. IResourceLocation
의 InternalId
프로퍼티를 변경하고 수정된 오브젝트를 ResourceManager
에 반환할 수 있습니다.
다음 예시는 에셋 번들의 모든 URL에 쿼리 문자열을 추가하는 방법을 보여 줍니다.
using UnityEngine.ResourceManagement.ResourceLocations;
using UnityEngine.ResourceManagement.ResourceProviders;
using UnityEngine.AddressableAssets;
static class IDTransformer
{
//Implement a method to transform the internal ids of locations
static string MyCustomTransform(IResourceLocation location)
{
if (location.ResourceType == typeof(IAssetBundleResource)
&& location.InternalId.StartsWith("http", System.StringComparison.Ordinal))
return location.InternalId + "?customQueryTag=customQueryValue";
return location.InternalId;
}
//Override the Addressables transform method with your custom method.
//This can be set to null to revert to default behavior.
[RuntimeInitializeOnLoadMethod]
static void SetInternalIdTransform()
{
Addressables.InternalIdTransformFunc = MyCustomTransform;
}
}
WebRequest 오버라이드
메서드를 Addressable
오브젝트의 WebRestOverride
프로퍼티에 할당하여 에셋 번들 또는 카탈로그 .json 파일과 같은 파일의 다운로드에 사용되는 UnityWebRest
를 개별적으로 변경할 수 있습니다. 관련 작업이 시작되기 전에 메서드를 할당해야 하며, 그렇지 않으면 기본 UnityWebRequest
가 사용됩니다.
ResourceManager
는 UnityWebRequest.SendWebRest
를 호출하기 전에 WebRequestOverride
를 호출하고 다운로드에 대한 UnityWebRequest를 메서드에 전달합니다.
다음 예시는 에셋 번들 및 카탈로그의 모든 URL에 쿼리 문자열을 추가하는 방법을 보여 줍니다.
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.AddressableAssets;
internal class WebRequestOverride : MonoBehaviour
{
//Register to override WebRequests Addressables creates to download
private void Start()
{
Addressables.WebRequestOverride = EditWebRequestURL;
}
//Override the url of the WebRequest, the request passed to the method is what would be used as standard by Addressables.
private void EditWebRequestURL(UnityWebRequest request)
{
if (request.url.EndsWith(".bundle", StringComparison.OrdinalIgnoreCase))
request.url = request.url + "?customQueryTag=customQueryValue";
else if (request.url.EndsWith(".json", StringComparison.OrdinalIgnoreCase) || request.url.EndsWith(".hash", StringComparison.OrdinalIgnoreCase))
request.url = request.url + "?customQueryTag=customQueryValue";
}
}