コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【Unity】シンプルなアセットバンドルマネージャ「XAsset」紹介

はじめに

「XAsset」はシンプルなアセットバンドルマネージャです

サンプルシーン

f:id:baba_s:20180120205142p:plain

「XAsset」フォルダ内の「test」シーンを開いてゲームを再生すると
アセットバンドルの読み込みのサンプルを確認できます

アセットバンドルの作成

f:id:baba_s:20180120205407p:plain

Unity メニューの「Assets>XAsset>Build AssetBundles」を選択すると
アセットバンドルを作成することができます
アセットバンドルは Unity プロジェクト直下の
「AssetBundles」フォルダ内に作成されます

f:id:baba_s:20180120210310p:plain

アセットバンドルの構造は「Rules」ファイルで設定します

[BuildAssetsWithFilename]
searchPath=Assets/SampleAssets
searchPattern=*.prefab
searchOption=AllDirectories
bundleName=

[BuildAssetsWithAssetBundleName]
searchPath=Assets/SampleAssets
searchPattern=*.png
searchOption=AllDirectories
bundleName=sprites

上記のような書式で「Rules」ファイルに構造を定義します

エディタでの動作確認

f:id:baba_s:20180120211233p:plain

Unity メニューの「Assets>XAsset>Bundle Mode」をオンにすると
エディタ上でアセットバンドルを使用して動作確認できます
オフにすると、アセットバンドルは使用せずに動作確認できます

アセットバンドルを StreamingAssets にコピー

f:id:baba_s:20180120211532p:plain

Unity メニューの
「Assets>XAsset>Copy AssetBundles to StreamingAssets」を選択すると

f:id:baba_s:20180120211721p:plain

作成したアセットバンドルを「StreamingAssets」フォルダにコピーできます
これにより、ビルド後のゲームでもアセットバンドルを使用できるようになります

アセットバンドルの読み込み

private void Start()
{
    Assets.Initialize();
}

private IEnumerator LoadAsset()
{
    var assetPath = "Assets/SampleAssets/MyCube.prefab";

    var asset = Assets.Load<GameObject>( assetPath );
    if ( asset != null && asset.asset != null )
    {
        var go = GameObject.Instantiate( asset.asset );
        GameObject.Destroy( go, 1 );
    }
    asset.Unload();
    asset = null;

    var assetAsync = Assets.LoadAsync<GameObject>( assetPath );
    if ( assetAsync != null )
    {
        yield return assetAsync;
        if ( assetAsync.asset != null )
        {
            var go = GameObject.Instantiate( assetAsync.asset );
            GameObject.Destroy( go, 1 );
        }
        assetAsync.Unload();
        assetAsync = null;
    }
}

上記のようなコードを記述して
アセットバンドルの読み込みや破棄を行います

関連記事