首次提交
This commit is contained in:
149
Assets/Scripts/NBC/Asset/Runtime/Address/Addressable.cs
Normal file
149
Assets/Scripts/NBC/Asset/Runtime/Address/Addressable.cs
Normal file
@@ -0,0 +1,149 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
#if UNITY_EDITOR
|
||||
using System.Reflection;
|
||||
#endif
|
||||
|
||||
namespace NBC.Asset
|
||||
{
|
||||
public interface IAddressableImpl
|
||||
{
|
||||
public void Load();
|
||||
void UpdateBundleInfo(string bundleName);
|
||||
VersionData GetVersionData();
|
||||
PackageData GetPackageData(string packageName);
|
||||
AssetInfo GetAssetInfo(string path, Type type);
|
||||
BundleInfo GetBundleInfo(AssetInfo assetInfo);
|
||||
BundleInfo GetBundleInfo(BundleData bundleData);
|
||||
BundleInfo[] GetAllBundleInfo();
|
||||
BundleInfo[] GetAllDependBundleInfos(AssetInfo assetInfo);
|
||||
}
|
||||
|
||||
internal static class Addressable
|
||||
{
|
||||
public static Func<IAddressableImpl> CreateHandler { get; set; } = AddressableRuntimeImpl.CreateInstance;
|
||||
private static IAddressableImpl _impl;
|
||||
|
||||
public static void Load()
|
||||
{
|
||||
CreateHandlerImpl();
|
||||
_impl.Load();
|
||||
}
|
||||
|
||||
public static void UpdateBundleInfo(string bundleName)
|
||||
{
|
||||
_impl.UpdateBundleInfo(bundleName);
|
||||
}
|
||||
|
||||
#region Version
|
||||
|
||||
public static VersionData GetVersionData()
|
||||
{
|
||||
return _impl.GetVersionData();
|
||||
}
|
||||
|
||||
public static PackageData GetPackageData(string packageName)
|
||||
{
|
||||
return _impl.GetPackageData(packageName);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Asset
|
||||
|
||||
public static AssetInfo GetAssetInfo(string path, Type type)
|
||||
{
|
||||
return _impl.GetAssetInfo(path, type);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Bundle
|
||||
|
||||
public static BundleInfo GetBundleInfo(AssetInfo assetInfo)
|
||||
{
|
||||
return _impl.GetBundleInfo(assetInfo);
|
||||
}
|
||||
|
||||
public static BundleInfo GetBundleInfo(BundleData bundleData)
|
||||
{
|
||||
return _impl.GetBundleInfo(bundleData);
|
||||
}
|
||||
|
||||
public static BundleInfo[] GetAllBundleInfo()
|
||||
{
|
||||
return _impl.GetAllBundleInfo();
|
||||
}
|
||||
|
||||
public static BundleInfo[] GetAllDependBundleInfos(AssetInfo assetInfo)
|
||||
{
|
||||
return _impl.GetAllDependBundleInfos(assetInfo);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取当前版本可以解压到本地缓存的bundle包
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public static BundleInfo[] GetCanUnpackBundles()
|
||||
{
|
||||
var bundles = GetAllBundleInfo();
|
||||
return bundles.Where(bundle => bundle.LoadMode == BundleLoadMode.LoadFromStreaming).ToArray();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取当前版本可以下载到本地的bundle包
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public static BundleInfo[] GetCanDownloadBundles()
|
||||
{
|
||||
var bundles = GetAllBundleInfo();
|
||||
return bundles.Where(bundle => bundle.LoadMode == BundleLoadMode.LoadFromRemote).ToArray();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region 内部方法
|
||||
|
||||
private static void CreateHandlerImpl()
|
||||
{
|
||||
#if UNITY_EDITOR
|
||||
if (Const.Simulate)
|
||||
{
|
||||
_impl = GetAddressableEditImpl();
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
_impl = CreateHandler();
|
||||
}
|
||||
|
||||
#if UNITY_EDITOR
|
||||
/// <summary>
|
||||
/// 通过反射,实例化editor下的接口实现
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
private static IAddressableImpl GetAddressableEditImpl()
|
||||
{
|
||||
var ass = AppDomain.CurrentDomain.GetAssemblies()
|
||||
.First(assembly => assembly.GetName().Name == "NBC.Asset.Editor");
|
||||
var type = ass.GetType("NBC.Asset.Editor.AddressableEditImpl");
|
||||
var manifestFilePath = InvokePublicStaticMethod(type, "CreateInstance") as IAddressableImpl;
|
||||
return manifestFilePath;
|
||||
}
|
||||
|
||||
private static object InvokePublicStaticMethod(System.Type type, string method, params object[] parameters)
|
||||
{
|
||||
var methodInfo = type.GetMethod(method, BindingFlags.Public | BindingFlags.Static);
|
||||
if (methodInfo == null)
|
||||
{
|
||||
UnityEngine.Debug.LogError($"{type.FullName} not found method : {method}");
|
||||
return null;
|
||||
}
|
||||
|
||||
return methodInfo.Invoke(null, parameters);
|
||||
}
|
||||
#endif
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ef00a85e62d14d759a4b4cc90d922e44
|
||||
timeCreated: 1675932162
|
||||
@@ -0,0 +1,164 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using UnityEngine;
|
||||
|
||||
namespace NBC.Asset
|
||||
{
|
||||
internal class AddressableRuntimeImpl : IAddressableImpl
|
||||
{
|
||||
public static IAddressableImpl CreateInstance()
|
||||
{
|
||||
return new AddressableRuntimeImpl();
|
||||
}
|
||||
|
||||
private VersionDataReader _versionDataReader;
|
||||
|
||||
private readonly Dictionary<string, AssetInfo> _assetInfos = new Dictionary<string, AssetInfo>();
|
||||
private readonly Dictionary<string, BundleInfo> _bundleInfos = new Dictionary<string, BundleInfo>();
|
||||
|
||||
#region Init
|
||||
|
||||
public void Load()
|
||||
{
|
||||
_versionDataReader = new VersionDataReader();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region manifest Data
|
||||
|
||||
public VersionData GetVersionData()
|
||||
{
|
||||
return _versionDataReader.VersionData;
|
||||
}
|
||||
|
||||
public PackageData GetPackageData(string packageName)
|
||||
{
|
||||
return _versionDataReader.PackageDataList.Find(p => p.Name == packageName);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Assets
|
||||
|
||||
public AssetInfo GetAssetInfo(string path, Type type)
|
||||
{
|
||||
path = _versionDataReader.GetAssetRealPath(path);
|
||||
var guid = Util.GetAssetGUID(path, type);
|
||||
if (!_assetInfos.TryGetValue(guid, out var info))
|
||||
{
|
||||
var data = _versionDataReader.GetAsset(path);
|
||||
if (data != null)
|
||||
{
|
||||
info = new AssetInfo(data, type);
|
||||
_assetInfos[info.GUID] = info;
|
||||
}
|
||||
}
|
||||
|
||||
return info;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Bundles
|
||||
|
||||
/// <summary>
|
||||
/// 刷新bundle相关信息
|
||||
/// </summary>
|
||||
public void UpdateBundleInfo(string bundleName)
|
||||
{
|
||||
if (string.IsNullOrEmpty(bundleName))
|
||||
{
|
||||
foreach (var bundle in _bundleInfos.Values)
|
||||
{
|
||||
bundle.LoadMode = GetBundleLoadMode(bundle.Bundle);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (_bundleInfos.TryGetValue(bundleName, out var bundleInfo))
|
||||
{
|
||||
bundleInfo.LoadMode = GetBundleLoadMode(bundleInfo.Bundle);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public BundleInfo GetBundleInfo(AssetInfo assetInfo)
|
||||
{
|
||||
var bundleData = _versionDataReader.GetBundleByAsset(assetInfo.Path);
|
||||
return GetBundleInfo(bundleData);
|
||||
}
|
||||
|
||||
public BundleInfo GetBundleInfo(BundleData bundleData)
|
||||
{
|
||||
if (bundleData == null)
|
||||
throw new Exception("BundleData NOT NULL!");
|
||||
if (!_bundleInfos.TryGetValue(bundleData.Name, out var bundleInfo))
|
||||
{
|
||||
bundleInfo = CreateBundleInfo(bundleData);
|
||||
}
|
||||
|
||||
return bundleInfo;
|
||||
}
|
||||
|
||||
public BundleInfo[] GetAllBundleInfo()
|
||||
{
|
||||
var bundles = _versionDataReader.GetAllBundle();
|
||||
List<BundleInfo> list = new List<BundleInfo>(bundles.Count);
|
||||
foreach (var bundle in bundles)
|
||||
{
|
||||
list.Add(GetBundleInfo(bundle));
|
||||
}
|
||||
|
||||
return list.ToArray();
|
||||
}
|
||||
|
||||
public BundleInfo[] GetAllDependBundleInfos(AssetInfo assetInfo)
|
||||
{
|
||||
var arr = _versionDataReader.GetAllDependBundle(assetInfo.Path);
|
||||
if (arr != null)
|
||||
{
|
||||
List<BundleInfo> list = new List<BundleInfo>();
|
||||
foreach (var bundle in arr)
|
||||
{
|
||||
list.Add(GetBundleInfo(bundle));
|
||||
}
|
||||
|
||||
return list.ToArray();
|
||||
}
|
||||
|
||||
return Array.Empty<BundleInfo>();
|
||||
}
|
||||
|
||||
|
||||
private BundleInfo CreateBundleInfo(BundleData bundleData)
|
||||
{
|
||||
var bundleInfo = new BundleInfo(bundleData)
|
||||
{
|
||||
LoadMode = GetBundleLoadMode(bundleData)
|
||||
};
|
||||
_bundleInfos[bundleData.Name] = bundleInfo;
|
||||
return bundleInfo;
|
||||
}
|
||||
|
||||
private BundleLoadMode GetBundleLoadMode(BundleData bundleData)
|
||||
{
|
||||
if (File.Exists(bundleData.CachedDataFilePath))
|
||||
{
|
||||
return BundleLoadMode.LoadFromCache;
|
||||
}
|
||||
|
||||
|
||||
if (StreamingAssetsUtil.FileExists(bundleData.NameHash))
|
||||
{
|
||||
return BundleLoadMode.LoadFromStreaming;
|
||||
}
|
||||
|
||||
return BundleLoadMode.LoadFromRemote;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4ad9800ddd244d50b5d4c7bc18f578b9
|
||||
timeCreated: 1677723858
|
||||
3
Assets/Scripts/NBC/Asset/Runtime/Address/Data.meta
Normal file
3
Assets/Scripts/NBC/Asset/Runtime/Address/Data.meta
Normal file
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 017fad8ee8a545caa126cdaad404c93d
|
||||
timeCreated: 1677636239
|
||||
61
Assets/Scripts/NBC/Asset/Runtime/Address/Data/AssetData.cs
Normal file
61
Assets/Scripts/NBC/Asset/Runtime/Address/Data/AssetData.cs
Normal file
@@ -0,0 +1,61 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
namespace NBC.Asset
|
||||
{
|
||||
[Serializable]
|
||||
public class AssetData
|
||||
{
|
||||
public string Name;
|
||||
public int Bundle;
|
||||
|
||||
/// <summary>
|
||||
/// 所属目录
|
||||
/// </summary>
|
||||
public int Dir;
|
||||
|
||||
// /// <summary>
|
||||
// /// 依赖的bundle
|
||||
// /// </summary>
|
||||
// public List<int> Deps = new List<int>();
|
||||
|
||||
/// <summary>
|
||||
/// 资源可寻址地址
|
||||
/// </summary>
|
||||
public string Address;
|
||||
|
||||
/// <summary>
|
||||
/// 资源真实地址
|
||||
/// </summary>
|
||||
public string Path { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 资源Bundle
|
||||
/// </summary>
|
||||
public string BundleName { get; set; }
|
||||
|
||||
|
||||
public string[] Tags { get; internal set; }
|
||||
|
||||
/// <summary>
|
||||
/// 是否包含Tag
|
||||
/// </summary>
|
||||
public bool HasTag(string[] tags)
|
||||
{
|
||||
if (tags == null || tags.Length == 0)
|
||||
return false;
|
||||
if (Tags == null || Tags.Length == 0)
|
||||
return false;
|
||||
|
||||
foreach (var tag in tags)
|
||||
{
|
||||
if (Tags.Contains(tag))
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 591cdedd5ee84c1c98d1d80d4c8f44fc
|
||||
timeCreated: 1677230741
|
||||
114
Assets/Scripts/NBC/Asset/Runtime/Address/Data/BundleData.cs
Normal file
114
Assets/Scripts/NBC/Asset/Runtime/Address/Data/BundleData.cs
Normal file
@@ -0,0 +1,114 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace NBC.Asset
|
||||
{
|
||||
[Serializable]
|
||||
public class BundleData
|
||||
{
|
||||
public string Name;
|
||||
public string Hash;
|
||||
public int Size;
|
||||
|
||||
// /// <summary>
|
||||
// /// 加载方法
|
||||
// /// </summary>
|
||||
// public byte LoadMethod;
|
||||
|
||||
/// <summary>
|
||||
/// 资源包的分类标签
|
||||
/// </summary>
|
||||
public string[] Tags;
|
||||
|
||||
/// <summary>
|
||||
/// 依赖的bundleId
|
||||
/// </summary>
|
||||
public List<int> Deps = new List<int>();
|
||||
|
||||
/// <summary>
|
||||
/// 所属的包裹名称
|
||||
/// </summary>
|
||||
public string PackageName { set; get; }
|
||||
|
||||
public List<string> DependBundles { get; private set; } = new List<string>();
|
||||
|
||||
private string _nameHash = string.Empty;
|
||||
|
||||
public string NameHash
|
||||
{
|
||||
get
|
||||
{
|
||||
if (!string.IsNullOrEmpty(_nameHash)) return _nameHash;
|
||||
_nameHash = Util.NameAddHash(Name, Hash);
|
||||
return _nameHash;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 内置文件路径
|
||||
/// </summary>
|
||||
private string _streamingFilePath;
|
||||
|
||||
public string StreamingFilePath
|
||||
{
|
||||
get
|
||||
{
|
||||
if (string.IsNullOrEmpty(_streamingFilePath) == false)
|
||||
return _streamingFilePath;
|
||||
|
||||
_streamingFilePath = Const.GetStreamingPath(NameHash);
|
||||
return _streamingFilePath;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 缓存的数据文件路径
|
||||
/// </summary>
|
||||
private string _cachedDataFilePath;
|
||||
|
||||
public string CachedDataFilePath
|
||||
{
|
||||
get
|
||||
{
|
||||
if (string.IsNullOrEmpty(_cachedDataFilePath) == false)
|
||||
return _cachedDataFilePath;
|
||||
_cachedDataFilePath = Const.GetCachePath(NameHash);
|
||||
return _cachedDataFilePath;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 远程的数据文件路径
|
||||
/// </summary>
|
||||
private string _remoteDataFilePath;
|
||||
|
||||
public string RemoteDataFilePath
|
||||
{
|
||||
get
|
||||
{
|
||||
if (string.IsNullOrEmpty(_remoteDataFilePath) == false)
|
||||
return _remoteDataFilePath;
|
||||
_remoteDataFilePath = Const.GetRemotePath(NameHash);
|
||||
return _remoteDataFilePath;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 临时的数据文件路径
|
||||
/// </summary>
|
||||
private string _tempDataFilePath;
|
||||
|
||||
public string TempDataFilePath
|
||||
{
|
||||
get
|
||||
{
|
||||
if (string.IsNullOrEmpty(_tempDataFilePath) == false)
|
||||
return _tempDataFilePath;
|
||||
|
||||
_tempDataFilePath = $"{CachedDataFilePath}.temp";
|
||||
return _tempDataFilePath;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: de6f2556c6e147afb0269b9ca02c6260
|
||||
timeCreated: 1677230723
|
||||
15
Assets/Scripts/NBC/Asset/Runtime/Address/Data/PackageData.cs
Normal file
15
Assets/Scripts/NBC/Asset/Runtime/Address/Data/PackageData.cs
Normal file
@@ -0,0 +1,15 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace NBC.Asset
|
||||
{
|
||||
[Serializable]
|
||||
public class PackageData
|
||||
{
|
||||
public string Name;
|
||||
public int Def;
|
||||
public List<string> Dirs;
|
||||
public List<AssetData> Assets;
|
||||
public List<BundleData> Bundles;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 10936edd968649ecbf4b7a1bb20e84cf
|
||||
timeCreated: 1678156381
|
||||
63
Assets/Scripts/NBC/Asset/Runtime/Address/Data/VersionData.cs
Normal file
63
Assets/Scripts/NBC/Asset/Runtime/Address/Data/VersionData.cs
Normal file
@@ -0,0 +1,63 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace NBC.Asset
|
||||
{
|
||||
// [Serializable]
|
||||
// public class VersionPackagesData
|
||||
// {
|
||||
// public string Ver;
|
||||
// public string Name;
|
||||
// public string Hash;
|
||||
// public int Size;
|
||||
// public int Def;
|
||||
// public string NameHash => $"{Name}_{Hash}.json";
|
||||
// }
|
||||
//
|
||||
// [Serializable]
|
||||
// public class VersionData
|
||||
// {
|
||||
// /// <summary>
|
||||
// /// app版本号
|
||||
// /// </summary>
|
||||
// public string AppVer;
|
||||
//
|
||||
// /// <summary>
|
||||
// /// 版本包
|
||||
// /// </summary>
|
||||
// public List<VersionPackagesData> Packages = new List<VersionPackagesData>();
|
||||
//
|
||||
// /// <summary>
|
||||
// /// 导出时间
|
||||
// /// </summary>
|
||||
// public long BuildTime;
|
||||
// }
|
||||
|
||||
[Serializable]
|
||||
public class VersionPackageData
|
||||
{
|
||||
public List<PackageData> Packages = new List<PackageData>();
|
||||
}
|
||||
|
||||
[Serializable]
|
||||
public class VersionData
|
||||
{
|
||||
/// <summary>
|
||||
/// app版本号
|
||||
/// </summary>
|
||||
public string AppVer;
|
||||
|
||||
/// <summary>
|
||||
/// 版本包hash
|
||||
/// </summary>
|
||||
public string Hash;
|
||||
|
||||
public long Size;
|
||||
/// <summary>
|
||||
/// 导出时间
|
||||
/// </summary>
|
||||
public long BuildTime;
|
||||
|
||||
public string NameHash => $"packages_{Hash}.json";
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 671aac8f73924f1bae2ef7753fb6b239
|
||||
timeCreated: 1675820403
|
||||
@@ -0,0 +1,139 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using UnityEngine;
|
||||
|
||||
namespace NBC.Asset
|
||||
{
|
||||
internal class VersionDataReader
|
||||
{
|
||||
private readonly Dictionary<string, BundleData> _bundles = new Dictionary<string, BundleData>();
|
||||
|
||||
private readonly Dictionary<string, AssetData> _assets = new Dictionary<string, AssetData>();
|
||||
private readonly Dictionary<string, string> _addressablePath = new Dictionary<string, string>();
|
||||
public VersionData VersionData { get; private set; }
|
||||
|
||||
public List<PackageData> PackageDataList { get; private set; } = new List<PackageData>();
|
||||
|
||||
public VersionDataReader()
|
||||
{
|
||||
ReadVersionData();
|
||||
}
|
||||
|
||||
public string GetAssetRealPath(string path)
|
||||
{
|
||||
return _addressablePath.TryGetValue(path, out var realPath) ? realPath : path;
|
||||
}
|
||||
|
||||
public AssetData GetAsset(string path)
|
||||
{
|
||||
return _assets.TryGetValue(path, out var assetRef) ? assetRef : null;
|
||||
}
|
||||
|
||||
public List<BundleData> GetAllBundle()
|
||||
{
|
||||
List<BundleData> list = new List<BundleData>(_bundles.Count);
|
||||
list.AddRange(_bundles.Values);
|
||||
return list;
|
||||
}
|
||||
|
||||
public BundleData GetBundle(string name)
|
||||
{
|
||||
return _bundles.TryGetValue(name, out var bundleRef) ? bundleRef : null;
|
||||
}
|
||||
|
||||
public BundleData GetBundleByAsset(string assetPath)
|
||||
{
|
||||
var asset = GetAsset(assetPath);
|
||||
return asset == null ? null : GetBundle(asset.BundleName);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取资源所需的所有bundle信息(下标0为所在包)
|
||||
/// </summary>
|
||||
/// <param name="path">资源原始地址</param>
|
||||
/// <returns></returns>
|
||||
public BundleData[] GetAllDependBundle(string path)
|
||||
{
|
||||
if (_assets.TryGetValue(path, out var assetData))
|
||||
{
|
||||
if (_bundles.TryGetValue(assetData.BundleName, out var bundleData))
|
||||
{
|
||||
var needBundle = new List<BundleData> { bundleData };
|
||||
needBundle.AddRange(bundleData.DependBundles.Select(bundle => _bundles[bundle]));
|
||||
return needBundle.ToArray();
|
||||
}
|
||||
}
|
||||
|
||||
return Array.Empty<BundleData>();
|
||||
}
|
||||
|
||||
private void ReadVersionData()
|
||||
{
|
||||
VersionData = ReadJson<VersionData>(Const.VersionFileName);
|
||||
if (VersionData != null)
|
||||
{
|
||||
var packageData =
|
||||
ReadJson<VersionPackageData>(VersionData.NameHash);
|
||||
if (packageData != null)
|
||||
{
|
||||
foreach (var package in packageData.Packages)
|
||||
{
|
||||
ReadPackage(package);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogError("version data is null");
|
||||
}
|
||||
}
|
||||
|
||||
private void ReadPackage(PackageData packageData)
|
||||
{
|
||||
if (packageData != null)
|
||||
{
|
||||
foreach (var bundle in packageData.Bundles)
|
||||
{
|
||||
foreach (var dep in bundle.Deps)
|
||||
{
|
||||
var depBundle = packageData.Bundles[dep];
|
||||
if (depBundle != null)
|
||||
{
|
||||
bundle.DependBundles.Add(depBundle.Name);
|
||||
}
|
||||
}
|
||||
|
||||
bundle.PackageName = packageData.Name;
|
||||
_bundles[bundle.Name] = bundle;
|
||||
}
|
||||
|
||||
foreach (var asset in packageData.Assets)
|
||||
{
|
||||
if (asset.Dir < 0 || asset.Dir >= packageData.Dirs.Count) continue;
|
||||
if (asset.Bundle < 0 || asset.Bundle >= packageData.Bundles.Count) continue;
|
||||
var dir = packageData.Dirs[asset.Dir];
|
||||
var bundle = packageData.Bundles[asset.Bundle];
|
||||
asset.Path = $"{dir}/{asset.Name}";
|
||||
asset.BundleName = bundle.Name;
|
||||
_assets[asset.Path] = asset;
|
||||
var filePath = $"{dir}/{Path.GetFileNameWithoutExtension(asset.Name)}";
|
||||
//去除后缀后,默认加入寻址
|
||||
_addressablePath[filePath] = asset.Path;
|
||||
if (asset.Address != asset.Path)
|
||||
{
|
||||
_addressablePath[asset.Address] = asset.Path;
|
||||
}
|
||||
}
|
||||
|
||||
PackageDataList.Add(packageData);
|
||||
}
|
||||
}
|
||||
|
||||
private T ReadJson<T>(string fileName) where T : new()
|
||||
{
|
||||
return Util.ReadJson<T>(Const.GetCachePath(fileName));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: df6f17d0c94e4f9ca2145fab20c9052f
|
||||
timeCreated: 1678083955
|
||||
3
Assets/Scripts/NBC/Asset/Runtime/Address/Info.meta
Normal file
3
Assets/Scripts/NBC/Asset/Runtime/Address/Info.meta
Normal file
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d09538ede05f44e185e003b29093c3c3
|
||||
timeCreated: 1677723806
|
||||
64
Assets/Scripts/NBC/Asset/Runtime/Address/Info/AssetInfo.cs
Normal file
64
Assets/Scripts/NBC/Asset/Runtime/Address/Info/AssetInfo.cs
Normal file
@@ -0,0 +1,64 @@
|
||||
using System;
|
||||
|
||||
namespace NBC.Asset
|
||||
{
|
||||
public class AssetInfo
|
||||
{
|
||||
private readonly AssetData _assetData;
|
||||
|
||||
// public AssetData Data => _assetData;
|
||||
|
||||
/// <summary>
|
||||
/// 资源路径
|
||||
/// </summary>
|
||||
public string Path { private set; get; }
|
||||
|
||||
/// <summary>
|
||||
/// 资源类型
|
||||
/// </summary>
|
||||
public Type AssetType { private set; get; }
|
||||
|
||||
|
||||
private string _providerGUID;
|
||||
|
||||
/// <summary>
|
||||
/// 唯一标识符
|
||||
/// </summary>
|
||||
public string GUID
|
||||
{
|
||||
get
|
||||
{
|
||||
if (!string.IsNullOrEmpty(_providerGUID))
|
||||
return _providerGUID;
|
||||
|
||||
_providerGUID = Util.GetAssetGUID(Path, AssetType);
|
||||
return _providerGUID;
|
||||
}
|
||||
}
|
||||
|
||||
public AssetInfo(AssetData assetData, System.Type assetType)
|
||||
{
|
||||
if (assetData == null)
|
||||
throw new Exception("assetData is null!");
|
||||
|
||||
_assetData = assetData;
|
||||
AssetType = assetType;
|
||||
Path = assetData.Path;
|
||||
}
|
||||
|
||||
public AssetInfo(AssetData assetData)
|
||||
{
|
||||
if (assetData == null)
|
||||
throw new System.Exception("assetData is null!");
|
||||
|
||||
_assetData = assetData;
|
||||
AssetType = null;
|
||||
Path = assetData.Path;
|
||||
}
|
||||
|
||||
public bool HasTag(string[] tags)
|
||||
{
|
||||
return _assetData.HasTag(tags);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7edf10c26d554a3d8c03c099062093dd
|
||||
timeCreated: 1676965484
|
||||
44
Assets/Scripts/NBC/Asset/Runtime/Address/Info/BundleInfo.cs
Normal file
44
Assets/Scripts/NBC/Asset/Runtime/Address/Info/BundleInfo.cs
Normal file
@@ -0,0 +1,44 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace NBC.Asset
|
||||
{
|
||||
public class BundleInfo
|
||||
{
|
||||
public readonly BundleData Bundle;
|
||||
public BundleLoadMode LoadMode;
|
||||
|
||||
|
||||
public BundleInfo(BundleData bundleData)
|
||||
{
|
||||
Bundle = bundleData;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 资源地址
|
||||
/// </summary>
|
||||
public string BundlePath
|
||||
{
|
||||
get
|
||||
{
|
||||
if (LoadMode == BundleLoadMode.LoadFromStreaming)
|
||||
{
|
||||
Debug.Log($"LoadMode={LoadMode} path+{Bundle.StreamingFilePath}");
|
||||
return Bundle.StreamingFilePath;
|
||||
}
|
||||
|
||||
if (LoadMode == BundleLoadMode.LoadFromCache)
|
||||
{
|
||||
Debug.Log($"LoadMode={LoadMode} path+{Bundle.CachedDataFilePath}");
|
||||
return Bundle.CachedDataFilePath;
|
||||
}
|
||||
|
||||
if (LoadMode == BundleLoadMode.LoadFromRemote)
|
||||
{
|
||||
return Bundle.RemoteDataFilePath;
|
||||
}
|
||||
|
||||
return string.Empty;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 5a2f72ad8fc649bc805449e37b9540f2
|
||||
timeCreated: 1677118210
|
||||
Reference in New Issue
Block a user