这篇文章将为大家详细讲解有关Unity的资源管理是怎样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。在Unity最佳实践明确指出, 要使用AssetBundle而不是Resources目录来管理资源。然而,事情并不像Unity官方描述的那么美好。因为使用AssetBundle我们甚至无法实现一个易用的,完备的资源管理方案。据Unity官方说,一般有两种方案。方案一,如果你的游戏是关卡性质的,可以在一个关卡里加载所有AssetBundle,然后在进入下一关卡时,卸载本关卡中加载的所有AssetBundle. 但这种机制似乎只对愤怒的小鸟这种小游戏才适用吧:D。方案二,如果你的游戏不是关卡类的,那么Unity推荐做一个资源对AssetBundle引用计数。如果一个对象(Asset或其他AssetBundle)引用此AssetBundle则其引用计数加1. 如果此AssetBundle首次加载(即加载前引用计数为0), 还需要递归对其依赖引用计数加1。如果一个AssetBundle的引用计数为0则释放这个AssetBundle,同时还需要递归对其依赖引用计数减1.除非,我们做像愤怒小鸟一样的通关游戏,不然似乎只有方案二给我们用。而且方案二乍一看是完备的,因为这正是GC算法的一种实现。但是如果稍微仔细思考一下就会发现,这个方案只是AssetBundle的管理方案,是个半成品,要如何管理管理资源之间的依赖,Unity却只字未掉,看起来是让用户自己想办法,这似乎与其易学易用的宗旨不太相符。下面来分析一下Unity中资源之间的关系。
在Unity中资源大约分为以下几种:纹理(Texture)、网格(Mesh)、动画片段(AnimationClip)、音频片段(AudioClip)、材质(Material)、着色器(Shader)、字体资源(Font)以及文本资源(TextAsset)。AssetBundle中还有一个极其特殊的存在,那就是Prefab, AssetBundle.LoadAsset时返回的是GameObject, 但是又必须经过Instantitate之后变成另外一个GameObject才能使用。此后所说的GameObject均是Instantitate之后的GameObject。GameObject可以添加各种Component来引用上述除资源,还可以通过代码动态增减某个GameObject上的Component或者修改Component对资源的引用。这种灵活性给资源管理带来了巨大麻烦,而没有这种灵活性,逻辑的实现就会更麻烦。下面,举例来说明一下,要正确管理GameObject和资源之间的引用关系有多么艰难。Prefab P能过Instantitate生成A,B,C,D四个GameObject.执行如下代码之后,A引用{P,T1}, B引用{P,T1}, C引用{P,T3}。并且T2应该被Unload。1: A.GetComponent
2: B.GetComponent
3: C.GetComponent
4: C.GetComponent
如果P是一个树状态结构,即有P–(child)–>p1–(child)–>p2。1: A.p1.p2.GetComponent
2: B.p1.p2.GetComponent
3: C.p1.p2.GetComponent
4: C.p1.p2.GetComponent
这篇文章将为大家详细讲解有关笔记本电脑如何设置合上盖子不进入睡眠模式,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1.在键盘上按下【win+i】组合键,调出设置选项界面,选择【系统】进入。2.进入后在左侧选择【电源和睡眠】,…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。