Search Unity

App Slicing はバージョン9.0から導入されたiOSとtvOSの新しい機能です。この機能の目的はメインのアプリケーションバンドルのサイズを小さくすることで、開発者はこの機能を使うことでデバイス依存のリソースを別々のファイルとしてApp Storeにアップロードすることができるようになりました。ユーザーにアプリが届けられる時には、これらアップロードされたファイルのうち、その環境に適した一つだけが含まれるように動作します。

App slicing はiOSプラットフォームでとても役に立ちます。この機能は開発者により多くのアセットを最初のアプリケーションバンドルに含めることを可能にしつつも、100MB以内にアプリを抑えることでWifi環境でなくてもダウンロードを可能にできるからです。この目的に沿うために開発者はApp Slicing と対応するもう一つの機能であるオンデマンドリソースを使うこともできます。オンデマンドリソースについては前回のブログ記事で解説しました。しかしながらオンデマンドリソースを使うにはアプリケーションはダイナミックにリソースをダウンロードするように対応する必要があり、必ずしも都合よくそのようにできたり、あるいは最適な選択であるとは言えない場合があります。また、全体的に複雑さを増してしまう点もあります。App Slicingにはこうしたデメリットがありません。

App Slicing には2つの特色があります:アプリケーション実行バイナリのスライシングとアプリケーションリソースのスライシングです。前者はアプリケーションバンドルから不要な実行バイナリを除去する機能で、iOS/tvOS 9.0以降をターゲットにしたアプリケーションをApp Storeに登録すると自動的にその処理が行われます。後者は不要なアセットを除去する機能で、これを使うには開発者の作業が必要となります。このブログ記事ではアプリケーションリソースのスライシングについてカバーします。

アプリケーションリソースのスライシングの第一目標は、同じアセットのバリエーションを内包することで無駄に消費されてきたディスクスペースやバンド幅を最適化することです。なぜあるアセットを複数のバリエーション持たなければならないかというと、今現在使用されているiOSデバイスについて古いものから新しいものまでを広くサポートする時、デバイス間でできることに大きな違いがあるためです。大体の場合ではデベロッパーは異なる品質のアセットを用意することで、他のデバイスへの影響を回避しながら、一番高速なデバイスで美しく動作することを実現します。iOS 9.0以前では、すべてのアセットのバリエーションはメインアプリケーションバンドルに含まれていなければなりませんでした。実際にはすべてのバリエーションのうち特定のデバイスで使われるのは一つだけなのですが、この制限がデバイス上のストレージやダウンロードのバンド幅を圧迫し、無駄に多く使わせることにつながっていました。
アプリケーションリソースのスライシングを導入することで、アプリケーションバンドルから不要なリソースを取り除くことが可能となります。

アプリケーションのリソーススライシングを活かす最も簡単なやりかたはアセットバンドルを使うことです。アセットバンドルをつかえばアプリケーションのアセットをスライシングに適した形に配置することができます。アセットバンドルはUnityに統合されており、パフォーマンスは通常のアセットデータファイルをロードするのと同じになるよう最適化されています。アセットバンドルはオンデマンドリソースのためのバックエンドとしても利用されるので、オンデマンドリソースの機能をすでに導入しているアプリでサイズの軽量化(App thinning)を行ったり、またその逆を行うのが簡単になるというメリットもあります。いちどアセットバンドルを設定したら、アプリケーションリソースのスライシングを導入するために必要なのは、いくつかのちょっとした変更だけです。この変更は下記のコード例で解説します。なお、このブログ記事ではアセットバンドル自体についてはカバーしません。もしこのブログ記事でアセットバンドルについて初めて目にした場合は、この資料 が助けになるでしょう。

アプリケーションリソースのスライシングを使うには、開発者はどのデバイスがどのリソースのバリアントを使えるかということについてリソーススライシングで使うすべてのバリアントに対して設定し、そしてアプリケーションの起動時にそれらのアセットをロードするように処理する必要があります。通常の(Xcodeを使った)iOSアプリケーション開発では、これはデータセットやイメージセットのアイテムをアセットカタログで作成し、device variationsをセットアップしてプレースホルダーのUIにリソースを割り当てることで行います。Unityでは、開発者はアセットバンドルのバリアント(variants)を作ることで対応します。バリアントとは同じアセット群を保持する複数のアセットバンドルのことで、実際に保持しているアセットそのものは異なるデータにできる仕組みのことです。アプリケーションのリソーススライシングに使用するアセットバンドルのバリアントはUnityEditor.iOS.BuildPipeline.collectResourcesコールバックAPIを使って登録される必要があります。その後、的確なデバイス要求がPlayer SettingsのUIで設定されます。
最後に、開発者はアプリケーションの起動時にAssetBundle.CreateFromFile APIをつかってマニュアルでアセットバンドルをロードする必要があります。

アプリケーションのリソーススライシングの具体例:

アプリケーションのリソーススライシングに使うリソースを登録するエディタースクリプトの例:

アセットバンドルを起動時にロードする例:

アセットバンドルとアプリケーションのリソーススライシングを実現する最も簡単な方法はこちらのBitBucketで公開されているAsset Bundle Manager デモプロジェクトを使うことです。ランディングページにはこのデモを理解したり活用するための詳細な解説が載っています。

11 コメント

コメントの配信登録

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

  1. Ok never mind.

    I had to include Using UnityEditor.

  2. I can’t seem to find InitializeOnLoadMethod.

    Which version of Unity has this method?

    In 5.3.2p3 I see RuntimeInitializeOnLoadMethodAttribute which isn’t the same.

    Could you point me in the right direction?

    Thanks.

    1. ok never mind. I had to include Using UnityEditor.

  3. this is great articale i would appricate the effort of the author he has done a great job
    Barbie Cartoon

  4. hello there now i’m generate this amazing site concerning which attention to be able to Audio iles, gastronomie, insular motion picture, Insular publication, in order to get involved with this function would certainly can you check out festival

  5. Soooo, it’s 12 days into 2016 and you guys don’t want to blog about anything? really? nothing? not even two lines to wish us a happy new year?

    Anyways, have a happy new year to you all. Looking forward to all the stuff on the road map for 2016 to come into fruition!

    Cheers!

  6. nada

  7. Tony Rouhani

    1月 1, 2016 9:14 pm

    downloading is very “un-users friendly”.

  8. Wildan Mubarok

    12月 31, 2015 1:45 pm

    i’m sorry if it off with this post, but i don’t know where to put this.

    the RSS feed in all categories inside this blog seems no longer to be updated. it was make me thought that this blogs not been written for three months, until i realize that the RSS got stuck in “get even more from ….”, i’m still use this feature so please fix it.

  9. the bitbucket link is wrong. it’s now link to a assetbundle article.

    1. Kristyna Paskova

      12月 29, 2015 7:22 pm

      Thanks for catching that! It’s fixed now.