as包加载 unity3d

2019-06-29 14:24:44 Mr_Sun88 阅读数 1964
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

                            Unity3D资源加载Resources


目录

1、博客介绍

2、内容

3、推送

4、结语


1、博客介绍

本篇博客对资源加载类Resources做一个介绍


2、内容

FindObjectsOfTypeAll 返回一个该类型对象的列表
Load 从Resources文件夹内加载一个路径的资源
LoadAll 从Resources文件夹内加载一个路径下的所有资源
LoadAsync 从Resources文件夹内异步加载路径下的资源
UnloadAsset 从内存中卸载资源
UnloadUnusedAssets 卸载未使用的资源

FindObjectsOfTypeAll:查找的对象包括场景目录下的对象和资源列表内的对象,以下演示,我输出所有带有Test.cs脚本的物体,我将Test挂载在Main Camera下,并将Main Camera制成预制体,切断场景内的预制体联系,并修改名字,两个物体均被输出。

Load:load就很简单了,指定一个Resources目录下的路径就可以加载了,加载时也可以指定好加载资源的类型,写法有所不同。

	        var cube = Resources.Load("Prefab/Cube");

		GameObject cube = Resources.Load<GameObject>("Prefab/Cube");
		
		GameObject cube = Resources.Load("Prefab/Cube") as GameObject;
		
		Instantiate(cube);

LoadAll:加载指定目录下的所有对象,可以指定类型去加载

	        //加载Prefab目录下的所有对象
		var prefabs = Resources.LoadAll("Prefab");
		
		//加载Prefab目录下的所有GameObject对象
		GameObject[] prefabs1 = Resources.LoadAll<GameObject>("Prefab");

LoadAsync:异步加载资源,通过协程的方式来加载资源,返回的是一个ResourcesRequest,加载的资源在asset内。

	
	StartCoroutine(LoadPrefab());

	IEnumerator LoadPrefab()
	{
		ResourceRequest request = Resources.LoadAsync("Prefab/Cube");

		yield return request;
		
		Instantiate(request.asset);
	}

UnloadAsset:直接卸载加载在内存的资源。

测试了哈,没啥用。。。。。。。。。。。

UnloadUnusedAssets:卸载内存中所有没有使用的资源

测试挺好用的

Resources.UnloadUnusedAssets();

3、推送

博主Github: https://github.com/KingSun5


4、结语

       若是觉得博主的文章写的不错,不妨关注一下博主,点赞一下博文,另博主能力有限,若文中有出现什么错误的地方,欢迎各位评论指摘。

       QQ交流群:806091680(Chinar)

       该群为CSDN博主Chinar所创,推荐一下!我也在群里!

       本文属于原创文章,转载请著名作者出处并置顶!!!!

2014-05-02 11:17:00 weixin_33671935 阅读数 35
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

原地址:http://www.cnblogs.com/hisiqi/p/3204752.html

本文记录如何通过unity3d进行脚本资源打包加载

1、创建TestDll.cs文件

public class TestDll : MonoBehaviour {
    void Start () {
        print("Hi U_tansuo!");
    }
}

2、生成dll文件

   (1)使用vs打包

  (2) 使用mono打包

    (3) 命令行打包 mac下(亲测):  /Applications/Unity/Unity.app/Contents/Frameworks/Mono/bin/gmcs -r:/Applications/Unity/Unity.app/Contents/Frameworks/Managed/UnityEngine.dll -target:library 脚本路径

                        win下(未试过):mcs -r:/Applications/Unity/Unity.app/Contents/Frameworks/Managed/UnityEngine.dll -target:library 脚本路径

3、更改文件后缀

      至关重要一步  更改上一步生成的TestDLL.dll 为 TestDLL.bytes  否则 打包加载会错

4、使用 BuildPipeline.BuildAssetBundle进行打包 资源为 TestDll.unity3d

