2013-07-02 3 views
6

これで、Unity 3DのAssetBundlesとResourcesフォルダに関するフォーラムを少し読んだことがあります。私が直面している問題。ここに問題があります:Unity 3D:Asset Bundles vs. Resourcesフォルダvs www.Texture

私はスタンドアローン用に設計されたプログラムで、.pngと.jpgの画像でいっぱいの「ブック」を読み込んでいます。ページは、プログラムが開始するたびに現時点では同じです。シーンの開始時に「ブック」は、www.textureとパスを使って、一度にすべての画像をロードします。しかし、これは実行時に物事にアクセスするための非能動的な方法かもしれないと今や気づいています。それは遅いです!これは、シーンが始まり、本のページ画像が読み込まれている間(伝説的でないコンピュータで)、ユーザーが5〜20秒間何もすることができないことを意味します。だから、3つのうちどれが最速になるのかわからない。

1)ブックごとに1つのアセットバンドルをロードする(それぞれ20テクスチャ@ 1メガバイト)。

2)ページごとに1つの資産バンドルを読み込みます(それぞれ1 MB)。

3)最初の2つのオプションのどちらかですが、リソースフォルダからロードします。

どちらが速く、なぜですか?アセットバンドルは統一されてパッケージ化されていますが、これは内部のテクスチャが事前に圧縮され、読み込み時にメモリ上で簡単になることを意味しますか?リソースフォルダの読み込み時間が短くなりますか?何がありますか?私が理解しているように、リソースフォルダはキャッシュに読み込まれますが、スタンドアローンプレーヤーが通常使うキャッシュと同じですか?または、この余分な、未使用のスペースですか?私は別の問題は、メモリから物を読み込んでキャッシュに格納することの違いがわからないということです。

乾杯人...

答えて

8

リソースフォルダはバンドル管理資産です。つまり、IDEで適用する設定に従ってUnityによって圧縮されます。したがって、実行時にロードするのが効率的です。各プラットフォームの圧縮を調整することができ、パフォーマンスをさらに最適化する必要があります。

Resources.Load()を高価に使用してアセットを取得すると、デスクトップとモバイルの両方でパフォーマンスが向上します。

バンドルされた管理されていないアセットを配置するために使用できる特別なフォルダ、StreamingAssetsもあります。これは実行時に再生したいビデオを置く場所ですが、Unityがそれらをデフォルトのoggコーデックに変換するのは望ましくありません。モバイルでは、これらはネイティブビデオプレーヤーで再生されます。そこに画像を置くこともできますし、WWWクラスを使うのと同様です。ゆっくり、Unityは読み込み時に画像をサニタイズして圧縮する必要があるためです。

上記のように、アセットを処理するオーバーヘッドによってWWWのロードが遅くなります。しかし、サーバーから、またはアプリケーション "サンドボックス"の外部からデータを取り出すことができます。

  • ユーザーが各書籍の最初のページを閲覧しているときに追加コンテンツを取得するためのバックグラウンドプロセスを表示し実装するだけです。これは、UIを長時間ブロックするのを避けるでしょう。
  • イメージを最適化してファイルサイズを縮小します。透明な画像が必要な場合はtinypngを使用するか、圧縮されたJPGに固執する
  • できるだけ2枚の画像を使用してみてください。これにより、ランタイム処理が少し速くなるはずです。

ath。

+0

これはリソースフォルダについての素晴らしい回答ですが、AssetBundlesの使い方についてはまだ混乱しています。私はアセットフォルダから物をロードしようとし、それがどうやっているのか見てみましょう。 – Catlard

+2

AssetBundlesは、実行時に外部からロードするResourcesフォルダのようなものです。ローカルソースまたはサーバーからバンドルをロードできます。ロードされると、リソースフォルダ内のコンパイル時にバンドルされたものと同じように、そのアセットにアクセスできます。 AssetsBundleは、コンパイルされたアプリケーションのサイズを減らし、実行時に動的コンテンツ(ほとんどの場合サーバーから)をロードして、ユーザーに最新のアセットがあることを確認するのに最適です。 –

4

リソースに関するJeromeの偉大な答え。 AssetBundlesに関する将来の検索のためのいくつかの追加情報を追加するには、ここにある2つのシナリオ:

あなたのゲームは

大きすぎるあなたが言う、テクスチャのトンを持っている、とあなたのiOSゲームが100メガバイトを超えています - Appleがユーザーに警告を表示し、ユーザーが携帯電話経由でダウンロードするのを防ぐことを意味します。そのフォルダ内のすべてがアプリケーションにバンドルされているため、リソースは役に立ちません。

ソリューション:最初に実行したときに絶対に必要でないアートワークをアセットバンドルに移動します。バンドルをビルドし、どこかのサーバにアップロードしてから、必要に応じて実行時にダウンロードします。今あなたのゲームははるかに小さく、恐ろしい警告はありません。

は、さまざまなプラットフォームのためのアートワークの異なるバージョン

代替シナリオを必要とする:あなたは、iPhoneとiPadのために開発しています。上記の理由と同じ理由で、あなたのアートワークを可能な限り縮小して、iPhoneの100 MBの制限に達するようにします。しかし今、ゲームはiPad上でひどく見えます。何ですか?

解決策:2つのバリエーションを使用してアセットバンドルを作成します。 1つは低解像度のアート作品の電話用、もう1つは高解像度のアート作品のタブレット用です。この場合、アセットバンドルはゲームに同梱されるか、サーバーに送信されます。実行時には、アセットバンドルから適切なバリアントとロードを選択し、どこでも/別の場所に配置する必要なく適切なアートワークを取得します。

アセットバンドルは、使用が複雑で、文書化が難しく、Unityのデモが適切に動作しないことがあります。あなたがそれらを必要としているかどうか真剣に評価してください。