using UnityEditor;
using System.IO;
using UnityEngine;
public static class CreateAssetBundles
{
private const string AssetBundleDirectory2D = "Assets/AssetBundles/2D";
private const string AssetBundleDirectoryAR = "Assets/AssetBundles/AR";
private const string AssetBundleDirectoryVR = "Assets/AssetBundles/VR";
[MenuItem("Assets/Build AssetBundles (All)")]
static void BuildAssetBundlesAll()
{
// use the 2D Assets for generating the preview images
CreatePreviews(BuildAssetBundles2D(), AssetBundleDirectory2D);
BuildAssetBundlesVR();
BuildAssetBundlesAR();
}
[MenuItem("Assets/Build AssetBundles (2D)")]
static void BuildAssetBundles2DWithPreview()
{
CreatePreviews(BuildAssetBundles2D(), AssetBundleDirectory2D);
}
[MenuItem("Assets/Build AssetBundles (AR)")]
static void BuildAssetBundlesARWithPreview()
{
CreatePreviews(BuildAssetBundlesAR(), AssetBundleDirectoryAR);
}
[MenuItem("Assets/Build AssetBundles (VR)")]
static void BuildAssetBundlesVRWithPreview()
{
CreatePreviews(BuildAssetBundlesVR(), AssetBundleDirectoryVR);
}
///
/// Create preview images of all assets found in the manifest and store them at the same level as
/// assetBundleDirectory
///
/// Manifest containing all assets that have to be processed
/// The folder where the assets can be found
private static void CreatePreviews(AssetBundleManifest manifest, string assetBundleDirectory)
{
foreach (var assetBundleName in manifest.GetAllAssetBundles())
{
var path = assetBundleDirectory + "/" + assetBundleName;
var assetBundle = AssetBundle.LoadFromFile(path);
var data = AssetPreview.GetAssetPreview(assetBundle.LoadAllAssets()[0]).EncodeToPNG();
var previewPath = $"{assetBundleDirectory}/../Preview";
Directory.CreateDirectory(previewPath);
File.WriteAllBytes($"{previewPath}/{assetBundleName}.png", data);
}
}
private static AssetBundleManifest BuildAssetBundles2D()
{
Directory.CreateDirectory(AssetBundleDirectory2D);
return BuildPipeline.BuildAssetBundles(AssetBundleDirectory2D,
BuildAssetBundleOptions.None,
BuildTarget.StandaloneWindows64);
}
private static AssetBundleManifest BuildAssetBundlesAR()
{
Directory.CreateDirectory(AssetBundleDirectoryAR);
return BuildPipeline.BuildAssetBundles(AssetBundleDirectoryAR,
BuildAssetBundleOptions.None,
BuildTarget.WSAPlayer);
}
private static AssetBundleManifest BuildAssetBundlesVR()
{
Directory.CreateDirectory(AssetBundleDirectoryVR);
return BuildPipeline.BuildAssetBundles(AssetBundleDirectoryVR,
BuildAssetBundleOptions.None,
BuildTarget.Android);
}
}