Search Unity

Addressables は、複雑なライブコンテンツを提供する大規模な制作チーム向けのサポートを向上する Unity エディターおよびランタイムのアセット管理システムです。このシステムのリリースは、「開発者の苦労を緩和させるとともに、エンジニアリングの課題に対応するだけの十分な準備が整っていない小規模なチームでもライブコンテンツの恩恵を享受できるようにする」ための私たちの取り組みにおける、大きなマイルストーンの達成を意味します。Addressables はプレビュー版ではなくなり、検証済みパッケージとして Unity 2019.3 向けに入手可能となります。Unity 2018 LTS のリリースサイクル中は完全なサポートが継続されます。

背景

Unity 4 で、ランタイムにおける動的読み込みのためにアセットを複数の個別の要素に分割された形でビルドするための低レベルのメカニズムとしてアセットバンドルが初搭載されました。開発者は、アセットバンドルを実装することで、コンテンツをアプリケーションのインストールから分離することができます。これにより、初回ダウンロードのサイズを小さく抑えながら、追加的なアプリケーションコンテンツ提供時に OTA(over-the-air)インストールの制限を超えることなく、公開済みアプリケーションへの定期的なコンテンツ更新を提供することが可能になります。

このような利点がある一方で、アセットバンドルを実際の製品に使用するのは単純なタスクではありません。Unity には、「(シーン内での直接参照とゲームオブジェクトのパブリックフィールドによって)Unity 内でアセットの参照・読み込みを行う」という単純なメカニズムからアセットバンドルへコンテンツを移行するための明白なワークフローというものは提供されていません。完全に静的な組み込みコンテンツを利用したアプリケーションやゲームを、増分更新でコンテンツを動的に読み込む方式へと移行するには、膨大なリファクタリングとカスタムプログラミングが必要です。したがってこの機能は、多くの、あるいはほとんどの開発者にとって、実用的なものではありませんでした。

Addressables

アセットバンドルの使用体験について開発者の方々とお話した所、うまく使用できている方々は皆、ほぼ同じ高水準システムを、少しずつ異なる様々な方法で記述されていることが分かりました。Addressables は、アセットのアドレス・ビルド・読み込みにまつわる一般的な問題各種を解決するフレームワークへの明白なニーズに対応すべく誕生しました。

関心の分離:アセットの参照とパッケージング

Addressables の主要な機能は、読み込まれるアセットの内容と、アセットの読み込み元と、それらのアセットの読み込み方法とを分離することです。シーン、プレハブ、テキストなど、どんなアセットでもAddressable(アドレス可能)としてマークすることができ、固有の名前が与えられます。Addressable となったアセットは、そのアドレス可能な名前によって、特殊なスクリプトタイプ「Asset Reference」でコード内で参照・読み込み可能となります。また、Addressable アセットは、組み込みコンテンツとしてビルドや読み込みを行うためにまとめたり、ランタイムで動的に読み込むためにバンドルにしたりすることができます。このように、関心の分離を行うことによって、ゲームコードを変更する必要性に迫られることなく、コンテンツのパッケージングと配布に関する決定を制作の後期まで保留できるようになります。

Addressables ウィンドウ

ランタイムのメモリ管理

Unity でアセットバンドルから読み込みを行うことの大きな利点は、不要になったコンテンツをメモリから効率的にアンロードできることです。何が読み込まれ何が安全にアンロード可能かを効率的にトラッキングするためのコード記述は複雑なタスクであり、従来は開発者に任せられていました。Addressables 経由で読み込む場合、読み込まれるアセットとその依存の高水準な参照カウントが自動的に提供され、使用されなくなったバンドルとその関連アセットを自動的にアンロードすることができます。さらに Addressables は、読み込まれたアセットとアセットバンドルの参照カウントのリアルタイムのデバッギング用に、視覚的なプロファイラーを提供します。

Addressables プロファイラー

より迅速なイテレーション

Addressables は、コンテンツ変更時のより迅速なイテレーションを実現するため、アセットの読み込みプロセスに関していくつかの重要なコンセプトを採用しています。

  • 再生モードシミュレーション:ビルドのプロセスを要することなくアセットがディスクから直接読み込まれ、かつアセットの参照カウントがプロファイラーによって提供されます。
  • より迅速なインクリメンタルビルド:Addressables は、インクリメンタルビルドのスピードと信頼性を向上させる新しいスクリプタブルビルドパイプラインとともに提供されます。
  • エディターホスティングサービス:LAN 接続されたローカルのデバイスへ Addressable コンテンツを提供する組み込み機能によって、デバイス上でコンテンツのイテレーションを迅速かつ効率よく行う方法が提供されます。

