首页 >> 大全

AssetBundle in Pico(Android)

2023-11-22 大全 26 作者:考证青年

VR一体机的项目,经常会需要把静态大型资源(/scene)打包成并保存在一体机的存储空间中,

应用程序在一体机运行的时候,读取的静态资源。

1. 的生成

using UnityEditor;
using System.IO;public class CreateAssetBundles
{// 生成menu[MenuItem("Assets/Build AssetBundles")]static void BuildAllAssetBundles(){// 指定生成的ab包的流资源文件夹,StreamingAssets文件夹是Unity和Android的约定好的对接文件夹// 当build and run时,项目中的StreamingAssets文件夹中的ab包会同步传输到 Pico中// 的Application.streamingAssetsPath文件夹中,并打包成jarstring assetBundleDirectory = "Assets/StreamingAssets";if (!Directory.Exists(assetBundleDirectory)){Directory.CreateDirectory(assetBundleDirectory);}// 生成ab包的代码,BuildTarget.Android是因为我们运行在Pico上,平台是androidBuildPipeline.BuildAssetBundles(assetBundleDirectory,BuildAssetBundleOptions.None,BuildTarget.Android);}
}

当编辑完代码之后,会发现unity 导航栏中选项下面会出现Build 的功能按钮

找到预制体,为即将打出的ab包命名

在导航栏下,单击Build

之后,在项目中的下就会生成文件夹,并且文件夹内也会有打包好的ab包。

完成这些,就可以Build and run了

完成后Pico中的应用程序包中,多了一份jar文件,这个jar文件就是过程中在Pico中生成的ab包jar文件,这个文件的访问权限只有在应用程序中。

2. 的读取

using UnityEngine;
using System.IO;public class LoadFromFileExample : MonoBehaviour
{void Start(){// 生成的cubee ab包在pico的应用程序的流文件夹中var streampath = Path.Combine(Application.streamingAssetsPath, "cubee");// 使用LoadFromFile读取ab包var myLoadedAssetBundle = AssetBundle.LoadFromFile(streampath);if (myLoadedAssetBundle == null){Debug.Log("Failed to load AssetBundle!");return;}// 在ab包中加载预制体的名称var prefab = myLoadedAssetBundle.LoadAsset<GameObject>("Cube");Instantiate(prefab);}
}

观察pico,发现scene中,的预制体被加载出来了

tips:如果ab包打的是scene,那么在后得到的ab包需要用到这部分代码来加载场景

        var myLoadedAssetBundle = AssetBundle.LoadFromFile(streampath);string[] scene = myLoadedAssetBundle.GetAllScenePaths();SceneManager.LoadScene(scene[0],LoadSceneMode.Additive);

note:聊一下 的几个path

.

.

.

/是内部共享存储空间文件夹,也等价于///0,即:

data是 平行于内部共享储蓄空间的文件夹,用于存储apk数据,非root权限不可访问。

是将data文件夹打成jar包了

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了