ソースコード
using System;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
using JetBrains.Annotations;
using UnityEngine;
[Serializable]
[SuppressMessage( "ReSharper", "InconsistentNaming" )]
public struct JsonAssetBundleManifest
{
[SerializeField][UsedImplicitly] private JsonAssetBundleBuild[] builds;
public JsonAssetBundleManifest( AssetBundleManifest manifest )
{
builds = manifest
.GetAllAssetBundles()
.Select( x => new JsonAssetBundleBuild( manifest, x ) )
.ToArray()
;
}
public override string ToString()
{
return JsonUtility.ToJson( this, true );
}
}
[Serializable]
[SuppressMessage( "ReSharper", "InconsistentNaming" )]
public struct JsonAssetBundleBuild
{
[SerializeField][UsedImplicitly] private string assetBundleName;
[SerializeField][UsedImplicitly] private string[] assetNames;
public JsonAssetBundleBuild
(
AssetBundleManifest manifest,
string assetBundleName
)
{
this.assetBundleName = assetBundleName;
assetNames = manifest.GetDirectDependencies( assetBundleName );
}
public override string ToString()
{
return JsonUtility.ToJson( this, true );
}
}
使用例
using UnityEngine;
public sealed class Example : MonoBehaviour
{
private void Start()
{
var assetBundle = AssetBundle.LoadFromFile( "AssetBundle/Android" );
var manifest = assetBundle.LoadAsset<AssetBundleManifest>( "AssetBundleManifest" );
var json = new JsonAssetBundleManifest( manifest ).ToString();
Debug.Log( json );
GUIUtility.systemCopyBuffer = json;
assetBundle.Unload( false );
}
}