ご使用を開始されるに当たって

Addressables は、アセットの参照とパッケージングにおける関心を分離し、再生モードとデプロイ済みプレイヤービルドの両方でより迅速なイテレーションを実現し、自動メモリ管理とプロファイリングツールを提供します。Addressables は、単純なユースケースと複雑なユースケースの両方を解決できるように拡張性とカスタマイゼーションを考慮して設計されています。

ついに Addressables がプレビュー版ではなくなり、今すぐ皆様の制作アプリケーションに安心してお使いいただけるようになったことを私たちは大変嬉しく思います。Unity では引き続きパフォーマンスと機能の改良に尽力し、開発者の皆様のニーズを踏まえて Unity と Addressables をともに進化させるべく取り組んで参ります。

動的コンテンツのサポートに関する主要な技術的課題の多くが Addressables によって解決されますが、まだ「最後の」問題が残っています ― 公開済みのゲームやアプリケーションのためのアセットのホスティングと配布です。企業向けのグローバルコンテンツホスティングソリューションが、Addressables システムに完全に統合された形で今年中に公開予定となっています。このサービスについてさらに詳しくお知りになりたい方は、こちらからサインアップしてください。

Addressables はすでに 300 件を超えるプロジェクトで使用されています。Unity でパッケージマネージャーシステムを使用して今すぐご自分のプロジェクトに追加していただけます。新しいプロジェクトで簡単にご使用を開始していただけるほか、既存のプロジェクトをアップグレードして Addressables を導入される場合はMigration Guide(移行ガイド)をご利用いただけます。また GitHub にて、基本的な使用方法と高度な使用方法のサンプルプロジェクトもご提供しています。

[1] 「プレビュー版ではなくなる」という言葉についての補足:Addressables を 1.1.5 にアップデートするとパッケージマネージャーでのパッケージの表記から「プレビュー版」のタグが外れます。これは中間的な状態ではありますが、パッケージが最新版の Unity を使った一連の自動テストに合格し、パッケージのオーナー(つまり、この記事の著者のチーム)が開発者の皆様のプロジェクトで当該機能を利用していただく際のサポートを行う準備が整ったことを示します。Addressables は 2018.3 以降のすべてのバージョンの Unity に対応しています。この先に控える Unity 2019.3 のリリースに向けて、パッケージを「検証済み」にする予定です。パッケージが「検証済み」になるにはリリース QA によって、主な Unity エンジンとエディターのリリースを組み合わせた環境におけるテストと検証を完了する必要があります。

38 コメント

コメントの配信登録

