美文网首页
二、资源加载——4、Unity中的四种资源加载和卸载入门

二、资源加载——4、Unity中的四种资源加载和卸载入门

作者: GameObjectLgy | 来源:发表于2023-08-02 11:41 被阅读0次

Unity中三种资源加载方式:

1.静态引用。具体操作:创建public变量,把文件挂到物体上,在Inspector里把相应资源给public变量,用的时候instantiate或者直接用。

2.Resources.Load。加载Resources文件夹下的资源,加载后instantiate.

3.AssetBundle.Load。加载打包后的资源。

4.Addressable

前两种资源加载方式,对于引用对象是在instantiate时加载的,而不是在加载时直接加载的,所以有时会造成第一次加载时客户端卡。

第三种资源加载方式,在加载时会加载所有引用资源,instantiate时只是生成克隆。
说到Unity资源的卸载,就需要先了解要卸载什么。其实就是要卸载资源所占用的内存,使资源占用的内存释放。
第四种详见Addressable入门。

资源的加载和卸载

  • 1.assetbundle文件内存镜像占用的内存。在加载assetbundle文件完成后,会在内存中形成assetbundle文件的内存镜像,同一个assetbundle文件不能有两个内存镜像。
    卸载方式:AssetBundle.UnLoad(false);
    1. 从assetbundle文件中加载出来的资源所占的内存。
      资源类型:GameObject,Texture,Sprite,Shader,Material
      GameObject为非引用类型,需要Instantiate实例化后使用。如果需要多个GameObject,需要多次实例化。
      卸载方式:AssetBundle.UnLoad(true);连同1的内存也会被释放。
      如果想要只卸载某个已经加载的资源,用Resources.UnLoadAsset(obj)(只能用这个卸载引用资源);
      3.Instantiate实例化的资源所占用的内存。(一般是指GameObject)
      Destroy主要用来销毁实例化的内存占用,即销毁克隆对象,也可用于销毁静态物体,不会自动释放该对象的所有引用。
      4.其他方式:
      加载新场景时会自动销毁2,3的内存占用,但是1的内存占用不会销毁,1只能通过AssetBundle.Unload去释放。

一般的加载流程

1.创建assetbundle(WWW www = new WWW(url))

2.用AssetBundle.Load加载需要的资源

3.判断资源的种类,根据种类去选择下一步操作(可把资源分为共享资源和非共享资源,或者根据使用频率选择是否保存已经加载过的资源等)

4.确保加载完成后,调用AssetBundle.Unload(false)去卸载1创建出的镜像文件。

一般的释放流程

1.如果克隆了对象,用Destroy去销毁。

2.在合适的地方调用Resources.UnloadUnusedAsset(),释放已经没有引用的资源(就是没有地方在用的资源,引用计数为0)

3.如果是想卸载单独的一个用Load加载的资源,用Resources.UnloadAsset(obj)释放(只能用这个卸载引用资源)

4.如果想要立即释放调用GC.Collect()。

举例

UnityEngine.GameObject obj = Resources.Load("MyPrefab");

GameObject instance = Instantiate(obj) as GameObject;
Destroy(instance);
Resources.UnloadUnusedAssets();

这时,内存并没有释放掉,因为MyPrefab还被obj这个变量所这用。

obj = null;

Resources.UnloadUnusedAssets();

这样才能真正释放

Resources.UnloadUnusedAssets()不但要没有实际物体引用,也要没有被生命周期内的变量所引用,才可以释放。

转载参考:https://www.cnblogs.com/zhoujiangyue/articles/7066070.html

相关文章

  • Unity3d常用两种加载资源方案:Resources.Load

    初步整理并且学习unity3d资源加载方法,预计用时两天完成入门学习Unity3d常用两种加载资源方案:Resou...

  • 运行环境

    一、加载资源的形式 输入URL(或跳转页面)加载HTML 加载HTML中的静态资源 二、加载资源的过程 DNS解析...

  • Unity3D WWW用file协议下载失败问题

    Unity3D中加载本地或远程资源会用到WWW类,最使用Unity3D的WWW类加载本地磁盘资源时发现总是加载失败...

  • Unity AssetBundle 资源无法卸载,导致内存泄漏

    我们在使用Unity 使用AssetBundle加载资源时,在资源加载完成后不能调用 AssetBundle.un...

  • Unity 加载资源

    在Resources文件夹里面放入资源。加载如: 扩展方法-扩展系统组件ref 、out、params参数区别 r...

  • Unity资源加载

    资源加载 一、public 面板拖拽。大项目和多人项目基本都用不到。 二、Resources.load 商用不...

  • unity内存优化

    unity的内存优化主要集中在一下三块: www加载资源管理 美术资源管理 UI功能管理 www加载资源管理 原文...

  • Spring IoC 体系分析

    一. 统一资源加载策略: Spring 将资源的定义和资源的加载区分出来资源描述接口: Resource资源加载规...

  • webkit资源加载机制

    资源加载器 1. 特定资源加载器,加载特定资源,比如image对应ImageLoader 2. 缓存机制的资源加载...

  • WebKit架构(二)

    WebKit资源加载机制 资源 网络和资源加载是网页的加载和渲染过程中的第一步,也是必不可少的一步。网页本身就是一...

网友评论

      本文标题:二、资源加载——4、Unity中的四种资源加载和卸载入门

      本文链接:https://www.haomeiwen.com/subject/tslqoltx.html