码迷,mamicode.com
首页 > 其他好文 > 详细

关于Resources文件夹的使用

时间:2019-03-16 13:01:20      阅读:796      评论:0      收藏:0      [点我收藏+]

标签:多个   友好   打包   系统   app id   sea   star   res   位置   

前言


在Assets目录下,所有被命名为“Resources”的文件夹都能通过Resources.Load()函数来访问,因此可能存在多个Resources文件,加载对象时将检查每个文件夹。这样来看,Resources使用起来似乎简单又方便,然而,Resources是一种官方不推荐使用的资源管理方式。


示例


用Resources来加载一个名为“Cube”的Prefab(注:这个Prefab必须在使用前放到Assets/Resources目录下)。

using UnityEngine;

public class ExampleClass : MonoBehaviour
{
    void Start()
    {
        GameObject go = Resources.Load<GameObject>("Cube");
        Instantiate(go);
    }
}


为什么不建议使用


  1. 使用Resources文件夹会使内存管理变得困难。一些用Resources加载的资源,比如纹理,即使没有被实例化到场景中也会占用内存。即使在不需要这些资源的时候,可以使用Resources.UnloadUnuseAssets来卸载它们,但这样做会带来额外的cpu消耗,而且什么时候使用也会成为一个问题。
  2. Resources会导致包体变大,游戏启动时间变长。通常,Unity会自动计算哪些资源被使用,但在Resources文件中所有资源都会包含在build里。在打包项目时,所有Resources文件中的对象都会合并到一个序列化文件中,这个文件储存了元数据和索引信息。索引信息里包含一棵序列化查找树,它的构造时间以O(n log(n))增长,这会导致资源的加载时间随着资源数量的增加而线性增长。这一步是在程序启动时发生的,并且无法跳过。即使你没有在第一个场景中使用这些资源,系统也会花费时间来初始化整个Resources。这就会导致游戏的启动时间过长,可能整个游戏启动后就会长时间处于黑屏状态,这显然是不友好的。
  3. Resources导致代码的可重用性降低。首先,Resources对资源的位置有硬编码要求,其次,使用Resources会使所有资源都暴露在外。


什么时候使用


  1. 快速构建原型。由于Resources文件的易用性,可以使用它来快速开发产品原型,但在后期应该消除对Resources的使用。
  2. 小部分变化不大的资源。
  3. 一些使用MonoBehaviour单例的Prefab(如,使用单例模式的声音管理类等)或者一些配置数据(如,App ID等)。

关于Resources文件夹的使用

标签:多个   友好   打包   系统   app id   sea   star   res   位置   

原文地址:https://www.cnblogs.com/gitctrls/p/10541687.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!