查看: 659|回复: 1
打印 上一主题 下一主题

[其他] Unity3D技术之资源包(仅限专业版)管理资源相关性

[复制链接]

2722

主题

42

听众

3万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
38266
精华
111

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

跳转到指定楼层
楼主
发表于 2015-1-31 19:20:15 |只看该作者 |倒序浏览
管理资源相关性

资源包中的任何既定资源可能与其他资源相关。例如,一个模型可能包含会依次使用纹理和着色器的材质。您也可将资源的所有相关性一起添加到资源包中。但是,不同资源包中的多个资源可能都与一个常用的其他资源集相关(例如,多栋不同的建筑模型可能使用相同的砖块纹理)。如果有对象使用的每个资源包都包含独立的共享相关性副本,则将在加载资源包时创建多余的资源实例。这将浪费内存空间。

为避免此类浪费,可将共享的相关性分离至独立的资源包,并只从其资源需要此类相关性的任何资源包中引用相关性。首先,需要调用 BuildPipeline.PushAssetDependencies 来启用此引用功能。然后,需要构建包含已引用相关性的资源包。接下来,再次调用 PushAssetDependencies,再构建一个资源包,它引用第一个资源包中的资源。继续调用 PushAssetDependencies 可引入其他级别的相关性。引用级别存储在堆栈上,以便可使用相应的 BuildPipeline.PopAssetDependencies 函数返回至某级别。推送和弹出调用需通过添加构建之前发生的初始推送进行平衡。

运行时,需要加载包含相关性的资源包,然后再加载引用这些相关性的任何其他资源包。例如,您需要加载共享纹理的资源包,然后再加载引用这些纹理的独立的材质资源包。

注意,如果预计需要重新构建属于相关性链的资源包,则需先启用 BuildAssetBundleOptions.DeterministicAssetBundle 选项再进行构建。这可确保每次重新构建资源包时用于验证资源的内部 ID 值都相同。

分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

100

主题

3

听众

7683

积分

高级设计师

Rank: 6Rank: 6

纳金币
2378
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

沙发
发表于 2015-1-31 20:50:06 |只看该作者
感谢分享。。。。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

关闭

站长推荐上一条 /1 下一条

手机版|纳金网 ( 闽ICP备08008928号

GMT+8, 2024-5-2 12:13 , Processed in 0.142173 second(s), 28 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部