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 ファイルは私たちが見るためのものです.