查看: 2296|回复: 2
打印 上一主题 下一主题

Unity3D运行时刻资源管理

[复制链接]

435

主题

2

听众

6371

积分

高级设计师

Rank: 6Rank: 6

纳金币
6372
精华
0

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

跳转到指定楼层
楼主
发表于 2012-9-3 09:56:16 |只看该作者 |倒序浏览
Asset Bundles

    制作:BuildPipeline.BuildAssetBundle()

    加载:AssetBundle.Load()

    卸载:AssetBundle.Unload(bool unloadAllLoadedObjects)

        unloadAllLoadedObjects = ***e:释放解压数据,所有已实例化的资源亦被释放。

        unloadAllLoadedObjects = false:释放解压数据,已实例化的资源不释放。



Resource Folders

    制作:Project视图中任意名为“Resources”文件夹下的资源,无论场景中是否用到。

    加载:Resources.Load()

    卸载:Resources.UnloadUnusedAssets(),实例通过Object.Destroy()释放。

    工作方式:

        所有Resources资源及其相关资源都存储于resources.assets中,但如果有资源被某场景使用,该资源则被存储于该场景对应的sharedassets<0~n>.assets中。

        如果编译目标平台为Streaming Web Player,则情况略有不同。你可以在设置中通过First Streamed Level With Resources一项指定所有Resources资源跟随哪一场景(Level)加载。在该模式下,所有先于“First streamed Level”加载的场景,用到的Resource资源同上,都存储于其对应的sharedassets中;后于“First streamed Level”加载的场景,其用到的Resource资源,却存储于resources.assets中。

----------------------------------------------------------------------------------------



Streaming Web Players

    该模式中的Streaming是以场景(Level)为单位的,你可以在编译设置中指定各个场景的载入顺序,Unity Web Player会按该顺序自发异步加载各场景。同时,Unity也提供了通过WWW加载.unity3d场景文件的API,使开发者对场景加载有更灵活的控制权。

    实际上,WWW可以用于网络下载任意资源(纹理、文本、二进制文件),视频和音频也可以通过WWW下载,而且可以做到边下载边播放。



AssetBundle

----------------------------------------------------------------------------------------

想打包进AssetBundle中的二进制文件,其文件名后缀必须为“.bytes”,Unity会将其视为TextAssets对待。



AssetBundle bundle = www.assetBundle;

获取WWW.assetBundle的一刻,由WWW下载的数据压缩包被解压,AssetBundle对象被创建,此时你可以用AssetBundle.Load()实例化资源了。



除非使用AssetBundle.LoadAll()获取所有资源,否则无法得到一个AssetBundle中的资源列表。一般做法是在该AssetBundle中放置一个定好名称的TextAsset,在其中维护一份所有资源的名称列表。



一个AssetBundle包可以引用其他AssetBundle包中的资源。制作时,需要调用BuildPipeline.PushAssetDependencies()和BuildPipeline.PopAssetDependencies()函数对;加载时,被引用的包需要先于引用包加载。

另外,重编这种包需要开启BuildAssetBundleOptions.DeterministicAssetBundle,以保证每次重编时所使用的资源ID都是一样的。



你可以在一个游戏里使用另一个游戏的AssetBundle,前提是该AssetBundle中所引用的资源,要么存在于该AssetBundle中,要么已经被载入了游戏中。为确保AssetBundle引用的资源被编进同包中,制作时可以使用BuildAssetBundleOptions.CollectDependencies选项。

----------------------------------------------------------------------------------------



AssetDatabase

Unity Editor使用AssetDatabase维护项目中的所有资源文件,Unity使用这套API取代传统的filesystem。这是一个Editor类,所以只有在名为“Editor”的文件夹下的Script中才有用。



BuildPipeline.BuildStreamedSceneAssetBundle()或BuildPipeline.BuildPlayer(..., BuildOptions.BuildAdditionalStreamedScenes)生成的场景包,使用WWW下载后,只需调用WWW.assetBundle,而不需AssetBundle.LoadAll(),即可激活包中的场景,即调用WWW.assetBundle后,你就可以通过Application.LoadLevel()来载入场景了。
分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

195

主题

1

听众

4646

积分

中级设计师

Rank: 5Rank: 5

纳金币
4629
精华
0

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

沙发
发表于 2012-9-7 20:38:03 |只看该作者
回复

使用道具 举报

195

主题

1

听众

4646

积分

中级设计师

Rank: 5Rank: 5

纳金币
4629
精华
0

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

板凳
发表于 2012-9-7 20:38:19 |只看该作者
回复

使用道具 举报

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

关闭

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

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

GMT+8, 2024-5-21 23:22 , Processed in 0.089735 second(s), 32 queries .

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

© 2008-2019 Narkii Inc.

回顶部