理论不多说,网上,官方文档都有。  这里有一篇介绍很全面的文章:https://www.cnblogs.com/ybgame/p/3973177.html

示例和注意点记录一下,用到时以便查阅。

一、打包代码(Editor)

我所知道的,有两种打包方法:1、所有打包参数在代码里设置,完全代码控制;2、在编辑器中设置打包参数,代码简便

第一种:

在代码中指定bundle包名,指定包含在该bundle里的所有资源路径

 [MenuItem("AssetsBundle/Build Bundle -- 代码中设置参数")]
static void BuildAB()
{
string path = Application.streamingAssetsPath + "/AssetsBundles/"; if (Directory.Exists(path))
Directory.Delete(path, true);
Directory.CreateDirectory(path); AssetBundleBuild[] buildMap = new AssetBundleBuild[]; //指定bundle包名
buildMap[].assetBundleName = "prefab_bundle"; string[] assets = new string[];
assets[] = "Assets/AssetsBundleObj/Cube.prefab"; // 必须是完整的文件名(包括后缀)
assets[] = "Assets/AssetsBundleObj/Sphere.prefab";
//指定bundle包含的资源路径数组
buildMap[].assetNames = assets; buildMap[].assetBundleName = "scene_bundle";
string[] scenes = new string[];
scenes[] = "Assets/_Scenes/Scene.unity";
buildMap[].assetNames = scenes; BuildPipeline.BuildAssetBundles(path, buildMap, BuildAssetBundleOptions.DeterministicAssetBundle, BuildTarget.StandaloneWindows);
}

代码中设置参数

第二种:

先在编辑器中设置参数,选中要打包的对象,设置好包名,后缀。

然后就直接打bundle包了,无需再在代码中处理包名之类的参数。

 [MenuItem("AssetsBundle/Build Bundle -- 编辑器中设置参数")]
static void BuildAB2()
{
string path = Application.streamingAssetsPath + "/AssetsBundles/"; if (Directory.Exists(path))
Directory.Delete(path, true);
Directory.CreateDirectory(path); BuildPipeline.BuildAssetBundles(path, BuildAssetBundleOptions.DeterministicAssetBundle, BuildTarget.StandaloneWindows);
}

编辑器中设置参数

二、加载代码(runtime)

通过www方法加载bundle,并把加载出来的资源实例化。

 void OnGUI()
{
if (GUILayout.Button("加载预制体Cube"))
{
StartCoroutine(LoadObj("prefab_bundle", "cube.prefab"));//有没有.prefab后缀都正常加载
}
if (GUILayout.Button("加载预制体Sphere"))
{
StartCoroutine(LoadObj("prefab_bundle", "sphere"));
}
}
/// <summary>
/// 加载预制体
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
IEnumerator LoadObj(string bundle_name, string name)
{
string path = "file://" + Application.streamingAssetsPath + "/AssetsBundles/" + bundle_name;
//Debug.LogError(string.Format("obj {0}", path));
WWW www = new WWW(path);
yield return www;
if (www.error == null)
{
AssetBundle bundle = www.assetBundle;
//这里LoadAsset第二个参数 有没有都能正常运行,这个类型到底什么用途还有待研究
GameObject go = Instantiate(bundle.LoadAsset(name, typeof(GameObject))) as GameObject;
//go.transform.parent = transform;
// 上一次加载完之后,下一次加载之前,必须卸载AssetBundle,不然再次加载报错:
// The AssetBundle 'Memory' can't be loaded because another AssetBundle with the same files is already loaded
bundle.Unload(false);
}else
{
Debug.LogError(www.error);
}
}

加载预制体测试

