unityunity3d assetbundlee能打包ttf吗

Unity5新的AssetBundle系统使用心得
时间: 00:59:56
&&&& 阅读:33441
&&&& 评论:
&&&& 收藏:0
标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&& & & & Unity的AssetBundle系统是对资源管理的一个扩展,动态更新,网页游戏,资源下载都是基于AssetBundle系统的。但是不得不说,这个系统非常恶心,坑很深。至于有多深,请看这篇文章:&
& & & & 原先的AssetBundle系统需要自己写一大坨导出的代码(BuildPipeline),这个新手会无从下手,老手也经常会被坑到。想正确处理好资源的依赖关系从而保证资源完整而又不会产生重复资源,确实不是一件非常容易的事情。 & & &&
& & & & Unity5新的AssetBundle系统大大简化了这一操作。Unity打包的时候会自动处理依赖关系,并生成一个.manifest文件,这个文件描述了assetbundle包大小、crc验证、包之间的依赖关系等等,是一个文本文件。加载资源的时候Unity会自动处理好其依赖包的加载。
& & & & 打包代码简化为一个函数(其实也没什么必要了,因为流程固定了,做成内嵌的菜单选项也没什么影响)
BuildPipeline.BuildAssetBundles(outputPath);
& & & &执行这个函数,它会自动打包工程目录下的所有的assetbundle,函数足够智能,它只会打包有修改的资源。
& & & &如何添加一个AssetBundle呢?
& & & &很简单,在资源属性窗口底部有一个选项,这个地方设置AssetBundle的名字。它会修改资源对应的.meta文件,记录这个名字。 AssetBundle的名字固定为小写。另外,每个AssetBundle都可以设置一个Variant,其实就是一个后缀,实际AssetBundle的名字会添加这个后缀。如果有不同分辨率的同名资源,可以使用这个来做区分。
& & & 我手头的模型资源非常多,所以我又写了个脚本自动遍历prefab的meta文件,添加AssetBundle名字。有一个需要注意的地方就是.meta文件貌似权限问题,无法直接写入,需要删除原文件,然后使用新的文件替换。。
# -*- coding: utf-8 -*-
import os, sys,
EXT_LIST = ['.prefab.meta', '.png.meta', '.jpg.meta'];
def doWork(path):
for root, dirs, files in os.walk(path):
for file in files:
for ext in EXT_LIST:
if file.endswith(ext):
fullPath = os.path.join(root, file)
fullPath = fullPath.replace('\\', '/')
prefabName = fullPath.replace(path, '');
prefabName = prefabName[:prefabName.find('.')] + '.data';
fileData = [];
fp = open(fullPath, 'r');
for line in fp:
if line.find('assetBundleName:') != -1:
fileData.append('
assetBundleName: ' + prefabName.lower() + '\n');
fileData.append(line);
fp.close();
# os.remove(fullPath);
fpw = open(fullPath + '.tmp', 'w');
fpw.writelines(fileData);
fpw.close();
os.remove(fullPath)
shutil.copy(fullPath + '.tmp', fullPath);
os.remove(fullPath + '.tmp')
doWork(r'Assets/Resources/Prefab/')
os.system('PAUSE')
c#编辑器扩展(与python代码功能一样,喜欢哪个用哪个)
public class ExportAssetBundles : Editor
// 设置assetbundle的名字(修改meta文件)
[MenuItem(&Tools/SetAssetBundleName&)]
static void OnSetAssetBundleName()
UnityEngine.Object obj = Selection.activeO
string path = AssetDatabase.GetAssetPath(Selection.activeObject);
string[] extList = new string[] { &.prefab.meta&, &.png.meta&, &.jpg.meta& , &.tga.meta& };
EditorUtil.Walk(path, extList, DoSetAssetBundleName);
//刷新编辑器
AssetDatabase.Refresh();
Debug.Log(&AssetBundleName修改完毕&);
static void DoSetAssetBundleName(string path)
path = path.Replace(&\\&, &/&);
int index = path.IndexOf(EditorConfig.PREFAB_PATH);
string relativePath = path.Substring(path.IndexOf(EditorConfig.PREFAB_PATH) + EditorConfig.PREFAB_PATH.Length);
string prefabName = relativePath.Substring(0, relativePath.IndexOf('.')) + EditorConfig.ASSETBUNDLE;
StreamReader fs = new StreamReader(path);
List&string& ret = new List&string&();
while((line = fs.ReadLine()) != null) {
line = line.Replace(&\n&, &&);
if (line.IndexOf(&assetBundleName:&) != -1) {
assetBundleName: & + prefabName.ToLower();
ret.Add(line);
fs.Close();
File.Delete(path);
StreamWriter writer = new StreamWriter(path + &.tmp&);
foreach (var each in ret) {
writer.WriteLine(each);
writer.Close();
File.Copy(path + &.tmp&, path);
File.Delete(path + &.tmp&);
[MenuItem(&Tools/CreateAssetBundle&)]
static void OnCreateAssetBundle()
BuildPipeline.BuildAssetBundles(EditorConfig.OUTPUT_PATH);
//刷新编辑器
AssetDatabase.Refresh();
Debug.Log(&AssetBundle打包完毕&);
标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&原文:http://blog.csdn.net/langresser_king/article/details/
教程昨日排行
&&国之画&&&& &&&&&&
&& &&&&&&&&&&&&&&
鲁ICP备号-4
打开技术之扣,分享程序人生!扫一扫,访问微社区
后使用快捷导航没有帐号?
签到成功!您今天第{todayrank}个签到,签到排名竞争激烈,记得每天都来签到哦!已连续签到:{constant}天,累计签到:{days}天
当前位置: &
查看: 1086|回复: 0
Unity热更新专题(五)如何打包AssetBundle
74309/5000排名<font color="#FF昨日变化主题帖子积分
日久生情, 积分 4309, 距离下一级还需 691 积分
日久生情, 积分 4309, 距离下一级还需 691 积分
蛮牛币65979
在线时间352 小时
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
才可以下载或查看,没有帐号?
  如何打包AssetBundle?
  我看了许多博客和论坛,写得有点乱,看的也有一点迷糊。而且unity4.6和.1在打包制作AssetBundle时,有很大区别。所以还是看看原API文档吧。
  ===================================================================================
  BuildPipeline.BuildAssetBundles
[AppleScript] 纯文本查看 复制代码  public static AssetBundleManifest BuildAssetBundles(string outputPath, BuildAssetBundleOptions assetBundleOptions = BuildAssetBundleOptions.None, BuildTarget targetPlatform = BuildTarget.WebPlayer);
  该方法就是打包制作AssetBundle的方法。
  (好长的方法啊······
  大概看一下
  参数一:输出路径
  参数二:打包的选项
  参数三:平台
  下面具体分析一下。
  参数一:路径而已。没什么可以选的。
  参数二:
1.png (40.7 KB, 下载次数: 4)
13:46 上传
  描述的还是挺好理解的。
  参数三:
19694.png (74.16 KB, 下载次数: 4)
13:46 上传
  这就更好理解了,就是Unity支持的平台。
  描述:
  制作在Unity编辑器里指定的所有物体的AssetBundle。
  补充一点:(Unity5的新化~
  1、我们创建一个cube,命名为Player。
  2、把Player搞成Prefab。
  我们可以看到选中Prefab时,下面有这个框。
3.png (12.01 KB, 下载次数: 4)
13:47 上传
  我们点击New,标记为player.AssetBundle。
  好了。下面修改代码。
  创建脚本ExportAssetBundles.cs,把官方API文档上的代码贴上去。
[AppleScript] 纯文本查看 复制代码  // C# Example
  // Builds an asset bundle from the selected objects in the project view.
  // Once compiled go to &Menu& -& &Assets& and select one of the choices
  // to build the Asset Bundle
  using UnityE
  using UnityE
  public class ExportAssetBundles
  [MenuItem(&Test/Build Asset Bundles&)]
  static void BuildABs() {
  // Put the bundles in a folder called &ABs& within the
  // Assets folder.
  BuildPipeline.BuildAssetBundles(&Assets/ABs&);
  我们可以看到Unity编辑器发生了变化。
4.png (11.14 KB, 下载次数: 4)
13:47 上传
  没错。工具栏上出现了我们代码中定义的东东。点击它吧~
  当然,如果你的工程中没有
  Assets/ABs的话,是会出错的。
6.png (24.52 KB, 下载次数: 4)
13:48 上传
  创建该目录,再次点击。我们就可以看到我们想看到的了。
5.png (44.76 KB, 下载次数: 5)
13:48 上传
  加载AssetBundle。很简单。
  贴个示例代码吧:
[AppleScript] 纯文本查看 复制代码  using S
  using UnityE
  using System.C
  public class Load: MonoBehaviour
  private string BundleURL = &file:///C:/cube.assetbundle&;
  private string SceneURL = &file:///C:/scene1.unity3d&;
  void Start()
  //BundleURL = &file//&+Application.dataPath+&/cube.assetbundle&;
  Debug.Log(BundleURL);
  StartCoroutine(DownloadAssetAndScene());
  IEnumerator DownloadAssetAndScene()
  //下载assetbundle,加载Cube
  using (WWW asset = new WWW(BundleURL))
  AssetBundle bundle = asset.assetB
  Instantiate(bundle.Load(&Cube&));
  bundle.Unload(false);
  yield return new WaitForSeconds(5);
  //下载场景,加载场景
  using (WWW scene = new WWW(SceneURL))
  AssetBundle bundle = scene.assetB
  Application.LoadLevel(&scene1&);
unity 打包unity4
区别;unity5.0 打包场景;unity assetbundle特点;unity assetbundle打包;unity4和unity5的区别;unity5 打包场景;unity5.3 场景打包
每日推荐:主题信息(必填)
主题描述(最多限制在50个字符)
申请人信息(必填)
申请信息已提交审核,请注意查收邮件,我们会尽快给您反馈。
如有疑问,请联系
CSDN &《程序员》研发主编,投稿&纠错等事宜请致邮
你只管努力,剩下的交给时光!
如今的编程是一场程序员和上帝的竞赛,程序员要开发出更大更好、傻瓜都会用到软件。而上帝在努力创造出更大更傻的傻瓜。目前为止,上帝是赢的。个人网站:。个人QQ群:、
个人大数据技术博客:[Unity]使用LOAssetFramework框架实现Unity5.0版本后的资源打包功能 - 简书
[Unity]使用LOAssetFramework框架实现Unity5.0版本后的资源打包功能
非常方便的Unity5.0版Asset资源获取框架,小巧易用
Unity 5.0及以上
LOAssetManager资源管理器
LOAssetBundle资源包
LOAssetCache资源缓存策略
源代码下载
欢迎大家Fork并且Push
初始化Asset服务器步骤
设置服务器资源地址地址
using LOAssetF
LOAssetManager.URI = "http://sample.uri";
设置AssetBundle配置文件名ManifestName
using LOAssetF
LOAssetManager.ManifestName = "hello_asset";
设置LOAssetManager初始化Asset服务的回调函数
LOAssetManager.InitBlock = (bool result) =&{
if(result)
Debug.Log("初始化Asset服务器成功");
获取指定资源
public IEnumerator LoadAssetAsync (string assetBundleName);
public IEnumerator LoadLevelAsync (string assetBundleName);
public T GetAsset&T&(string assetbundlename,string assetname);
翻译:莫铭原文地址:AssetBundle usage patterns 本系列中的上一篇文章覆盖了AssetBundle的基础知识,尤其是各种加载API的底层行为。这篇文章讨论的则是实际应用中使用AssetBundles可能遇到的,方方面面的问题与解决方法。 4.1. 管...
原文地址:/program/translateview/7167991,版权归作者所有英文版原文翻译:高磊(稳定心态) 校审:罗倩(蘑菇)大约四年前,我发布了关于Unity开发的50个技巧的初始版本。虽然最新版本与初始版本仍有许多关联,但在...
原文:http://m.blog.csdn.net/article/details?id=
最近网友通过网站搜索Unity3D在手机及其他平台下占用内存太大.这里写下关于Unity3D对于内存的管理与优化.Unity3D 里有两种动态加载机制:一个是Re...
Unity3D 里有两种动态加载机制:一个是Resources.Load,另外一个通过AssetBundle,其实两者区别不大。 Resources.Load就是从一个缺省打进程序包里的AssetBundle里加载资源,而一般AssetBundle文件需要你自己创建,运行时...
111. [动画系统]如何将其他类型的动画转换成关键帧动画? 动画-&点缓存-&关键帧 112. [动画]Unity引擎Mecanim动画系统功能优点? 答: l 简单化对类人角色动画设计与功能实现的工作流程。 l Mecanim动画系统使用一个可视化编程工具来管理动画之间...
深夜没有入睡,一个人思维会很不同。抱怨自己为什么不能放下手机,背单词,不能去仔细看文献,不能去开始动笔写作业!这一切大概都是为自己的惰性找到了一个可以当作理由的东西……比如,还没有到时间,还剩多少天,可以逃避,可以选择拖延!真的很讨厌自己!
本系列文章是对 http://metalkit.org 上面MetalKit内容的全面翻译和学习.目录 /p/64441ea99eba 在本系列的第二部分中,我们将学习soft shadows软阴影.我们将使用在Raymarchi...
健身跟瑜伽的区别:区别就是,健身95%都是抗阻力训练。什么是抗阻力训练?例如,吃维C/E就是为了抗氧化,延迟皮肤衰退。呐!所谓的阻力就是地心引力。为什么呢?当你的肌肉含量随着年纪的增长逐渐呈递减式流失,肌肉流失,皮囊就开始萎缩,因为没有了肌肉的张力,无法支撑着驱干。抗阻力训...
如果你问一个人,你爱犯错吗?我想每个人都不会给你好脸色,还要把你当傻逼看:废话,谁喜欢犯错?!谁不喜欢做事风风光光得到领导的赏识,同事的认可,周围人的赞赏,甚至是后人的称颂?!犯错,得了吧,有句话怎么说的?“成王败寇”!只要你成功了,你就是干什么都是对的,可是,只要你犯了错...
岁月是个疯癫的诗人 把我的巷子 写成断垣残壁的诗句 孤零零的遗落在 满是褶皱的扉页上 唯有那紧紧相拥的石板 布满鲜苔的石板 在延续着 生命的微弱气息 剥开层层蚕茧 抠出记忆中最美的画面 把它镶嵌在大脑的桌面上 任意点击随时播放 那时 一篓一篓的童年故事 也填不满像车皮一样的...匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。

我要回帖

更多关于 unity5.0 assetbundle 的文章

 

随机推荐