問題タブ [assetbundle]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
1103 参照

ios - Unity AssetBundle.LoadAsync とコード ストリッピング

最初は iOS 用、次に Android 用に、タイトルのメモリ消費量を削減する必要があります。

私たちが注目している領域の 1 つは、記事「ビルドされた iOS プレーヤーのサイズを最適化する」で提案されているコード ストリッピングです。

さまざまなストリッピング レベル、アセンブリ、およびバイト コードをテストすると、実行時にクラッシュが発生します。これをメソッドの使用に絞り込み、その使用法を呼び出しAssetBundle.LoadAsync()に置き換えました。AssetBundle.Load()これでクラッシュは止まりましたが、ゲームの一部がひどく壊れており、この後半の段階では修復する時間がありません。

では、一歩引いてみましょう。コード ストリッピングはAssetBundle.LoadAsync()、実行時にゲームがクラッシュする原因となる の依存関係を削除することです。リンクされた記事link.xmlでは、ファイルを使用して追加の依存関係を指定するように指示されています (System.Security.Cryptographyこのリストに追加する必要がありました)。

Q:に必要な依存関係は何AssetBundle.LoadAsync()ですか?

また、依存関係を解決するためのヒントはありますか? .NET Reflector をのぞき見しましたが、外部 DLL を呼び出すだけなので、多くの情報は得られませんでした。

0 投票する
2 に答える
23707 参照

caching - Unity 3D: アセット バンドル vs. リソース フォルダー vs www.Texture

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

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

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

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

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

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

乾杯、皆さん...

0 投票する
2 に答える
17025 参照

android - Unity でアセット バンドルのコンテンツを編集または抽出できますか?

Unity アセットバンドルを持っています。それらといくつかのdbファイル内にさらにいくつかのバンドルがあります。アセット バンドルのコンテンツを編集または抽出する簡単な方法はありますか。

0 投票する
1 に答える
5496 参照

unity3d - AssetBundle Download Management を処理するには、どちらの方法が適していますか

質問をする前に、どのような要件が必要かを説明します。私のゲームでは、それをプレイするために必要なテクスチャがたくさんあります。これと ipa サイズ (iOS) の制限のため、assetbundle を使用する必要があると思います。既存のコード実装のため、1 つの画像に対して 1 つのアセット バンドルである、assetbundle を作成します。例: 100 個の画像がある場合、同じ名前で 100 個のアセットバンドル (メインアセットがテクスチャになります) を作成します。

ユーザーが必要なすべてのアセットバンドルを初めてダウンロードした後に、ゲームをオフラインでプレイできるようにしたいです。したがって、ユーザーが初めてゲームをプレイするか、私のゲームの更新バージョンをダウンロードすると、ゲームは強制的に特別なシーンに入り、そこで必要なすべてのアセットバンドルがダウンロードされます。その後、ユーザーはインターネットに接続せずにゲームをプレイできます。

これらのアセットバンドルをダウンロードする方法については、次の 2 つの方法があると思いました。

  1. 通常の方法: 100 個のアセットバンドルすべてをサーバーに配置し、すべてのアセットバンドル情報とそのバージョンで構成される 1 つの xml ファイルを配置します。特別なシーンでは、ゲームは xml ファイルをダウンロードし、そこから 100 個のアセットバンドルを 経由でダウンロードしますWWW.LoadFromCacheOrDownload。目的は、必要なアセットバンドルをゲームのキャッシュに保存することだけです。それらすべてを正常にダウンロードした後、ユーザーはオフラインでプレイできます。ゲームでアセットバンドルをロードする必要がある場合は、もう一度 を呼び出します。アセットバンドルWWW.LoadFromCacheOrDownloadはまだキャッシュにあるため、オフラインでプレイできます。もちろん、キャッシュを明示的にクリアしない限り、キャッシュはまだあると思います。

  2. 難しい方法: 100 個のアセットバンドルすべてを 1 つの zip ファイルに圧縮します。ゲームは xml ファイルと zip ファイルをダウンロードします。zip を解凍し、100 個のアセットバンドルすべてをモバイル ストレージ (iOS および Android) に配置します。その後、ゲームがアセットをロードする必要がある場合に備えて、モバイル ストレージのパスを指すWWW.LoadFromCacheOrDownloadURL is using スキームを使用して を呼び出します。file:///

概要:

通常の方法:

マイナス: キャッシュはまだあると思いますが、キャッシュに問題がある場合、ユーザーはゲームをプレイできません。

プラス:キャッシュがうまくいくという仮定のため、実装が簡単です。

