Unity AssetBundle リソースのパッケージ化とリソースの読み込み

AssetBundle は Unity に付属するリソースのパッケージ化方法であり、AssetBundle ファイルは暗号化された圧縮パッケージと見なすことができます。

通常、拡張ツールは、AB リソースをパッケージ化するために作成されます。

AssetBundle リソース パッケージの前提条件設定:

C# スクリプトを除いて、この AB パッケージ設定インターフェイスは、選択したものに対して表示されます。

 [新規...] をクリックして、必要な名前を作成します (自動的に小文字に変換されます)。名前を入力したら、Enter キーを押して保存することを忘れないでください。

その隣にはサフィックスがあり、エンタープライズ開発で一般的に使用されるサフィックスは、unity3d、assetbundle、ab、およびその他のカスタマイズです。

ここでは pedestal.ab と定義していますが、ULua のパッケージ形式はハードコーディングされたアセットバンドルです。注意してください。

これらの事前設定が完了すると、ファイルがどのフォルダーにあるかに関係なく、ファイルが認識されて圧縮されます。コードを見てください。

フォルダに入れてパスを書きたい場合は、自動でフォルダが作成されその中に保存されます。 

エディターは AB リソースをパッケージ化します。

1. プロジェクトのルート フォルダーの下に「Editor」ディレクトリを作成し、エディター拡張スクリプトを保存します。

2. 名前空間「UnityEditor」を導入すると、スクリプトは MonoBehaviour を継承する必要がなくなります。

3. AB リソースをパッケージ化するための戻り値のない静的メソッドを記述します。

4. メソッドの上に「機能」を追加します: [MenuItem("menu/itemName")]。この機能は、Unity メニューに記述したメソッドを表示できます。menu はメニューの名前、itemName はメニューの名前です。メソッド (好きなように記述できます)。

 

 コードのデモ:

BuildPipeline.BuildAssetBundles(パス、オプション、プラットフォーム);

パラメータ分析:

①BuildAssetBundles: AssetLabels セットですべてのリソースをパッケージ化します。

②Path: パッケージ化された AssetBundle ファイルが保存されている場所。

③オプション: AssetBundle のパッケージ化プロセスでオプションを設定します。[なし] は、このオプションを無視することを意味します。

④プラットフォーム: AssetBundle はプラットフォーム間で互換性がありません。IOS と Android は 2 つのリソース セットです。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;

public class BuildAssetBundles {

    //路径,一般打包在这个StreamAssets文件夹中。
    string path = Application.streamingAssetsPath;

    [MenuItem("AssetBundle/打包所有的AssetBundle")]
    static void BuildAllAssetBundleNoral()    //体积最小,常用这个.
    {
        //                              路径,                 选项.体积最小,        平台.Windows64x.
        BuildPipeline.BuildAssetBundles(path, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows64);
        Debug.Log("AssetBundle打包完毕");
    }

    [MenuItem("AssetBundle/打包所有的AssetBundle[不压缩]")]
    static void BuildAllAssetBundleCompre()    //体积最大,加载速度最快.
    {
        //                              路径,                    选项.加载速度最快,                         平台.Windows64x.
        BuildPipeline.BuildAssetBundles(path, BuildAssetBundleOptions.UncompressedAssetBundle, BuildTarget.StandaloneWindows64);
        Debug.Log("AssetBundle打包完毕");
    }

    [MenuItem("AssetBundle/打包所有的AssetBundle[LZ4]")]
    static void BuildAllAssetBundleChunk()    //2者之间.
    {
        //                              路径,                     选项.2者之间,                       平台.Windows64x.
        BuildPipeline.BuildAssetBundles(path, BuildAssetBundleOptions.ChunkBasedCompression, BuildTarget.StandaloneWindows64);
        Debug.Log("AssetBundle打包完毕");
    }
}

 

リソースの読み込み:

1. AB リソースをメモリにロードする

AssetBundle ab = AssetBundle.LoadFromFile("AB パッケージのフルパス")

AB リソース バンドルを完全なパスの場所からメモリに読み込み、AssetBundle オブジェクトを返します。

2.ABリソースからリソースを取得する

T resName = ab.LoadAsset<T>("ゲームリソース名")

取得した AssetBundle オブジェクトの「リソースの読み込み」メソッドを介して、AssetBundle オブジェクトから対応するゲーム オブジェクト リソースを取得し、リソースを返します。この効果は、Resources.Load を使用してリソースをロードするのと似ています。

3. リソースのインスタンス化

Resources.Load によってメモリにロードされたリソースと同様に、オブジェクトは直接インスタンス化されて生成されます。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class AssetBundleLoad : MonoBehaviour
{
    void Start()
    {
        //从本地加载 AB 资源到内存.
        AssetBundle assetBundle = AssetBundle.LoadFromFile(Application.streamingAssetsPath + "player/player1.ab");

        //从 AB 资源中获取资源.
        GameObject player = assetBundle.LoadAsset<GameObject>("Necromancer");

        GameObject.Instantiate<GameObject>(player, Vector3.zero, Quaternion.identity);
    }
}

概要: 実際、Resources メソッドとの違いは、最初にメモリにロードしてから、使用するリソースを AB パッケージから取り出すという追加の手順があることです。

拡大:

パックすると、さらに2つのファイルができます

 

これは実際には AssetBundle ファイルの [ディレクトリ] であり、すべての ab リソース バンドルのパス アドレス (名前を含む) が格納されています. 最初のファイルはコンピューターが見るためのもので、2 番目の .manifest ファイルは私たちが見るためのものです.

おすすめ

転載: blog.csdn.net/weixin_55532142/article/details/125402131