• QQ
  • nahooten@sina.com
  • 常州市九洲新世界花苑15-2

游戏开发

Resources.load及AssetBundle.Load加载过程研究

原创内容,转载请注明原文网址:http://homeqin.cn/a/wenzhangboke/jishutiandi/youxikaifa/2018/1008/49.html

  1.  
    ///
  2.  
    /// 对Resources.Load进行试验.
  3.  
    /// 试验准备:
  4.  
    /// 1.一个Cube预制体,包含一个贴图,放在Resources文件夹下;
  5.  
    /// 2.一个只有相机的场景,上面挂着TestScript脚本(也就是本脚本)
  6.  
    ///
  7.  
     
  8.  
    using UnityEngine;
  9.  
    using System.Collections;
  10.  
    using UnityEditor;
  11.  
     
  12.  
    public class TestScript : MonoBehaviour
  13.  
    {
  14.  
    IEnumerator ie;
  15.  
    void Start()
  16.  
    {
  17.  
    ie = TestLoad ();
  18.  
    }
  19.  
     
  20.  
    void Update()
  21.  
    {
  22.  
    if(Input.GetKeyDown(KeyCode.DownArrow))
  23.  
    {
  24.  
    ie.MoveNext();
  25.  
    }
  26.  
    }
  27.  
     
  28.  
    IEnumerator TestLoad()
  29.  
    {
  30.  
    //加载前,Assts中一共有26个资源,Scene Memory中一共有15个资源
  31.  
    Object t = Resources.Load ("Cube");
  32.  
    Debug.Log ("加载资源");
  33.  
     
  34.  
    yield return 0;
  35.  
    GameObject go = Instantiate(t) as GameObject;
  36.  
    Debug.Log ("实例化资源");
  37.  
     
  38.  
    yield return 1;
  39.  
    t = null;
  40.  
    // go = null;
  41.  
    // Destroy (go);
  42.  
    Resources.UnloadUnusedAssets ();
  43.  
    Debug.Log ("卸载未使用资源");
  44.  
     
  45.  
     
  46.  
     
  47.  
    }
  48.  
    }

 

 

再总结:加载时在Assets中引入了5个资源(GameObject,MeshRenderer,MeshFilter,BoxCollider和Transform),只被t引用,使t=null,调Resources.UnloadUnusedAssets ()即可销毁
实例化时在Scene Momory中引入了5个资源(GameObject,MeshRenderer,MeshFilter,BoxCollider和Transform)(是从Asset中复制过来的),只被场景中的物体引用,Destroy该物体,就直接销毁了这些资源,不需调用 Resources.UnloadUnusedAssets ()
实例化时还在Assets中引入了材质,贴图,shader等资源,这部分资源同时被t和场景中的物体所引用,使t=null,并Destroy该物体,调用Resources.UnloadUnusedAssets ()才能使之销毁
 
再再总结:
使用AssetBundle.Load加载Prefab与使用Resources.Load表现基本一致
只有一点区别:
Object t = myLoadedAssetBundle.LoadAsset("Cube");
加载资源时,会把Cube所依赖的所有资源都加载Assets,而不是要等到实例化时才加载那四个。即这一步以后,Assets中的资源数量会以下增加9个(5+4)


上篇:上一篇:U3D用单例创建并永久化游戏对象
下篇:下一篇:Unity使用HDR实现天空盒