TransformInternalId
Returns
string
A transformation of a given location to a potentially different location used at runtime.
Description
string Addressables.ResourceManager.TransformInternalId(IResourceLocation)
is a function that Addressables uses when evaluating internal IDs. You can also manually pass in an IResourceLocation and return an ID based on a transformation function you specify. You can specify the transformation used by the ResourceManager
by assigning a Func<IResourceLocation, string>
to Addressables.ResourceManager.InternalIdTransformFunc
. If no InternalIdTransformFunc
is available, then the IResourceLocation.InternalId
is returned. IResourceLocation.InternalId
is the default location assigned to an IResourceLocation
at build time to locate an asset.
Using TransformInternalId
grants a fair amount of flexability, especially in regards to remote hosting. Given a single IResourceLocation, you can transform the ID to point towards a server specified at runtime. This is particularly useful if your server IP address changes or to point at different servers for variant purposes.
If Addressables.ResourceManager.InternalIdTransformFunc
is not assigned to or is assigned null
, then the IResourceLocation.InternalId
is used by ResourceManager
without passing any transformation.
You do not need to call TransformInternalId
manually in order for ResourceManager
to use it.
See ResourceManager
) for its full API documentation.
Code Sample
void Start()
{
Addressables.ResourceManager.InternalIdTransformFunc = TransformFunc;
}
string TransformFunc(IResourceLocation location)
{
//Implement a method that gets the base url for a given location
string baseUrl = GetBaseURL(location);
//Get the url you want to use to point to your current server
string currentUrlToUse = GetCurrentURL();
return location.InternalId.Replace(baseUrl, currentUrlToUse);
}
In the above code sample, GetBaseURL
and GetCurrentURL
can be any solution you find appropriate for your project; these are not methods implemented in Addressables. The former can be your solution for acquiring the IP/url that was used at build time in the project and will be part of the IResourceLocation.InternalId
. The latter can be your solution to get a server that points to your new server IP/url or specifc variant/themed/scaled content.
void Start()
{
Addressables.ResourceManager.InternalIdTransformFunc = TransformFunc;
}
string TransformFunc(IResourceLocation location)
{
if(location.PrimaryKey.Contains("background") && MyQualityCheck.Resolution == Res.Low)
return location.InternalId.Replace("background", "bkg_low");
return irl.InternalId;
}
This example shows how you could use information provided from the IResourceLocation
among other settings to transform the IResourceLocation.InternalId
.
These are, of course, only a basic examples of the possibilities provided by assigning a custom implementation to Addressables.ResourceManager.InternalIdTransformFunc
.
Pitfalls
If your first loads point to the wrong server, ensure that you assign Addressables.ResourceManager.InternalIdTransformFunc
to your desired transform function prior to initiating your operation.