Addressables are here!

The Addressable Asset System is an 18.2 Package that includes Addressable Assets, Resource Manager, and the Scriptable Build Pipeline. Addressables provide an easy way to load assets by “address”, handling asset management overhead and simplifying content pack creation & deployment.

Once an asset is marked “addressable”, the addressable asset can be called from anywhere. Whether that addressable asset resides in the local player or on a content delivery network, the system will locate and return it. You can load a single addressable via its address or load many addressables using a customized group label that you define. Check out the Addressable Asset System - Getting Started for details on how to get up and running!

Attending Unite Berlin? Come see our talk: New Addressable Asset System for Speed and Performance - Tuesday June 19th @ 9am in Breakout 2.

14 Likes

Interested in checking out the New Addressable Asset System for Speed and Performance talk from Unite Berlin?

The New Addressable Asset System for Speed and Performance is the first video (1 hour). Check it out!

Here is a YouTube video of all of the sessions,
Unite Berlin - Day 1 Sessions Livestream.

at about 3:50, he says something along the lines of “you can restrict which types of assets go in there”. Do you have any information on that? I can’t spot anything in the docs.

This looks really great, I’ve been excited about it since you first announced it.

Hi Baste, we have no docs for this yet :(, but I’ll give a short description here. There are currently two main restrictions possible. Type and Label. Label meaning, it’ll only accept things that are already addressable and have a given label. Type meaning, they match a type. Due to serialization limitations, the type restriction can’t be done as a template, but is done through specific classes (such as AssetReferenceGameObject). Take a look at the package code in Runtime/AssetReference.cs for more info.

1 Like

Hey,

This is a great looking system, however I am having trouble to understand how a particular case I have will work.
Is it possible to have an addressable asset packed with the build (streaming assets) and also have it remote at the same time?
In case the online content is updated it should download those bundles instead of the streaming assets one.

If it is possible, how can I achieve that? because it seems I can only configure it to either be local or remote but not both.

There are two ways to solve this. One could be be to create a custom group processor and custom provider. The group would just inherit from the standard remote one, and do a post-build copy of the bundles so they are in both places. The provider would do a runtime check to see if local matches remote, and download remote if not.

That isn’t our intended solution to this problem however. In this system we have a content catalog that maps all addresses to assets. Our system already handles checking to see if a newer catalog is on a remote server. So our intended solution here is to have your initial build only contain the data locally. Then, on update you would move your changed assets to be remote. The new catalog would have all those addresses point to the remote bundle(s) instead of the local. This can be done manually today. We intend to add a feature in the future that would automatically compare updates against the published build and detect “local assets have changed” so you can safely update.

Thanks for your input,
Bill

1 Like

Very nice work! This new system is so much better than using AssetBundles. I wonder if it can solve this?

Imagine a compiled/built game and a second project called “Game SDK”. The SDK project would contain a few useful editor scripts that make is easy to create mods.

(I’ve already experimented a bit) For the SDK I’ve added a “Local packed content” with a simple text file in it. Once the SDK project is compiled, there appear four new files in the StreamedAssets folder:

catalog_1.hash
catalog_1.json
mypackage.bundle
defaultlocalgroup.bundle

However I can’t simply copy them over to my game as there already exist files under the same names. So I tried renaming the index(?) suffix from “1” to “2” and ignore the defaultlocalgroup (as it’s empty anyway) but it doesn’t work. IAsyncOperation finishes with status code “Failed”.

What should I do?

Hi,

  1. are Addressables able to operate with scenes? When moving the game-player through different areas of the game-world I currently load several sceens that contain geo, colliders and textures asynchronously in real time.

If yes, and Addressables = sceens are stored with the build locally, do I have any loading or performance advantage in this case… instead of loading scenes in the common asynchronous way?

Win PC builds.
2) Does the Addressables use any security system by default?
A) Think about to infiltrate the data stream by wire shark https://www.wireshark.org/ to manipulate the addressable package while send to or receive from the server. Perhaps receiving a Addressable data package that compares the user serial with serials on the server, or counting how often the user have installed the player. Or to prevent manipulate game content for league multiplayer games?

Further when downloading an Addressable package from the remote server, is there any way to define a login on the remote server to prevent flooding by hackers using the same address from where the package has downloaded?

  1. Would it possible to send Addressable packages to a server as well? Eg game stats? User build content? The most games store their user stats to the company game server.

  2. Is there any API to build Addressable packages by script and send to a remote server at run time? And load them back on requirement?

Thank you.

1 Like

Why is Host button is missing from the 0.1.2 editor, also I cannot build because the build button is grayed out.

edit:
ok…

1 Like

Hey.

How does the Addressables work with content delivery when content is not known at build time?

Currently, we’re using remote config + remote server asset bundles for delivering new levels, shop content and all special offers/marketing assets for timed offers in-game. All of those are not know at build time, but they can always be built as additional asset bundles and with few modifications in our remote config we can make the content appear in the game.

It seems to me though, that all the guids and paths with Addressables system need to be known at build time, and there is no way to add new content w/o updating the Addressables database which equals to creating a new build.

Is that correct, or is there a way to implement dynamic content delivery with Addressables too?

3 Likes

if you have a level loader addressable that can be updated to load more additional content wouldn’t that be a solution?
So basically an update-able wrapper around it?
The system should pick up the new catalog on the remote server without having to rebuild your game.

I’m going to attempt to tinker with this anyway, but is it safe to load Addressable Scriptable objects during a RuntimeInitializeOnLoad() marked function? I’m interested in setting up system configuration data for ECS.

Can you create/pack/generate addressable assets at runtime?
Example: you are able to generate content and upload to a server for another user to download at the other end.

Thanks for the replies.

So basically yes, we could do that, but it’s not what we want. On mobile, the transfer and storage is a premium, and doing it this way would basically increase the size of the package to download by the user, and force it to redownload entire content package (containing also the levels the user already has) every time there is a change or new content.

Why not build them into seperate packages? Instead of 1 big bundle of levels, have 1 bundle per level. Thats what bundle dependencies are for.

An adressable containing the level loader
The level loader contains a list of addressables of levels to load?

If ‘level’ refers to an Unity Scene, then this is actually the only way possible. Unity allows to store one Scene per asset bundle only.

Nice work there… But, looking at the Scriptable Build Pipeline and the new addressable, while reading the App Store guidelines, a question comes to my (twisted) mind : doesn’t these remarquable new functionalities provide a pandora box making the application incompatible with Apple guidelines (2.5.2) :
“nor may they download, install, or execute code which introduces or changes features or functionality of the app”

I know… Paranoia is my middle name :slight_smile:

Reference : App Review Guidelines - Apple Developer

with addressables you can only update assets not code
For code changes you still need a new build as far as I know

2 Likes

Is the Addressable Asset System working together with Unity Build Cloud? So can Unity Build Cloud build the asset bundles for me that are assigned using the Addressable Asset System?

Another question: In our current game I made an asset bundle preloader before entering (loading) a new scene. The set of asset bundles depends on the level to load. So it’s determined at runtime.
Is this setup possible using the Addressable Asset System? Can I preload a group? Or what is the right way to cope with this?

Is it possible to cache the content the player has loaded once? So basically, he loads the content he needs from a remove storage, but then caches it locally and loads it the next time from the local storage instead of downloading it, something like the “LoadFromCacheOrDownload”?