3

RAM を管理する必要があるため、すべての ngui ページをオンザフライでロード/アンロードしたいと考えています。そのために、プレハブを使用して AssetBundle を作成し、これらの AssetBundle を APK に保持します

Android デバイスでそれらをロード/アンロードする方法は何ですか。

私はAssetBundle.CreateFromMemoryについて大まかに知っていますが、それを実装することはできません

私は正しい方法で考えているか、何かが欠けています。

助けて/??

4

1 に答える 1

2

私はあなたが正しい方法であると思います。Unity はプロジェクト内のリソース フォルダーをサポートし、コンテンツをメインのゲーム ファイルで提供しながら、要求されるまでロードしないようにします。Unity Pro、Unity iOS Pro (以前は「iOS Advanced」と呼ばれていました)、Unity Android Pro (以前は「Android Advanced」と呼ばれていました) では、アセット バンドルを作成することもできます。これらは、ファイルまたは URL からオンデマンドでゲームがアクセスするアセットを含む、メインのゲーム ファイルから完全に分離されたファイルです。

AnAsset Bundleはアセットの外部コレクションです。多くのアセット バンドルを持つことができるため、アセットのさまざまな外部コレクションを持つことができます。これらのファイルは、構築された Unity プレーヤーの外部に存在し、通常はエンドユーザーが動的にアクセスできるように Web サーバー上にあります。

アセット バンドルを構築するBuildPipeline.BuildAssetBundle()には、エディター スクリプト内から呼び出します。引数では、ビルドされたファイルに含まれるオブジェクトの配列と、その他のオプションを指定します。これにより、後で を使用してランタイムに動的にロードできるファイルが作成されますAssetBundle.Load()

を呼び出すことで、AssetBundle のリソースをアンロードできますAssetBundle.Unload()。unloadAllLoadedObjects パラメーターに true を渡すと、によって内部的に保持されているオブジェクトと、アセットバンドルAssetBundleを使用してロードされたオブジェクトの両方AssetBundle.Load()が破棄され、バンドルによって使用されていたメモリが解放されます。

場合によっては、AssetBundle をロードし、必要なオブジェクトをインスタンス化し、オブジェクトを維持しながらバンドルによって使用されるメモリを解放することを好む場合があります。利点は、別のアセットバンドルをロードするなど、他のタスクのためにメモリを解放できることです。このシナリオでは、パラメーターとして false を渡します。バンドルが破棄されると、そこからオブジェクトをロードできなくなります。

別のレベルをロードする前に を使用してロードされたシーン オブジェクトを破棄する場合は、それらResources.Load()を呼び出しObject.Destroy()ます。アセットをリリースするには、 を使用しますResources.UnloadUnusedAssets()

Unity docsで全文をお読みください。

于 2013-02-25T11:21:52.343 に答える