您最多选择25个主题
主题必须以中文或者字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
117 行
4.7 KiB
117 行
4.7 KiB
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using UnityEditor;
|
|
using UnityEngine;
|
|
namespace MetaCity.BundleKit.Editor
|
|
{
|
|
[Serializable]
|
|
public class BuildCatalogCollection
|
|
{
|
|
public BuildCatalog[] catalogs;
|
|
}
|
|
|
|
[Serializable]
|
|
public class BuildCatalog
|
|
{
|
|
//name of the bundle (used as the unique key to reference to the bundle regardless of its version)
|
|
public string bundleName;
|
|
|
|
//hash of the bundle (may be different for different version of the same bundle)
|
|
public string bundleHash;
|
|
|
|
//type of the bundle: prefab/scene/... (determines how the bundle should be loaded in the Launcher)
|
|
public string bundleType;
|
|
//Whether the scene is multiPlayer(only works on Scene Type)
|
|
public bool multiPlayer;
|
|
//the target platform of this bundle
|
|
public string bundlePlatform;
|
|
|
|
//the list of bundle names that this bundle dependents on
|
|
public string[] bundleDependencies;
|
|
|
|
//the full path of the built bundle file, can be used to validate bundle when incrementally adding new catalog
|
|
public string bundleLocalPath;
|
|
|
|
public override string ToString()
|
|
{
|
|
return $"[Name: {bundleName}({bundleType}:{bundleHash}), Dependencies: {string.Join(",", bundleDependencies)}, LocalPath: {bundleLocalPath}";
|
|
}
|
|
}
|
|
|
|
public static class CatalogUtilities
|
|
{
|
|
private static string CreateDependentBundleKey(string bundleName, string bundleHash)
|
|
{
|
|
return $"{bundleName}-{bundleHash}";
|
|
}
|
|
|
|
public static BuildCatalog CreateMaterialCatalog(BuildTarget platform, string vrmModelName, AssetBundleManifest manifest)
|
|
{
|
|
var bundleName = manifest.GetAllAssetBundles()[0];
|
|
return new BuildCatalog
|
|
{
|
|
bundleName = bundleName,
|
|
bundleHash = manifest.GetAssetBundleHash(bundleName).ToString(),
|
|
bundleType = "Prefab",
|
|
bundlePlatform = platform.ToString(),
|
|
bundleDependencies = Array.Empty<string>(),
|
|
bundleLocalPath = Path.Combine(Constants.AvatarBundleFolderPath, bundleName)
|
|
};
|
|
}
|
|
public static BuildCatalog CreateVRMAvatarCatalog(BuildTarget platform, string vrmName, string vrmHash,string dependency,string vrmPath)
|
|
{
|
|
return new BuildCatalog
|
|
{
|
|
bundleName = vrmName,
|
|
bundleHash = vrmHash,
|
|
bundleType = "Avatar",
|
|
bundlePlatform = platform.ToString(),
|
|
bundleDependencies = string.IsNullOrEmpty(dependency)?Array.Empty<string>():new string[1]{dependency},
|
|
bundleLocalPath = vrmPath
|
|
};
|
|
}
|
|
public static List<BuildCatalog> CreateCatalog(PlayMode playMode,BuildTarget platform, AssetBundleManifest manifest, List<MetacityBundle> bundles)
|
|
{
|
|
var catalogs = new List<BuildCatalog>();
|
|
var allBundlesInManifest = new List<string>(manifest.GetAllAssetBundles());
|
|
foreach (var bundle in bundles)
|
|
{
|
|
if (!bundle.NeedUpload)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var bundleName = bundle.BundleBuild.assetBundleName;
|
|
|
|
if (!allBundlesInManifest.Contains(bundleName))
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var allDependencies = manifest.GetAllDependencies(bundleName);
|
|
var dependentUniqueKeys = new string[allDependencies.Length];
|
|
|
|
for (var i = 0; i < allDependencies.Length; i++)
|
|
{
|
|
var dependentBundleName = allDependencies[i];
|
|
var bundleHash = manifest.GetAssetBundleHash(dependentBundleName).ToString();
|
|
dependentUniqueKeys[i] = CreateDependentBundleKey(dependentBundleName, bundleHash);
|
|
}
|
|
|
|
catalogs.Add(new BuildCatalog
|
|
{
|
|
bundleName = bundleName,
|
|
bundleHash = manifest.GetAssetBundleHash(bundleName).ToString(),
|
|
bundleType = bundle.BundleType.ToString(),
|
|
bundlePlatform = platform.ToString(),
|
|
multiPlayer=playMode==PlayMode.MultiPlayer,
|
|
bundleDependencies = dependentUniqueKeys,
|
|
bundleLocalPath = Path.Combine(Constants.BundleFolderPath, bundleName)
|
|
});
|
|
}
|
|
|
|
return catalogs;
|
|
}
|
|
}
|
|
}
|