查看: 20773|回复: 129

[在unity中制作] 建立assetbundles

  [复制链接]

9

主题

9

帖子

260

积分

vip会员

Rank: 1

积分
260
发表于 2016-7-12 13:59:57 | 显示全部楼层 |阅读模式
开始创建一个资源包(称为资源包在脚本和在Unity编辑器),选择一个资产从你的项目文件夹,你想包括在一束。在Inspector窗口底部,资产是资源包菜单“这表明任何目前定义中的名字,加上选项来定义一个新的束:
建立assetbundles 相关创作
如果你还没有定义的一束,点击New…输入名称,和你的包。
然后,进一步增加资产包,使用在Inspector窗口底部的菜单选择在项目窗口的资产分配给指定的包。
默认情况下,资产的相关选项设置为无意思是,资产不写入一个资源包而是包装与主体工程本身。使用此菜单,您可以创建一个或多个资源包,给它们取名字,然后利用这些新的资源包名称为资产的目的。
建立assetbundles 相关创作
在这个例子中的资产已被添加到一个资源包称为环境/沙漠。本资源包可以包含其他资产已添加。资源包的名字总是小写。如果你在名称中使用大写字符都转换为小写。使用资源包名称的正斜杠的有效创建文件夹,菜单中的子菜单,如上面的截图显示。
如果你创建的,没有资产分配给他们的资源包,您可以使用删除未使用的名称选项。这空虚的删除资源包。
元文件属于资产有选择的资源包的名字写进。
出口资源包
中是使用脚本代码编辑器的出口。以下脚本出口资源包:
使用UnityEditor;

