Unity资源加载的一些问题

Unity小白,决定开始一点点积累一些相关知识。

参考:http://blog.csdn.net/swj524152416/article/details/54022282




Unity中资源动态加载的几种方式比较
unity会自动将场景需要引用到的资源打包到安装包里,没有到的不会跟进去。我们在编辑器里看到的Asset中的文件结构只是工作于编辑器环境下的,在游戏中unity会重新组织数据库。这是我们一定会遇到一个需求,即动态的加载我们自己的文件,而且想维护这个文件存储和加载的位置,并且是各种自定义的文件。
unity资源的类型:
1.Unity内置的常用asset,fbx\jpg...
2.textasset: txt、binary等,对应了它的TextAsset类,可以直接读入文本或者二进制byte
3.scriptable object它是序列化的Object实例,例如把一个Object实例保存成scriptable object,读入进来后就直接在内存中变成那个实例
4.asset bundle它是一个资源压缩包,里面包含了一堆资源
动态资源的存放
有时我需要存放一些自己的文件在磁盘上,例如我想把几个bundle放在初始的安装里, unity有一个streaming asset的概念,用于提供存储接口的访问。我们需要在编辑器建立一个StreamingAssets名字的文件夹,把需要我们放在客户磁盘上的动态文件放在这个文件夹下面,这样安装后,这些文件会放在用户磁盘的指定位置,这个位置可以通过Application.streamingAssetsPath来得到。
Unity必须通过导入将所支持的资源序列化,生成AssetComponents后,才能被Unity使用。
GUID与fileID(本地ID)
Unity会为每个导入到Assets目录中的资源创建一个meta文件,文件中记录了GUID,GUID用来记录资源之间的引用关系。还有fileID(本地ID),用于标识资源内部的资源。资源间的依赖关系通过GUID来确定;资源内部的依赖关系使用fileID来确定。
InstanceID(实例ID)
Unity为了在运行时,提升资源管理的效率,会在内部维护一个缓存表,负责将文件的GUID与fileID转换成为整数数值,这个数值在本次会话中是唯一的,称作实例ID(InstanceID)。
程序启动时,实例ID缓存与所有工程内建的对象(例如在场景中被引用),以及Resource文件夹下的所有对象,都会被一起初始化。如果在运行时导入了新的资源,或从AssetBundle中载入了新的对象,缓存会被更新,并为这些对象添加相应条目。实例ID仅在失效时才会被从缓存中移除,当提供了指定文件GUID和fileID的AssetBundle被卸载时会产生移除操作。
卸载AssetBundle会使实例ID失效,实例ID与其文件GUID和fileID之间的映射会被删除以便节省内存。重新载入AssetBundle后,载入的每个对象都会获得新的实例ID。
资源的生命周期

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: UnityResources是Unity中用于加载资源的类。它可以加载各种类型的资源,包括图片、音频、视频、模型等。使用UnityResources加载资源非常简单,只需要指定资源的路径即可。例如,如果要加载一个名为“myImage”的图片,可以使用以下代码: Texture2D myTexture = Resources.Load<Texture2D>("myImage"); 这将在Resources文件夹中查找名为“myImage”的图片,并将其加载到Texture2D对象中。需要注意的是,Resources文件夹必须位于Assets文件夹的根目录下,否则无法正确加载资源。 ### 回答2: Unity 是一款颇受欢迎的游戏引擎,而 UnityResources 怎么加载资源呢?通俗来讲,UnityResources 是 Unity 自带的一种加载资源的方式,它可以自动加载 Unity 项目中 Assets 文件夹下的资源。具体来说,可以使用 Resources.Load 方法来动态加载Unity 资源。 首先,需要在 Resources 文件夹下创建相应的文件夹并放入资源,然后就可以在代码中通过 Resources.Load 来加载这些资源。具体代码如下: ```c# //加载预制件 GameObject prefab = Resources.Load("Prefabs/Cube") as GameObject; //实例化预制件 Instantiate(prefab, transform.position, Quaternion.identity); //加载文本 TextAsset textAsset = Resources.Load("Texts/MyText") as TextAsset; //在控制台输出文本 Debug.Log(textAsset.text); //加载纹理 Texture texture = Resources.Load("Textures/MyTexture") as Texture; //给物体添加材质 gameObject.GetComponent<Renderer>().material.mainTexture = texture; //加载音频 AudioClip audioClip = Resources.Load("Audios/MyAudio") as AudioClip; //播放音频 AudioSource.PlayClipAtPoint(audioClip, Camera.main.transform.position); ``` 需要注意的是,使用 Resources.Load 方法加载资源并不是最优的方式,因为它需要在运行时动态加载资源,会造成一定的性能损失。而 AssetBundle 是一个更好的选择。但是在某些场景下,比如需要经常切换场景时,使用 Resources.Load 会更容易管理和维护。 除了 Resources.Load 方法,Unity 还提供了其他的资源加载方式,比如 AssetDatabase 和 AssetBundle 等,针对不同的情况可以选择不同的加载方式。例如,AssetBundle 可以在不同的场景之间共享资源,提高资源的复用性。 总之,UnityResources 加载资源是一个灵活多变的方式,可以根据需要选择不同的加载方式。需要注意的是,在开发过程中要尽可能提高资源加载效率和减少资源的浪费,以保证应用程序的稳定性和流畅性。 ### 回答3: Unity是一款非常流行的游戏引擎,它的资源加载机制非常重要。在Unity中,要加载资源通常需要用到unityresources。 unityresources是一个二进制文件格式,它用于存储Unity中各种资源,例如模型、纹理、音频等,这些资源会被编译成一个或多个unityresources文件,以便于在游戏运行时快速加载和使用。 在Unity加载unityresources,通常需要使用Resource.Load或Resources.Load函数。这两个函数都可以加载unityresources文件中的资源,但是它们的使用方式略有不同。 Resource.Load函数是一种直接加载unityresources中指定资源的方法。它的用法比较简单,只需要传入资源路径即可: ``` Resource.Load("路径/资源名"); ``` Resources.Load函数则需要先加载unityresources文件,然后再从其中获取指定资源。具体用法如下: ``` var resFile = Resources.Load("路径/资源名") as ResourceFile; var resObj = resFile.LoadAsset("资源名"); ``` 以上代码首先通过Resources.Load函数加载指定的unityresources文件,然后通过ResourceFile.LoadAsset方法获取指定资源。 需要注意的是,使用Resource.Load或Resources.Load函数加载unityresources文件时,要指定正确的资源路径和资源名称,否则将无法加载资源。此外,由于unityresources文件是二进制格式,因此可以使用校验和等方法来确保其完整性,从而避免误操作带来的损失。 总之,unityresources是Unity中非常重要的资源加载机制,正确的使用方法和技巧能够大大提高游戏的性能和质量。因此,开发者应该仔细学习和掌握相关知识,并根据实际需求灵活运用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值