WooAsset-个性化

  1. 打包个性化
  2. 加载个性化
  3. 资源加密

打包个性化

 //个性化打包流程
public abstract class IAssetBuild
{
//是否记录这个路径
bool GetIsRecord(string path) ;
//自定义 资源 Tag (可以按照tag加载一组资源)
List<string> GetAssetTags(string path) ;
//自定义版本规则
string GetVersion(string settingVersion, AssetTaskContext context);

//更具一个路径返回资源类型(覆盖)
AssetType CoverAssetType(string path, AssetType type) ;

// 自定义资源分组
void Create(List<EditorAssetData> assets, List<EditorBundleData> result, EditorPackageData pkg);

//自定义加密
IAssetStreamEncrypt GetBundleEncrypt(EditorPackageData pkg, EditorBundleData data, IAssetStreamEncrypt en) ;
int GetEncryptCode(IAssetStreamEncrypt en);
IAssetStreamEncrypt GetEncryptByCode(int code)

}




加载个性化

///写一个 class 继承于 AssetsSetting
public abstract class AssetsSetting
{
  ///是否需要拷贝内置资源
  public virtual bool NeedCopyStreamBundles() {}
  ///一帧内最多多少毫秒在加载资源
  public virtual long GetLoadingMaxTimeSlice(){}

  ///下载的路径
  //举例 :https://xxx.xxx.xx
  //http://127.0.0.1:8080
  // Application.StreamingPath 
  protected virtual string GetBaseUrl() {}
  ///自定义 bundle 去哪里下载
public virtual string GetUrlByBundleName(string buildTarget, string bundleName) => $"{GetBaseUrl()}/{buildTarget}/{bundleName}";
 public virtual string GetUrlByBundleName(string buildTarget, string version, string bundleName) => $"{GetBaseUrl()}/{buildTarget}/{version}/{bundleName}";

  /// 如果本地没有是否需要保存文件
  // GetBundleAlwaysFromWebRequest 返回 true 该选项不起效
  public virtual bool GetSaveBundlesWhenPlaying(){}
  //永远从远端下载
   public virtual bool GetBundleAlwaysFromWebRequest() {}

  /// 下载超时
  public virtual int GetWebRequestTimeout() {}
  ///下载重试次数
  public virtual int GetWebRequestRetryCount() {  }



//是否开启模糊加载
//Assets.loadAsset("Assets/a.png")
//开启后 Assets.loadAsset("Assets/a")
//注意 开启之后,同一个文件夹下不可以出现同名文件
   public virtual string GetFuzzySearch(){}
  ///是否自动卸载 AB
  //如果未开启,需要在合适的时机手动调用   Assets.UnloadBundles
  public virtual bool GetAutoUnloadBundle() {}


  ///资源加密方式
  public virtual IAssetStreamEncrypt GetEncrypt(int code) {}


  /// 自定义的资源生命周期管理,bundle和asset均可以
  public virtual IAssetLife GetAssetLife(){}

}

资源加密

//个性化加密

    public interface IAssetEncrypt
    {
        byte[] Encode(string bundleName, byte[] buffer);
        byte[] Decode(string bundleName, byte[] buffer);
        byte[] Decode(string bundleName, byte[] buffer, int offset, int length);


    }