公共课createassetbundles
{
[菜单项(“资产/建立资源包”)]
静态buildallassetbundles()
{
buildpipeline.buildassetbundles(“资产/资源包”,buildassetbundleoptions。没有目标而决定。standaloneosxuniversal);
这个脚本的底部创建一个菜单项资产菜单当你选择该菜单项调用函数的构建中,生成对话框中显示一个进度条。这个buildpipeline.buildassetbundles函数创建已标记的资源包,并把它们输出到一个文件夹名为“资源”。(注意,你需要在你的项目文件夹中创建“资源”文件夹之前你运行这个脚本。)
每个资源包是出口中显示的名称资源包菜单此外,每个资源都有一个相关联的文件“。体现“延伸。这显示文件是一个文本文件,你可以用任何文本编辑器打开。它提供的信息,如文件的CRC和资产的依赖。在上面的例子中的资源包有显示文件看起来像这样:
ManifestFileVersion: 0
CRC: 2422268106
Hashes:
AssetFileHash:
serializedVersion: 2
Hash: 8b6db55a2344f068cf8a9be0a662ba15
TypeTreeHash:
serializedVersion: 2
Hash: 37ad974993dbaa77485dd2a0c38f347a
HashAppended: 0
ClassTypes:
- Class: 91
Script: {instanceID : 0}
Assets:
Asset_0: Assets/Mecanim/StateMachine.controller
Dependencies: {}
除了这些,另一个文件的创建:一个资源包和另一个显示文件他们创建的每个文件夹中被创造出来的,所以如果你总是创建资源包在同一个地方,你只有两个额外的文件。额外的清单文件(在这个例子中assetbundles.manifest)可在大致相同的方式等显示文件显示,但对资源的相关信息和互相依赖。在这种情况下,因为我们只有一个单一的资源包,它没有其他的依赖。
manifestfileversion:0
assetbundlemanifest:
assetbundleinfos:
_ 0
信息:名称:scene1assetbundle
dependencies:{ }。
着色器剥离
当你包括你的束着色器,Unity编辑器查看当前场景和光照贴图的设置决定光照贴图的方式来使用。这意味着,你需要有一个配置场景开放建筑束时。
然而,你也可以手动指定场景计算光照贴图模式。这是必要的时候,建筑束从命令行。
打开场景你想使用。在图形设置检查员(Edit > Project Settings > Graphics),去材质/贴图方式剥离并选择手动,然后选择从当前场景。
建立assetbundles 资源编辑工具获得名称的资源包
下面的编辑脚本可以显示名称的资源包的建立过程可以创建。
using UnityEditor;
using UnityEngine;

public class GetAssetBundleNames
{
    [MenuItem ("Assets/Get AssetBundle names")]
    static void GetNames ()
    {
        var names = AssetDatabase.GetAllAssetBundleNames();
        foreach (var name in names)
            Debug.Log ("AssetBundle: " + name);
    }
}
要说当资产变化相关
使用onpostprocessassetbundlenamechanged方法从assetpostprocessor类可以回调时从该资源资产与变化。
使用
UnityEngine;使用UnityEditor;

公共课mypostprocessor:assetpostprocessor {

无效onpostprocessassetbundlenamechanged(字符串路径,
字符串上,字符串的下一个){
调试。日志(“AB:“路径”老:“以前的“新”下);
variants资源包
这可以被用来实现一个结果类似于虚拟资产。例如,你可以设置相关的变种如“myassets。高清”和“myassets。SD”。确保资产的完全匹配。统一建立管道这两变种中相同的内部ID为对象。现在这两个变体中可以切换出任意的,在运行时不同的变体扩展资源。
设置相关的变体:
  • 从编辑器,使用一个额外的变量名称的资产标签桂权。
  • 在代码中,使用assetimporter.assetbundlevariant选项
建立assetbundles variants资源包
完整的资源包名称是AssetBundle名称和变量名称的组合。例如,如果你想添加“myassets。高清”作为一种变异的资源包,你应该设置相关的名称为“myassets”和资源变“高清”。
如果你只把资源包像“myassets名称。HD”,它创造了一个正常的资源包,不是变资源包。“myassets“高清”和“myassets。高清”“不能共存,因为它们导致相同的全资源包名称。
脚本的建议API标的资产作为一个资源包
  • 你可以使用assetimporter.assetbundlename设置资源包名称。
建筑assetbundles
简单的API可建立资源包:buildpipeline.buildassetbundles()。。。。。。。你需要提供以下:
  • “输出路径,为所有的assetbundles。
  • buildassetbundleoptions(见在下面)。
  • 目标而决定这是一样的。
  • 一个重载的版本提供了大量assetbundlebuild它包含一个地图asssetbundles资产。这提供了灵活性,你可以设置你的脚本映射信息和从它建立。这个映射信息不更换或在资产数据库,打破现有的一。
API操纵资产数据库资源包名称
  • getallassetbundlenames() AssetDatabase。返回所有资源包的名字在资产数据库。
  • assetdatabase.getassetpathsfromassetbundle返回在给定的资源包标记资产路径。
  • removeassetbundlename() AssetDatabase。中一个给定的资源资产数据库名称。
  • assetdatabase.getunusedassetbundlenames()归来的未用的资源包的名称。
  • removeunusedassetbundlenames() AssetDatabase。删除所有未使用的资源包的名字在资产数据库。
  • 回调assetpostprocessor.onpostprocessassetbundlenamechanged如果用户改变资产的资源包的名字。

buildassetbundleoptions
  • collectdependencies和deterministicassetbundle总是启用。
  • completeassets是忽略它总是从资产而不是对象。它默认是完整的。
  • forcerebuildassetbundle。即使是没有变化的资产,你可以强制重建中通过设置这个标志。
  • ingoretypetreechanges。即使typetree变化,你可以忽略这个标志的变化。
  • disablewritetypetree冲突ingoretypetreechanges。你不能如果你禁用typetree忽略typetree变化。
清单文件
一显示文件是每个资源包中包含以下信息创建:
  • 清单文件是一个资源包。
  • CRC。
  • 资产文件哈希。所有资产单项散列包含在这个资源包;仅用于增量编译检查。
  • 树型散列。所有类型的单个哈希包含在这个资源包;仅用于增量编译检查。
  • 类类型。所有的类的类型包括在这个资源包。这些都是用来获取新的单项散列在typetree增量编译检查。
  • 资产名称。所有的资产都明确地包含在本资源包。
  • 依赖资源包名称。所有的资源,这种资源依赖。
  • 这个清单文件仅用于增量编译,运行时不必要的。
单清单文件
一个单一的显示生成文件,包括:
  • 所有的assetbundles。
  • 所有的资源包的依赖关系。
单清单资源包
它只包含一个assetbundlemanifest对象具有以下API:
  • getallassetbundles()返回所有资源包的名字在这个版本。
  • getdirectdependencies()返回直接依赖资源包名称。
  • getalldependencies()返回所有相关的资源包名称。
  • getassetbundlehash(字符串)返回指定的资源包的哈希。
  • getallassetbundleswithvariant()返回所有不同的资源包。
资源包加载API
  • getallassetnames()资源包。。。。。。。。返回所有的资产名称的资源包。
  • getallscenepaths()资源包。。返回所有现场资产的路径如果是流场景资源包。
  • loadasset()资源包。。。。。。。。载荷的资产从资源包。
  • loadallassets()资源包。。
  • loadassetwithsubassets()资源包。。
  • 还提供了异步版本。
  • 组件类型是不回来。找到的组件类型,加载对象先查成分(S)的对象。
typetrees
一个typetree是默认的相关书面。唯一例外的是地铁,因为它有一个不同的系列化解决方案。



回复

使用道具 举报

拉倒 该用户已被删除
发表于 2016-7-13 19:32:24 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

0

主题

911

帖子

2983

积分

vip会员

Rank: 1

积分
2983
发表于 2016-7-13 19:42:42 | 显示全部楼层
哈哈  找i了好久
回复 支持 反对

使用道具 举报

0

主题

908

帖子

2955

积分

vip会员

Rank: 1

积分
2955
发表于 2016-7-13 20:24:57 | 显示全部楼层
看看是什么东西
回复 支持 反对

使用道具 举报

0

主题

873

帖子

2866

积分

vip会员

Rank: 1

积分
2866
发表于 2016-7-13 20:54:13 来自手机 | 显示全部楼层
我吭哧瘪肚 终于下载下来了,但是不会用- -
回复 支持 反对

使用道具 举报

0

主题

915

帖子

3011

积分

vip会员

Rank: 1

积分
3011
发表于 2016-7-13 21:46:35 来自手机 | 显示全部楼层
谢谢版主分享,现在又看到它了,我就不能放弃,
回复 支持 反对

使用道具 举报

想飞2003 该用户已被删除
发表于 2016-7-13 22:08:58 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

0

主题

916

帖子

2989

积分

vip会员

Rank: 1

积分
2989
发表于 2016-7-13 22:27:01 来自手机 | 显示全部楼层
不错哦  下载看一下啊
回复 支持 反对

使用道具 举报

0

主题

924

帖子

2997

积分

vip会员

Rank: 1

积分
2997
发表于 2016-7-13 22:58:56 来自手机 | 显示全部楼层
哈哈  找i了好久
回复 支持 反对

使用道具 举报

0

主题

852

帖子

2808

积分

vip会员

Rank: 1

积分
2808
发表于 2016-7-14 00:03:04 | 显示全部楼层
秒了 秒了  秒了  这东西 秒了
回复 支持 反对

使用道具 举报

*滑块验证:
您需要登录后才可以回帖 登录 | enginedx注册

本版积分规则

 
 



邮件留言:


 
返回顶部