Unity安卓加载StreamingAssets目录文件夹下的AB包资源且将资源拷贝至安卓持久化目录(PersistentDataPath)下

一、将资源打包为安卓平台下的AB包

①核心脚本如下所示

string strABOutPathDIR = Application.streamingAssetsPath+"/Android";
BuildPipeline.BuildAssetBundles(strABOutPathDIR, BuildAssetBundleOptions.ChunkBasedCompression, BuildTarget.Android);

/*
关于AssetBundle中BuildAssetBundleOptions各个选项的说明:
①BuildAssetBundleOptions.None:使用LZMA算法压缩,压缩的包更小,但是加载时间更长。使用 之前需要整体解压。一旦被解压,这个包会使用LZ4重新压缩。使用资源的时候不需要整体解压。 在下载的时候可以使用LZMA算法,一旦它被下载了之后,它会使用LZ4算法保存到本地上; 
②BuildAssetBundleOptions.UncompressedAssetBundle:不压缩,包大,加载快; 
③BuildAssetBundleOptions.ChunkBasedCompression:使用LZ4压缩,压缩率没有LZMA高,但是 我们可以加载指定资源而不用解压全部注意使用LZ4压缩,可以获得可以跟不压缩想媲美的加载速度,而且比不压缩文件要小。 BuildTarget选择build出来的AB包要使用的平台
*/

②打包出来的目录结构如下

Unity安卓加载StreamingAssets目录文件夹下的AB包资源且将资源拷贝至安卓持久化目录(PersistentDataPath)下_第1张图片

二、加载安卓AB包

①核心脚本如下:

        /// 
        /// 加载AB包预设资源方法
        /// 
        /// AB预设的名称
        /// 返回加载到的AB包资源预设物体
        public static GameObject LoadABPrefabs(string prefabsName)
        {
            if (string.IsNullOrEmpty(prefabsName))
            {
                return null;
            }
            string strABPath = Application.streamingAssetsPath+"/Android"+"/"+ prefabsName;
            AssetBundle bundle = AssetBundle.LoadFromFile(strABPath);
            GameObject tmpObj = bundle.LoadAsset(prefabsName) as GameObject;
            if (tmpObj != null)
            {
                GameObject go = Instantiate(tmpObj) as GameObject;
                bundle.Unload(false);
                return go;
            }
            return null;
        }

注意:安卓平台下访问StreamingAssets目录文件下的AB包路径为:

"jar:file://" + Application.dataPath + "!/assets"

并且Unity中的 Application.streamingAssetsPath方法在不同平台下会自动转换,比如

①Android平台下会自动转为: 

"jar:file://" + Application.dataPath + "!/assets"

②IOS平台会自动转为:

Application.dataPath + "/Raw";

 

Unity官方说明文档:https://docs.unity3d.com/Manual/StreamingAssets.html

②安卓下加载StreamingAssets目录下的AB资源

GameObject go = LoadABRES.LoadABPrefabs("2duicanvas");

 

三、把StreamingAssets目录下的文件 拷贝到安卓持久化目录(persistentDataPath)

①核心代码如下

    string strAndroidStreamingAssetsPath= "jar:file://" + Application.dataPath + "!/assets"+"/Android";//当前我这里的安卓AB包资源放置目录为(Assets-->StreamingAssets-->Android)
    //使用WWW拷贝StreamingAssets目录下的内容到安卓持久化目录(Application.persistentDataPath)
    
    //WWW www =new WWW(strAndroidStreamingAssetsPath;
    using(WWW www =new WWW(strAndroidStreamingAssetsPath))
    {
         yield return www;

         if(www.isDone)
         {
             //拷贝内容到安卓指定的持久化目录路径
             string strAndroidPersistenPath = Application.persistentDataPath+ "/" +   "2duicanvas";

            File.WriteAllBytes(strAndroidPersistenPath, www.bytes);

         }
    }
   

 

 
参考:Unity3D研究院之Android同步方法读取streamingAssets(八十八)

              

你可能感兴趣的:(Unity基础)