Unity热更新学习(一) —— AssetBundle 打包和加载的更多相关文章

  1. Unity热更新学习(二) —— ToLua c#与lua的相互调用

    tolua 下载地址:http://www.ulua.org/index.html c#调用lua的方法,tolua的官方例子提供了很多种.我初步学了一种在做项目使用的方法.通过DoFile方法执行l ...

  2. Unity热更新技术整理

    一.热更新学习介绍 1.什么是热更新 举例来说: 游戏上线后,玩家下载第一个版本(70M左右或者更大),在运营的过程中,如果需要更换UI显示,或者修改游戏的逻辑,这个时候,如果不使用热更新,就需要重新 ...

  3. unity热更新方案对比

    Unity应用的iOS热更新 •  什么是热更新 •  为何要热更新 •  怎样在iOS 上对Unity 应用进行热更新 •  支持Unity iOS 热更新的各种Lua 插件的对照 什么是热更新 • ...

  4. 另类Unity热更新大法:代码注入式补丁热更新

    对老项目进行热更新 项目用纯C#开发的? 眼看Unity引擎热火朝天,无数程序猿加入到了Unity开发的大本营. 一些老项目,在当时ulua/slua还不如今天那样的成熟,因此他们选择了全c#开发:也 ...

  5. Unity热更新对比

    https://www.jianshu.com/p/f9d90edf4a7c Unity 热更新为啥用Lua 详解 ILRuntime的优势 同市面上的其他热更方案相比,ILRuntime主要有以下优 ...

  6. Demo示例——Bundle打包和加载

    Unity游戏里面的场景.模型.图片等资源,是如何管理和加载的? 这就是本文要讲的资源管理方式--bundle打包和加载. 图片 Unity游戏资源管理有很多方式: (1)简单游戏比如demo,可以直 ...

  7. Unity热更新 AssetBundle

    在游戏开发中,常常需要用到热更新技术.比如:一个手机游戏开发好后,用户安装到手机上.如果此时我们要更新一个新的功能,如果没有热更新,那么需要用户卸载掉手机上的游戏,然后安装新的包,这样做十分麻烦,而且 ...

  8. unity ab包打包和加载的简单学习示例

    闲着没事结合项目看了下unity AssetBundle打包和使用,写了一些测试例子,需要的可以拿去,导入一个空项目即可 链接:https://pan.baidu.com/s/1H85dnMNkRoW ...

  9. [Unity热更新]tolua# & LuaFramework(一):基础

    一.tolua# c#调用lua:LuaState[变量名/函数名] 1.LuaState a.执行lua代码段 DoString(string) DoFile(.lua文件名) Require(.l ...

随机推荐

  1. Mybatis 同时传入多个参数和对象

    流程 1,mapper 接口文件使用 @param 注解(一个参数就不用使用注解,多个参数要么使用注解,要么使用数组的方式取值) 2,mapper xml 文件使用 mapper 接口文件传参 pub ...

  2. apache php mysql 安装

    推荐参考这里:http://www.myhack58.com/Article/sort099/sort0100/2012/35578_3.htm

  3. SQL Server -- 回忆笔记(二):增删改查,修改表结构,约束,关键字使用,函数,多表联合查询

    SQL Server知识点回忆篇(二):增删改查,修改表结构,约束,关键字使用,函数,多表联合查询 1. insert 如果sql server设置的排序规则不是简体中文,必须在简体中文字符串前加N, ...

  4. SQL 事务隔离级别

    转载来源:https://www.cnblogs.com/chenmh/p/3998614.html 标签: SQL SEERVER/MSSQL SERVER/SQL/事务隔离级别选项/设置数据库事务 ...

  5. python轻量级数据存储

    python为开发者提供了一个轻量级的数据存储方式shelve,对于一些轻量数据,使用shelve是个比较不错的方式.对于shelve,可以看成是一个字典,它将数据以文件的形式存在本地.下面介绍具体用 ...

  6. Elasticsearch拼音分词和IK分词的安装及使用

    一.Es插件配置及下载 1.IK分词器的下载安装 关于IK分词器的介绍不再多少,一言以蔽之,IK分词是目前使用非常广泛分词效果比较好的中文分词器.做ES开发的,中文分词十有八九使用的都是IK分词器. ...

  7. Linux内存描述之概述--Linux内存管理(一)

    1 前景回顾 1.1 UMA和NUMA两种模型 共享存储型多处理机有两种模型 均匀存储器存取(Uniform-Memory-Access,简称UMA)模型 将可用内存以连续方式组织起来, 非均匀存储器 ...

  8. nmap参数原理抓包分析

    nmap参数原理抓包分析 实验环境: Nmap7.70 实验步骤: 1.主机发现 2.端口扫描 3.服务版本探测 一.主机发现 主机发现,如果主机活跃,扫描1000个常用的tcp端口 1.Nmap i ...

  9. [Hive_3] Hive 建表指定分隔符

    0. 说明 Hive 建表示例及指定分隔符 1. Hive 建表 Demo 在 Hive 中输入以下命令创建表 user2 create table users2 (id int, name stri ...

  10. 在MFC Dialog中显示cmd窗口

    打开Project -> Properties,在Build Events -> Post-Build Event里的Command Line中输入: editbin /SUBSYSTEM ...