5、加载

    IEnumerator Test()
    {
    
            string url="file://"+Application.dataPath+"/TestDll.unity3d";
        print(url);
          WWW www = WWW.LoadFromCacheOrDownload (url, 1);

    // Wait for download to complete
    yield return www;
        
    // Load and retrieve the AssetBundle
    AssetBundle bundle = www.assetBundle;

        TextAsset txt = bundle.Load("TestDll", typeof(TextAsset)) as TextAsset;
        print(txt.bytes.Length);
    // Load the assembly and get a type (class) from it
    var assembly = System.Reflection.Assembly.Load(txt.bytes);
    var type = assembly.GetType("TestDll");

    // Instantiate a GameObject and add a component with the loaded class
    
    gameObject.AddComponent(type);
    }

2016-07-31 16:41:17 DrkCore 阅读数 27990
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

【转载请注明出处】
作者:DrkCore (http://blog.csdn.net/DrkCore)
原文链接:(http://blog.csdn.net/drkcore/article/details/52079371)

近日因为工作的原因笔者开始接触 Unity3D 游戏引擎,该引擎的一大特色就是支持多种平台,其中自然不能少了我们 Android。在 Unity3D 和 Android Studio 交互中其实有不少坑,不过踩坑向来是学习的一部分,在这里笔者和大家分享一下今天的踩坑经验。

将项目作为 lib 导入 Unity 打包

Eclipse 的时代说到打包那必然指的是 JAR 包,其缺点是 res 资源文件不好处理,而随着 Android Studio 一同到来的 AAR 包解决了这个问题。

将源码和资源文件一同打包等到实际编译的时候再解压,这些事情 Build Tool 都帮我们做了,这也是为什么 Android Studio 中我们只需一句话就能搞定依赖管理。在 Unity3D 工程中我们同样能够通过 AAR 来导入 Android 部分的逻辑。

基本的导出姿势以及与 Unity3D 之间的交互可以参照这位博主的博客:

博文介绍了如何导出 AAR,但是在你真正将自己的项目移植的时候你仍然会遇到不少问题。如果你将自己的 AAR 包用压缩软件打开时就会发现 Build Tool 似乎将你整个 Module 都打包进去,唯独没有打包的就是你的依赖!

比如你在 Android 中使用了 ToolBar,RecyclerView 等由 support-v7 提供的控件,或者类似 xUtils3 的第三方框架等,这些东西都是不会被打包进你的 AAR 中。我们必须手动将这些依赖的 AAR 一同添加到 Unity3D 工程。

大部分的第三方库都会提供 AAR 包文件,实在没有也可以从 GitHub 上 clone 下来自己打包。Google 官方提供的 support 库等都可以在 SDK 目录下的 extras 子目录中找到,比如 support-v7 的 AAR 在如下位置可以找到:

v7包

看到这里你以为就能顺利完成往 Unity3D 导入 Android 的工作吗?

Naive,这里还有两个坑你没跳呢!

如果你的 SDK 中存在版本为 24 的 Build Tool 的话会爆出错误:

Build-tools为24时的报错截图

具体原因可能是 Build Tool 的 Bug。要解决的话很简单,就是把 24 的 Build Tool 藏起来:

躲猫猫

到这里你应该能够顺利地将 Unity3D 工程顺利打包成 APK。

这个时候如果你还觉得包的版本越高越好就会遇到第二个坑,这个坑在 24 号版本的 support-v7 包中。

报错截图如下:

报错截图

compile 'com.android.support:appcompat-v7:24.x.x'只是一句依赖但是其导入的包并不只有一个,如果你打开 module 的 build\intermediates\exploded-aar 目录去看的话就会发现其实他有 4 个包。报错中提到的 VectorDrawableCompat 就在其中:

然而这个时候就算你导入了这两个包问题依旧存在。

笔者猜测 24 的 VectorDrawable包必须使用24的Build Tool 来打包,而上面我们说过了 24 的 Build Tool 和 Unity3D 不太兼容。

解决方案很简单,就是使用 23 的 support 包。

笔者测试过使用 23 的 support 无需导入 VerctorDrawable 可以正常运行。

使用Gradle脚本简化导包操作

踩过以上的这些坑之后想必大家都已经掌握了新姿势,但如果你像笔者一样是个懒惰的程序员的话就会觉得,每次编译都手动复制来复制去好麻烦啊,而通过 Gradle 的脚本我们可以分分钟解决这个问题。

以下是笔者写的脚本,当成伪代码来看的话相信有点经验的开发者都能看懂:

// 删除旧的aar
task deleteOldAar(type: Delete) {
    //删除Unity工程下的Android资源
    delete '你的Unity3D工程/Assets/Plugins/Android/lib-release.aar'
    //由于AndroidManifest文件可以能有更新,一并删除
    delete '你的Unity3D工程/Assets/Plugins/Android/AndroidManifest.xml'
    //删除Android工程下的编译资源
    delete 'build/intermediates/bundles/release/'
    delete 'build/outputs/aar/lib-release.aar'
}

// 导出AndroidManifest.xml
task exportManifest(type: Copy) {
    from('src/main/')
    into('你的Unity3D工程/Assets/Plugins/Android/')
    include('AndroidManifest.xml')
}

//导出aar
task exportAar(type: Copy) {
    from('build/outputs/aar/')
    into('你的Unity3D工程/Assets/Plugins/Android/')
    include('lib-release.aar')
}

//添加任务依赖
exportAar.dependsOn(deleteOldAar, build, exportManifest)

将 Unity 作为 lib 导入 Android Studio

如果你实际将工程作为 libs 导出的 Unity3D 导出的话你会发现这种方法带有太多的限制了:

  • 项目所在的 Module 必须为设为 library
    如果你的项目使用了比如 xUtils 中的基于注解和反射实现的视图注入框架的话,你就会发现将 module 设置为 library 后框架的视图注入功能就无法使用了,甚至连 switch(view.getId()) 这样的代码都用不了。究其原因无论是注解还是 switch 语句其需要参数都必须是常量,而 library 的 R.id.xxx 要在打包成 apk 的时候才能确定,于是开发者就不得不写繁琐的 findViewById 了。
  • 不方便管理依赖库
    如果项目依赖了某些库那么在打包的时候要一并将这些库的 jar/aar 一并导入到 Unity 目录之中,升级依赖或者添加依赖全部都要手动进行。人为操作难免会出问题而 Unity 打包的速度也是慢的可以,每一次打包都像是在拷问着程序员一般。

如果反过来想,不是将工程导出而是将 Unity 作为 lib 导入到 Android Studio的话这一切都将迎刃而解。

打开 Unity 的 IDE,通过 File->Build Settings 打开打包设置
打包设置

选中 Google Android Project 并且签名(明明打的不是 APK 却不签名无法导出,身为 Android 开发者我表示不解啊),导出后我们就会看到 Eclipse 项目结构的工程,如下:

导出工程结构

assets 存放的是编译后的 Unity 脚本等东西,这部分是导出部分的核心,日后如果要更新 Unity 的 lib 的话,只覆盖 assets 下的东西就够了。其他的部分相信大家都十分熟悉了,不再赘述。

我们将导出的东西作为 library 导入到 Android Studio,build 之后我们就能在 module 的输出目录下找到对应的 AAR 文件了:

AAR位置

之后我们就可以直接使用 AAR 文件进行开发了,是不是很方便。

更新 Unity 的 AAR

随着项目的不断研发 Unity 的部分总是需要更新的,如果导出一个 AAR 要重复上述的步骤的话那依然是很麻烦的。好在我们可以绕过 Android Studio 直接更新 AAR 文件。

如前文所说 Unity 导出工程的核心都在 Assets 目录下,而我们用压缩软件打开对应的 AAR 文件就会发现 Assets 下的内容只是被原封不动地打包进去了而已,所以我们完全可以用新导出的 Unity 工程中的 Assets 来替换 AAR 包下的东西。

AAR打开

可能出现的其他问题

如果你出现了各种打包的异常,可以依次按照如下的点来检查:

  • 是否选择了签名文件,并输入了正确的密码
  • 如果你是使用 Eclipse 打包的话,检查存在多个 unity 提供的 classes.jar
  • 检查插件目录中及aar包中是否重复申明了组件。Android 打包 apk 时会将多个 lib 的 AndroidManifest.xml 文件合并到一起,如果重复声明了组件并且声明的属性存在冲突就可能导致打包失败。
  • 检查 bin 目录及 aar 包中是否存在重复的 jar 文件。常见于项目开发中改变了项目名,并且每次打包都是直接解压到插件目录的情况,因为名称不同所以不会覆盖旧的 jar 包。
  • 检查资源是否存在重复的索引。比如同时存在 bg_main.pngbg_main.9.png 两个图片但二者的索引都是 R.drawable.bg_main
2017-08-29 15:40:04 MJM_49 阅读数 973
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

近日因为工作的原因笔者开始接触Unity3D游戏引擎,该引擎的一大特色就是支持多种平台,其中自然不能少了我们Android。在unity3dandroid Studio交互中其实有不少坑,不过踩坑向来是学习的一部分,在这里笔者和大家分享一下今天的踩坑经验。

一、 将项目作为lib导入Unity打包

Eclipse的时代说到打包那必然指的是JAR包,其缺点是res资源文件不好处理,而随着Android Studio一同到来的AAR包解决了这个问题。

将源码和资源文件一同打包等到实际编译的时候再解压,这些事情Build Tool都帮我们做了,这也是为什么Android Studio中我们只需一句话就能搞定依赖管理。在Unity3D工程中我们同样能够通过AAR来导入Android部分的逻辑。

基本的导出姿势以及与Unity3D之间的交互可以参照这位博主的博客: 
Android Studio 2.1 和 Unity3D 5.3.4 交互 
Android Studio 2.1 和 Unity3D 5.3.4 交互(二)

博文介绍了如何导出AAR,但是在你真正将自己的项目移植的时候你仍然会遇到不少问题。如果你将自己的AAR包用压缩软件打开时就会发现Build Tool似乎将你整个Module都打包进去,唯独没有打包的就是你的依赖!

比如你在Android中使用了ToolBar,RecyclerView等由support-v7提供的控件,或者类似xUtils3的第三方框架等,这些东西都是不会被打包进你的AAR中。我们必须手动将这些依赖的AAR一同添加到Unity3D工程。

大部分的第三方库都会提供AAR包文件,实在没有也可以从GitHub上clone下来自己打包。Google官方提供的support库等都可以在SDK目录下的extras子目录中找到,比如support-v7的AAR在如下位置可以找到:

v7包

看到这里你以为就能顺利完成往Unity3D导入Android的工作吗?

Naive,这里还有两个坑你没跳呢!

如果你的SDK中存在版本为24的Build Tool的话会爆出错误:

Build-tools为24时的报错截图

具体原因可能是Build Tool的Bug。要解决的话很简单,就是把24的Build Tool藏起来:

躲猫猫

到这里你应该能够顺利地将Unity3D工程顺利打包成APK。

这个时候如果你还觉得包的版本越高越好就会遇到第二个坑,这个坑在24号版本的support-v7包中。

报错截图如下:

报错截图

compile ‘com.android.support:appcompat-v7:24.x.x’只是一句依赖但是其导入的包并不只有一个,如果你打开module的build\intermediates\exploded-aar目录去看的话就会发现其实他有4个包。报错中提到的VectorDrawableCompat就在其中:

叛徒

然而这个时候就算你导入了这两个包问题依旧存在。

笔者猜测24的VectorDrawable包必须使用24的Build Tool来打包,而上面我们说过了24的Build Tool和Unity3D不太兼容。

解决方案很简单,就是使用23的support包。

笔者测试过使用23的support无需导入VerctorDrawable可以正常运行。

1、 使用Gradle脚本简化导包操作

踩过以上的这些坑之后想必大家都已经掌握了新姿势,但如果你像笔者一样是个懒惰的程序员的话就会觉得,每次编译都手动复制来复制去好麻烦啊,而通过Gradle的脚本我们可以分分钟解决这个问题。

以下是笔者写的脚本,当成伪代码来看的话相信有点经验的开发者都能看懂:

// 删除旧的aar
task deleteOldAar(type: Delete) {
    //删除Unity工程下的Android资源
    delete '你的Unity3D工程/Assets/Plugins/Android/lib-release.aar'
    //由于AndroidManifest文件可以能有更新,一并删除
    delete '你的Unity3D工程/Assets/Plugins/Android/AndroidManifest.xml'
    //删除Android工程下的编译资源
    delete 'build/intermediates/bundles/release/'
    delete 'build/outputs/aar/lib-release.aar'
}

// 导出AndroidManifest.xml
task exportManifest(type: Copy) {
    from('src/main/')
    into('你的Unity3D工程/Assets/Plugins/Android/')
    include('AndroidManifest.xml')
}

//导出aar
task exportAar(type: Copy) {
    from('build/outputs/aar/')
    into('你的Unity3D工程/Assets/Plugins/Android/')
    include('lib-release.aar')
}

//添加任务依赖
exportAar.dependsOn(deleteOldAar, build, exportManifest)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

二、 将Unity作为lib导入Android Studio

如果你实际将工程作为libs导出的Unity3D导出的话你会发现这种方法带有太多的限制了:

  • 项目所在的Module必须为设为library 
    如果你的项目使用了比如xUtils中的基于注解和反射实现的视图注入框架的话,你就会发现将module设置为library后框架的视图注入功能就无法使用了,甚至连switch(view.getId())这样的代码都用不了。究其原因无论是注解还是switch语句其需要参数都必须是常量,而library的R.id.xxx要在打包成apk的时候才能确定,于是开发者就不得不写繁琐的findViewById了。

  • 不方便管理依赖库 
    如果项目依赖了某些库那么在打包的时候要一并将这些库的jar/aar一并导入到Unity目录之中,升级依赖或者添加依赖全部都要手动进行。人为操作难免会出问题而Unity打包的速度也是慢的可以,每一次打包都像是在拷问着程序员一般。

如果反过来想,不是将工程导出而是将Unity作为lib导入到Android Studio的话这一切都将迎刃而解。

打开Unity的IDE,通过File->Build Settings打开打包设置 
打包设置

选中Google Android Project并且签名(不签名无法导出工程,身为Android开发者我表示不解啊),导出后我们就会看到Eclipse项目结构的工程,如下:

导出工程结构

assets存放的是编译后的Unity脚本等东西,这部分是导出部分的核心,日后如果要更新Unity的lib的话,只覆盖assets下的东西就够了。其他的部分相信大家都十分熟悉了,不再赘述。

我们将导出的东西作为library导入到Android Studio,build之后我们就能在module的输出目录下找到对应的AAR文件了:

AAR位置

之后我们就可以直接使用AAR文件进行开发了,是不是很方便。

1、 更新Unity的AAR

随着项目的不断研发Unity的部分总是需要更新的,如果导出一个AAR要重复上述的步骤的话那依然是很麻烦的。好在我们可以绕过Android Studio直接更新AAR文件。

如前文所说Unity导出工程的核心都在Assets目录下,而我们用压缩软件打开对应的AAR文件就会发现Assets下的内容只是被原封不动地打包进去了而已,所以我们完全可以用新导出的Unity工程中的Assets来替换AAR包下的东西。

AAR打开

三、 可能出现的其他问题

如果你出现了各种打包的异常,可以依次按照如下的点来检查:

  • 是否选择了签名文件,并输入了正确的密码

  • 如果你是使用Eclipse打包的话,检查存在多个unity提供的classes.jar

  • 检查插件目录中及aar包中是否重复申明了组件 
    Android打包apk时会将多个lib的 AndroidManifest.xml 文件合并到一起,如果重复声明了组件并且声明的属性存在冲突就可能导致打包失败。

  • 检查bin目录及aar包中是否存在重复的jar文件 
    常见于项目开发中改变了项目名,并且每次打包都是直接解压到插件目录的情况,因为名称不同所以不会覆盖旧的jar包。

  • 检查资源是否存在重复的索引 

    比如同时存在 bg_main.png 和 bg_main.9.png 两个图片但二者的索引都是 R.drawable.bg_main

【转载请注明出处】 
作者:DrkCore (http://blog.csdn.net/DrkCore
原文链接:(http://blog.csdn.net/drkcore/article/details/52079371)

2019-01-19 16:57:09 Mr_Sun88 阅读数 1566
  • Unity 值得看的500+ 技术内容列表

    Unity3D是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。

 

                 Unity3D AssetBundle的打包和加载


 

目录

1、博文介绍

2、具体思路和写法

(1)AB包的打包

(2)AB包的加载

(3)AB包卸载

3.资源包下载

4.推送

5.结语


1、博文介绍

       本篇博客主要起记录和学习作用,简单的介绍一下AB包的打包和几种不同方法加载AB包的方式,若各位同学有幸看到本篇博客,希望能够对你有所帮助。


2、具体思路和写法

(1)AB包的打包

        打包这里就不在做过多的介绍,直接拷贝官方的方法,很简单也很直观,这里只要注意在Unity内为资源设置好名字和后缀就好了,在资源商店里有一个免费的AB包管理软件,评价好像挺高的,博主回头抽时间研究一下,再写一篇文章介绍一下吧(完了,不知不觉又立了个flag)。

using  UnityEditor;
using  System.IO;

/// <summary>
/// time:2019/1/19
/// author:King.Sun
/// description:AB包打包
/// </summary>
public class LoadAB{


	[MenuItem("Assets/Bulid AssetBundle")]
	static void BuildAssetBundle()
	{
		//创建目录
		string abPath = "Assets/AssetBundles";
		if (!Directory.Exists(abPath))
		{
			Directory.CreateDirectory(abPath);
		}
		//打包 os/win
		#if UNITY_STANDALONE_WIN
				BuildPipeline.BuildAssetBundles(abPath, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows64);
		#elif UNITY_STANDALONE_OSX
				BuildPipeline.BuildAssetBundles(abPath, BuildAssetBundleOptions.None, BuildTarget.StandaloneOSX);
		#endif
		
	}
	
}

       这里我就直接本地加载了,考虑到同学你用的是win还是mac这里加了个宏,不同平台打包设定是不一样的,同学用到了自行查API,打包就不细说了。

博主这里将一个Cube打到一个AB包里,包名为cube.unity3d,后缀为assetbundle。

       打包后就可以看到在我们设定的目录下,生成了cube.unity3d的AB包和对应的manifest描述文件,描述文件内记载了,我们该AB包里的资源和依赖,至此打包工作完成

(2)AB包的加载

这里我们通过本地路径来加载AB包,不同平台下的路径是不同的这里需要各位同学去注意一下

                //不同平台下路径不同
		#if UNITY_ANDROID
		_abPath = "jar:file://" + Application.dataPath + "!/assets/AssetBundles/";
		#elif UNITY_IPHONE
		_abPath = Application.dataPath + "/Raw/AssetBundles/";
		#elif UNITY_STANDALONE_WIN || UNITY_EDITOR
		_abPath = Application.dataPath + "/AssetBundles/";
		#else
		_abPath = string.Empty;
		#endif

这里我们为我们的AB包路径 _abPath赋值。

 

加载方式1:  LoadFromMemoryAsync 异步加载,通过LoadFromMemoryAsync加载从服务器或本地获取的字节流来加载

StartCoroutine(LoadABPackage1(_abPath));

IEnumerator LoadABPackage1(string path)
	{
		AssetBundleCreateRequest request = AssetBundle.LoadFromMemoryAsync(File.ReadAllBytes(path+"cube.unity3d.assetbundle"));
		yield return request;
		ab = request.assetBundle;
		Object cube = ab.LoadAsset("Cube.prefab");
		Instantiate(cube);
	}

加载方式2:LoadFromMemory 同步加载,通过LoadFromMemoryAsync加载从服务器或本地获取的字节流来加载

LoadABPackage2();


void LoadABPackage2()
{
	ab = AssetBundle.LoadFromMemory(File.ReadAllBytes(_abPath+"cube.unity3d.assetbundle"));
	Object cube = ab.LoadAsset("Cube.prefab");
	Instantiate(cube);
}

 

加载方式3:LoadFromFileAsync 直接通过本地路径异步加载,只能加载本地AB包

StartCoroutine(LoadABPackage3(_abPath));


	IEnumerator LoadABPackage3(string path)
	{
		AssetBundleCreateRequest request = AssetBundle.LoadFromFileAsync(path+"cube.unity3d.assetbundle");

		yield return request;

		ab = request.assetBundle;
		Object cube = ab.LoadAsset("Cube.prefab");
		Instantiate(cube);
	}

 

加载方式4:LoadFromFile 直接通过本地路径同步加载,只能加载本地AB包

LoadABPackage4(_abPath);

	void LoadABPackage4(string path)
	{
		ab = AssetBundle.LoadFromFile(path + "cube.unity3d.assetbundle");
		Object cube = ab.LoadAsset("Cube.prefab");
		Instantiate(cube);
	}

 

加载方式5:WWW异步加载方法 本地服务器均可

StartCoroutine(LoadABPackage5(_abPath));

	IEnumerator LoadABPackage5(string path)
	{
		WWW www = WWW.LoadFromCacheOrDownload(path+"cube.unity3d.assetbundle",1);
		yield return www;
		if (!string.IsNullOrEmpty(www.error))
		{
			Debug.Log(www.error);
			yield break;
		}

		ab = www.assetBundle;
		Object cube = ab.LoadAsset("Cube.prefab");
		Instantiate(cube);
	}

 

加载方式6:UnityWebRequest 异步加载方式 本地服务器均可

StartCoroutine(LoadABPackage6(_abPath));

IEnumerator LoadABPackage6(string path)
	{
		UnityWebRequest request = UnityWebRequestAssetBundle.GetAssetBundle(path+"cube.unity3d.assetbundle");
		yield return request.Send();
		ab = (request.downloadHandler as DownloadHandlerAssetBundle).assetBundle;
		Object cube = ab.LoadAsset("Cube.prefab");
		Instantiate(cube);
	}

(3)AB包卸载

AssetBundle.Unload(false),卸载AB包资源,同时保留内存中已加载的资源; 
AssetBundle.Unload(true),卸载AB包资源,同时卸载内存中已加载的资源,会造成资源的丢失

3.资源包下载

完整工程下载:https://download.csdn.net/download/mr_sun88/10927709


4.推送

先空着


5.结语

       本篇博客只是简单的介绍了AB包的打包和加载,希望有幸看到本篇文章的同学能有所收获,另博主能力有限,文中若有错误的地方期望各位看家可以指点交流。

       QQ交流群:806091680(Chinar)

       该群为CSDN博主Chinar所创,推荐一下!我也在群里!

       本文属于原创文章,转载请著名作者出处并置顶!!!!!