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); } }