6

そのため、AssetBundles と Unity 3D の Resources フォルダーに関するフォーラムを少し読みましたが、直面している問題の最適な解決策がわかりません。問題は次のとおりです。

.png および .jpg 画像でいっぱいの「本」をロードする、スタンドアロン用に設計されたプログラムがあります。ページは、現時点では、プログラムが開始されるたびに同じです。「本」のシーンの開始時に、www.texture とパスを使用して、これらすべての画像を一度に読み込みます。しかし、これはおそらく実行時にアクセスするための非効率的な方法であることに気付きました-遅いです! これは、シーンが開始されて本のページ画像が読み込まれるまでの 5 ~ 20 秒間、ユーザーが何もできないことを意味します (通常のコンピューターでは)。SO、私は3つのことのどれが最速になるかわかりません:

1) ブックごとに 1 つのアセット バンドルをロードします (たとえば、20 個のテクスチャ @ 1 MB ずつ)。

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

3) 最初の 2 つのオプションのいずれかですが、リソース フォルダーから読み込まれます。

どちらがより高速で、その理由は? アセット バンドルが unity によってパッケージ化されていることは理解していますが、これは、内部のテクスチャが事前に圧縮され、読み込み時にメモリが使いやすいということですか? リソース フォルダーを使用すると、読み込み時間が短縮されますか? 何を与える?私が理解しているように、リソース フォルダーはキャッシュに読み込まれますが、スタンドアロン プレーヤーが通常使用するのと同じキャッシュですか? それとも、これは余分な未使用のスペースですか? 別の問題は、メモリからの読み込みとキャッシュへの保存の違いがわからないことだと思います。

乾杯、皆さん...

4

2 に答える 2

9

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

Resources.Load() を使用してアセットを取得すると、デスクトップとモバイルの両方で適切に機能します。

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

上記のように、アセットの処理のオーバーヘッドにより、WWW の読み込みが遅くなります。ただし、サーバーまたはアプリケーションの「サンドボックス」の外部からデータを取得できます。

  • 表示に必要なものだけを読み込み、バックグラウンド プロセスを実装して、ユーザーが各本の最初のページを読むのに忙しいときに、追加のコンテンツを取得します。これにより、UI が長時間ブロックされるのを回避できます。
  • 画像を最適化してファイル サイズを小さくします。透明な画像が必要な場合は tinypng を使用するか、圧縮された JPG を使用してください
  • 可能であれば、2 のべき乗の画像を使用してみてください。これにより、ランタイム処理が少し高速化されます。

ああ。

于 2013-07-02T14:58:13.257 に答える