難しい方法:

マイナス:まあ、マイナス点かどうかはわかりませんが、これは、アーカイブされていないzipファイルを実装してストレージに保存する必要があります。サーバー側とアプリケーション側でさらに実装が必要です。私は初心者なので、この分野でのベストプラクティスを知りません。

プラス:より堅牢

どちらが良いですか?またはより良い推奨事項はありますか?

0 投票する
1 に答える
9429 参照

load - Unity3D AssetBundle.LoadAsync の使用方法 Assets フォルダーからプレハブを直接読み込む

AssetBundle.LoadAsync を使用して Assets フォルダーからプレハブを直接読み込むことはできますか? Assets/Bundle フォルダーには "BGELement" というプレハブがあります。それを Resources フォルダーに入れず、Resource.Load を使用してロードしたくありませんでした。以下は私のコードですが、エラーが発生します: NullReferenceException、エラー行は ab.LoadAsync() です

0 投票する
0 に答える
945 参照

android - Unity と Vuforia を使用すると Android アプリケーションがクラッシュする

まず第一に、私の問題を読んでくれてありがとう。Unity Pro 4.2.0f と Nexus 10 を使用しています。

問題は次のとおりです。+/- 20 のアセット バンドルをロードおよびアンロードした後、アプリケーションがクラッシュします。もちろん、メモリの問題である可能性があり、一部のものが適切にアンロードされていない可能性があると最初に考えましたが、プロファイラーですべてをチェックし、Logcat をエンコードしようとしましたが、問題を修正できませんでした。

これは、APP がクラッシュする 2 つの Logcat 行です。

E/Surface ( 123): queueBuffer: error queuing buffer to SurfaceTexture, -32 I/ActivityManager( 450): Process com.xxxxxx.xxxxxx (pid 21277) has died.

PlayMode の PC で発生することはありません...

何が問題なのか、またはどうすれば解決策を見つけることができるのか、誰かアイデアを持っていますか.

ありがとうございました。

こんにちはパトリック

0 投票する
1 に答える
3372 参照

c# - Unity Asset Bundle から読み込まれたアセットを破棄する

プロジェクトにアセット バンドルをロードしています。アセット バンドル内の個々のオブジェクトを反復処理できるように、それらすべてをリストに追加しています。しかし、ロードしたオブジェクトが不要になったときに、そのオブジェクトを削除するのに苦労しています。

私の研究では、Bundle.UnloadAll を知っていますが、読んだことから、不要なバンドル全体が破棄されます。現在、私のコードは次のようになっています。

このコードは、読み込まれたアセット バンドル オブジェクトを含むリストを反復処理し、リスト内の次のオブジェクトを生成する必要があります。同時に、以前にロードされたものを破棄する必要があります。しかし、このコードを実行すると、次のエラーが発生します。

データの損失を避けるため、アセットを破棄することは許可されていません。本当にアセットを削除したい場合は、DestroyImmediate (theObject, true); を使用します。

したがって、コードをその提案に変更すると、次のエラーが発生します。

MissingReferenceException: タイプ 'GameObject' のオブジェクトは破棄されましたが、まだアクセスしようとしています。スクリプトで null かどうかを確認するか、オブジェクトを破棄しないようにする必要があります。

ただし、私のリストからは何も削除されず、生成された最初のオブジェクトが残っています。

誰かが同様の問題に遭遇したことがありますか? 私がやろうとしていることは可能ですか?

どんな助けでも大歓迎です。

0 投票する
1 に答える
8202 参照

android - Android で実行されている Unity で作成したゲームを更新するにはどうすればよいですか?

私のゲームには 100M のアセット バンドルがあり、budle ファイルを StreamingAssets フォルダーに配置し (スタイルをプレイするときにダウンロードするのではなく、1 つのアプリ全体として apk をリリースしたい)、プロジェクトを 1 つの apk ファイルにビルドしてから、 apk ファイルをデバイスに追加します。

しかし、新しいアップデートが利用可能であることがゲームで見つかった場合、どうすればバンドルをアップデートできますか? Android の StreamingAssets フォルダーは読み取り専用です。

解決策の 1 つは、StreamingAssets フォルダー内のバンドルを Android の外部ストレージなどの場所にコピーしてから、外部ストレージ内のバンドルを使用することです。しかし、これにより、ゲームのサイズが 100M バンドルから 200M に増加します。

Android では、1 つの apk をインストールするときに、その間にいくつかのファイルを書き込み可能な場所にインストールできますか?

誰でも私を助けることができますか?ありがとう。