コメント受付を終了しました。

  1. there is a bug when the file path is too long ,such as File.CopyFile()

  2. How can I load all assets in one of groups? use the group name?

  3. Help with getting the addressable system to upload separate bundles into oculus store as described in the link below. I’m not sure where the actual bundles are being stores so I can then upload them to oculus https://developer.oculus.com/blog/tech-note-expansion-file-support-for-gear-vr-beta/

  4. your local memelord

    8月 24, 2019 11:06 pm

    The lack of documentation, clear examples, and ease of use made me go back to resources loading after days of trying to have
    something that was not a pain in the ass to work with, I am sure it works wonders if you are part of the dev team and know the inside out, but I absolutely hate having to do trial and error and github issues hunting because there are no docs.

  5. As developers, we tend to do a lot of work, programming/development, etc. and can get caught up in all the pain of the errors we face. But I want to say really, thank you. This was very-much needed, and is absolutely awesome! Great job to your team for all the work put into this! I’ve started using the Addressables in my project, and love it so far!

    I am still using Resources.Load(…) for the majority of my game still, however. I’m wondering if Addressables can be used when *not* in playmode, and just in the editor? I made a level-editing system that requires being able to load these assets (currently through the Resources API) to show where enemy spawns are, but would *love* to switch that system to use the Addressables instead!

  6. after installing the package and updating from bundles my project now fails to load the converted asset. and I find no clue on how to fix the code to make them working again

  7. Leon Moctezuma

    7月 29, 2019 3:13 pm

    In my opinion this package should stay on preview until it’s truly production ready, otherwise it’s misleading the community.

  8. I am experiencing a weird bug that happens only on iPhone X/Xs/Xr that the Addressables Initialization Task never completes. On any other platforms, it runs to completion. I suspect it might have something to do with the Task initialization or the WaitHandle

  9. Something I’ve been unable to find – how do you get the address of a ScriptableObject at runtime?

    1. This is an valid concern. I’ve found I can only load GameObjects, as the loaders are specific to that type. Outside of this use case it seems to fail.

      Please inform us as to how we can load ScriptableObjects via Addressables, Unity!

      Such a cool feature we’re missing out on due to lacking documentation and overbearing specificity.

  10. Hi. I use Adressables since the beginning. Nice Stuff.
    Would be cool when you could use it the Unity examples like Fontainebleau, FPS Sample and the Additive Loading Lighting Examples Asset.
    Would speed up out of preview.)

  11. Florian Bernard

    7月 17, 2019 9:11 pm

    That’s great news.

    But last time I tried to play with it (0.8.something), it was not even possible to get a basic load progress.
    Also, very large scenes (~500Mb) were not loading at all over my local network.

    Curious to know if these issues are fixed now.

    Thanks for the great work. I’m sure the Addressable system will be a very powerful feature!

  12. Not sure i understand this sentence:

    “Addressables is now out of preview and will be available as a verified package for Unity 2019.3. It will remain fully supported in Unity 2018 LTS releases.”

    Is the “official” package available right now? which Unity version can i use it with ?

    1. Stephen Palmer

      7月 22, 2019 5:04 pm

      Lior, we updated the blog post (at the bottom) with a clarification on this point.

  13. Do you anticipate any API churn from now until 2019.3, or is the remaining work mostly bug fixes and new features?

    1. Stephen Palmer

      7月 17, 2019 4:42 am

      APIs and data will be relatively stable. We are considering a sync loading API, but that would be additive. We’re really focusing on bug fixes and usability improvements for the rest of the year. An Editor UI refresh is coming in about a month, for instance.

  14. typo – “of loadeds assets”

  15. Isaac Surfraz

    7月 16, 2019 3:20 pm

    Hopefully its usable by then, because right now and up until now except for a handful of cases it has been a pretty broken and difficult to use system.

    The UI is almost completely broken and will throw all sorts of errors, and trying to load anything except at the very very granular level is difficult.

    People just want a way to load a collection of prefabs, a scene, or a single prefab easily, without having to be an expert in using addressables. Right now both packaging up stuff and loading + unloading it is far too cumbersome for something touted as fixing the difficulty of using asset bundles.

    1. Stephen Palmer

      7月 17, 2019 12:23 am

      We have not been running into UI errors in our tests, and would love to know what situations cause these. Have you already posted the issue on the forum or as a Unity bug? If not, it would be great if you could. A Unity bug is the best way for us to get a repro project and really dig into problems. If you cannot get us a project, we try to stay somewhat on top of the forums, so you can try posting there. (https://forum.unity.com/forums/addressables.156/)

      1. Isaac Surfraz

        7月 23, 2019 3:42 pm

        Thanks I have not but I will file a bug when I am back home.

  16. So can you load in addressable catalogues as addressables?

    1. Stephen Palmer

      7月 17, 2019 12:23 am

      Are you referring to having multiple Unity projects, and allowing one to load assets (and a catalog) from another? If so, this is something that can work, but is fairly advanced and not yet well explored on our end. This would be the place to start looking: https://docs.unity3d.com/Packages/com.unity.addressables@1.1/api/UnityEngine.AddressableAssets.Addressables.html#UnityEngine_AddressableAssets_Addressables_LoadContentCatalogAsync_System_String_System_String_.

  17. Feedback — it’s completely unusable in its currently form (v1.1.4 – 6/19/2019). The UI asked to convert existing resource bundles and then it locked-up and became unresponsive. I restored ,my project’s files and tried again — this time skipping conversion of existing bundles. Again, it locked up Unity. I’d warn anyone who reads this article to make a back-up of their Unity project before doing anything with this experimental package, as it exists today.

    1. Stephen Palmer

      7月 17, 2019 12:25 am

      Thanks for the feedback Shaun. Sounds like you are running into a bug; perhaps related to large numbers of legacy asset bundles in use. We’ll investigate.

  18. Good but the biggest issue with asset bundles is shaders in them throwing errors as Unity changes and old bundles are not fully compatible. Bundles have to be kept up to date with changing shaders and material systems. What if you could have material descriptions instead which map/build final material on load (we did this but old bundles throw shader errors or warnings)

    1. Stephen Palmer

      7月 17, 2019 4:18 am

      Shaders in bundles built in Unity 2018.x and later should be forward compatible with later versions of Unity. If not it would be considered a bug at this point.

  19. Thanks for the post, I’ll give it a try with 2018.4! I was just looking at the “Getting started” guide, but couldn’t find how to load a scene through the addressables system.

    I don’t need to load individual assets, just levels. I hope I can use the addressables system for that, basically mark every scene to be stored as a separate asset bundle and then use addressables to load that scene from its bundle.

    I’m pretty sure it’s supported, the information how to achieve it is probably available somewhere in the documentation. Do you mind to point there?

    Perhaps update the “Getting started” guide with that information too?

    1. Stephen Palmer

      7月 17, 2019 12:21 am

      Sorry that this isn’t something you easily found in the docs. We do discuss it some, but I’d actually recommend you look at one of our samples to get started with this. Take a look at https://github.com/Unity-Technologies/Addressables-Sample/tree/master/Basic/Scene%20Loading and if you run into any problems, please post them on the forum (https://forum.unity.com/forums/addressables.156/)

  20. Plenty of time till 2019.3. Ive been following the Addressables team on forums , its a solid team they will deliver

  21. Wait, out already? But what about something like Sync Addressables (because that sample on github is not good enough)? What about proper dependency sorting for stuff like unused models in FBX files? What about having your settings serialized and versioned when using custom providers? What about determenistic build behaviour for easier patching? Or, you know, what about the countless bugs?

    It’s far from being a production ready package for *most* of the projects, unless quite a big amount of problems will be fixed until 2019.3.

    1. I have to say, I’ve learned to take it with a grain of salt whenever Unity says something is production ready.

      1. This is sadly so true. I really don’t want to offend anybody, but when I see “production ready” in Unity I read it as “don’t touch it until at least several months later or more”.

    2. Don’t worry, they’ll probably forget about it then deprecate it and promise to replace it with a new system in a year or two.

      1. Stephen Palmer

        7月 17, 2019 4:36 am

        We’re not going anywhere. We are committed to making Addressables the best way to manage and build live content in Unity 2018 and 2019. We do expect that there will be some evolution of the system as Unity transitions into DOTS workflows with runtime entity binary data in 2020 and beyond, but the team’s mission and goal remains to reduce pain points around content distribution for live productions.

    3. 2019.2 stable is not even released yet. Just give Unity team a time. It ‘s a long way until 2019.3 I’m sure they can finish it.

    4. Stephen Palmer

      7月 17, 2019 7:47 pm

      – Synchronous API: this is not as straightforward as it seems, as one of the fundamental principals of Addressables is that asset dependencies are resolved at runtime, and any number of those dependencies (like asset bundles) may require an asynchronous operation to complete, such as downloading from a remote server. Having said that, based on developer feedback and some requirements we see coming up in DOTS/hybrid, I think there is a place for API support for sync loading under certain conditions, and will likely show up in a later release.
      – Dependency sorting/unused sub-assets: Unused objects in complex assets like FBX files are already stripped correctly by the build pipeline. For instance, in an addressable prefab with a mesh renderer that references a single mesh from an FBX file with multiple meshes, the unused mesh will not be included in the build. A limitation that has existed even before Addressables is the ability to reference a sub-object directly as a loadable unit, as you can only do so at the asset level.
      – Serialization and versioning of custom provider settings: sounds like you are expecting/looking for something specific that we need more clarity on – feel free to start a thread in our forums (https://forum.unity.com/forums/addressables.156/) to facilitate that discussion with the team.
      – Deterministic builds: Non-deterministic output in builds are always considered bugs, and we take them seriously. Please report them if you are experiencing them.

      1. Regarding deterministic builds, I think he refers to deterministic asset bundles output on different machines, which seems to be a known issue and not easily fixable: https://forum.unity.com/threads/deterministic-asset-bundle-building.703826/