uri是地址,如果要使用本地地址的话,要改一下uri里面的那个file:///改成file:// 不然会识别不到。
如果是用服务器的,那么直接按照老师的来就OK
uri是地址,如果要使用本地地址的话,要改一下uri里面的那个file:///改成file:// 不然会识别不到。
如果是用服务器的,那么直接按照老师的来就OK
Unity3d 2019中,UnityWebRequest不包含GetAssetBundle()方法,需要使用UnityWebRequestAssetBundle代替。
Unity3d 2019无需下载浏览工具,本身自带
在使用前加载依赖包
10
打包脚本在Editor模式下执行,需要把代码放到Editor目录下。
BuildPipeline.BuildAssetBundles(path, BuildAssetBundleOptions, BuileTarget);
所谓的AssetBundle,可以指文件里的具体的bundle文件,也可以指代码里的bundle的内存对象
加载并使用assetbundle的过程:
1、用AssetBundle的接口从文件里加载bundle
AssetBundle ab = AssetBundle.LoadFromFile("AssetBundles/scene/wall.unity3d");
2、从bundle里通过LoadAsset()等接口加载指定的prefab
GameObject cubewallPrefab = ab.LoadAsset<GameObject>("cubewall");
3、实例化prefab
Instantiate(cubewallPrefab);
streamingAsset文件夹被打包时不会做任何加密,原封不动的进行打包(放置游戏核心内容,更新资源才进行打包)
share 资源进行打包后,prefab可以直接引用share的资源包,而不需要分别对应的prefab中的资源一起打包
prefab可直接引用share共享资源包
如果资源有依赖 先加载依赖
先load sahre 在load cubewall
assetBundle.loadFromFile("Asset/cubewall")
instantiate(wallPrefab)
1.create
2.upload
3.download
4.install
5.uninstall
www request方式 会先从cahe,如果没有cahe就request服务器的,异步过程
if(caching.ready==false)
yield return null;
yeild return www.loadfromcaheordownload(path, 1)
1.注意一下,目录也会生产一个XXX+xxx.mainfest
就是公共资源要单独打包就好了,至于每个资源与公共资源的依赖关系由unity自动维护,我们不用管,所以我们唯一需要操作的就是将公共资源或者共享资源单独打包,单独,打一个bao
bundle的manifest的重要信息
CRC:
Assets : 包含了这个bundle包含的原始资源
Dependencies : 这个bundle依赖的其它bundle
注意,在加载一个bundle的时候,一定要先把它所依赖的bundle加载进来,否则即使在游戏包体中这个bundle用到的资源,bundle里的对象的引用也会丢失。它只会依赖共享包里的资源。
1.AB是一个压缩包包含模型、贴图、预制体、声音、场景等,可以再游戏运行时加载;
2.AB自身保存着相互依赖关系
3.压缩可以使用LZMA和LZ4压缩算法,减少包的大小,更快进行网络传输;
4.把一些可以下载的内容放在AB里,可以减少安装包大小
1.它是一个存在于硬盘上的文件。可称之为压缩包。这个压缩包可以认为是一个文件夹,里面包含多个文件。这些文件可分为两类:
serialized file(序列化文件):资源被打碎放在一个对象中,最后统一被写进一个单独文件(只有一个);
resource files:某些二进制资源(图片、声音)被单独保存,方便快速加载
2.它是一个AB对象,我们可以通过代码从一个特定的压缩包加载出来的对象。这个对象包含了所有我们当初添加到这个压缩包里面的内容,
1.指定资源的AB属性
(xxxa/xxx)这里xxxa会生成目录,名字为xxx
2.构建AB包
3.上传AB包
4.加载AB包和包里的资源
AssetBundle打包
[MenuItem("Assets/Build AssetBundles")]
static void BuildAllAssetBundles()
{
string dir = "AssetBundles";
if (!Directory.Exists(dir))
Directory.CreateDirectory(dir);
BuildPipeline.BuildAssetBundles(dir,BuildAssetBundleOptions.None,BuildTarget.StandaloneWindows64);
}
取出资源实例化
AssetBundle ab= AssetBundle.LoadFromFile("AssetBundles/scene/cubemoney.unity3d");
GameObject go = ab.LoadAsset<GameObject>("Cube");
Instantiate<GameObject>(go);
ab右下角第二栏是变体名,神tm后缀。。