ResourceManager(四)—— ResourceUnit
来源:互联网 发布:信息比率 知乎 编辑:程序博客网 时间:2024/06/06 03:00
目录为:Assets/Scripts/ResourceManagerResourceUnit.cs
ResourceUnit.cs
using System;using System.Collections;using System.Collections.Generic;using UnityEngine;using Object = UnityEngine.Object;//ResourceTypepublic enum ResourceType{ ASSET, PREFAB, LEVELASSET, LEVEL,}//这个和AssetUnit挺像的,就是一个资源集合类//继承Idisposable//自己实现释放非托管资源,手动进行垃圾回收public class ResourceUnit: IDisposable{ private string mPath; //保留了主要的Asset private Object mAsset; private ResourceType mResourceType; private List<ResourceUnit> mNextLevelAssets; //保留了AssetBundle private AssetBundle mAssetBundle; private int mAssetBundleSize; private int mReferenceCount; //构造函数 internal ResourceUnit(AssetBundle assetBundle, int assetBundleSize, Object asset, string path, ResourceType resourceType) { mPath = path; mAsset = asset; mResourceType = resourceType; mNextLevelAssets = new List<ResourceUnit> (); mAssetBundle = assetBundle; mAssetBundleSize = assetBundleSize; mReferenceCount = 0; } public Object Asset { get { return mAsset; } internal set { mAsset = value; } } public ResourceType resourceType { get { return mResourceType; } } public List<ResourceUnit> NextLevelAssets { get { return mNextLevelAssets; } internal set { foreach (ResourceUnit asset in value) { mNextLevelAssets.Add (asset); } } } public AssetBundle Assetbundle { get { return mAssetBundle; } set { mAssetBundle = value; } } public int AssetBundleSize { get { return mAssetBundleSize; } } public int ReferenceCount { get { return mReferenceCount; } } //输出NextLevel的Assets信息 public void dumpNextLevel() { string info = mPath + "the mReferenceCount : " + mReferenceCount + "\n"; foreach (ResourceUnit ru in mNextLevelAssets) { ru.dumpNextLevel (); info += ru.mPath + "\n"; } Debug.Log (info, ResourceCommon.DEBUGTYPENAME); } //本身RefCount增加,下一级也要递归增加 public void addReferencCount() { ++mReferenceCount; foreach (ResourceUnit asset in mNextLevelAssets) { asset.addReferencCount (); } } //减少ReferenceCount,下一级也要递归减少 public void reduceReferenceCount() { --mReferenceCount; foreach (ResourceUnit asset in mNextLevelAssets) { asset.reduceReferenceCount (); } if (isCanDestroy()) { Dispose (); } } //ReferenceCount为0时就可以释放掉了 public bool isCanDestroy() { return (0 == mReferenceCount); } //释放资源 public void Dispose() { ResourceCommon.Log ("Destroy" + mPath); if (null != mAssetBundle) { //mAssetBundle.Unload(true); mAssetBundle = null; } mNextLevelAssets.Clear (); mAsset = null; }}
阅读全文
0 0
- ResourceManager(四)—— ResourceUnit
- ResourceManager(一)—— ArchiveManager
- ResourceManager(二)—— AssetInfoManager
- ResourceManager(三)—— Request,ResourceAsyncOperation
- ResourceManager(五)—— ResourceCommon
- ResourceManager(六)—— ResourcesManager
- ResourceManager(七)—— 打包AssetBundle然后从AssetBundle加载资源
- ResourceManager(八)—— 在安卓机子上实现加载AssetBundle
- ResourceManager
- ResourceManager
- 【Hadoop】Hadoop官方文档翻译—— YARN ResourceManager High Availability 2.7.3
- Hadoop官方文档翻译—— YARN ResourceManager High Availability 2.7.3
- FLEX实践—在MXML与AS中分别引用resourceManager
- 使用 ResourceManager 类检索资源(来自MSDN)
- 研磨Hadoop源码(五)ResourceManager启动分析1
- 研磨Hadoop源码(六)ResourceManager启动分析2
- 研磨Hadoop源码(五)ResourceManager启动分析1
- 研磨Hadoop源码(六)ResourceManager启动分析2
- Android 内存泄漏和优化(上)
- C语言动态内存开辟malloc, realloc ,calloc,free详解
- mahout学习之聚类(1)——向量的引入与距离测度
- C#.net将Word转PDF
- 修改maven私服上的公共pom配置
- ResourceManager(四)—— ResourceUnit
- SpringMvc中String转data
- 【基因表达数据处理】从RAW测序数据,到FPKM的过程
- Android内存泄漏与优化(中)
- 伪静态和重定向(apache)学习笔记
- Bag of contour fragments for robust shape classification 的简单解读
- 论文浅海低频声场干涉结构及其应用研究的学习
- Java初学者尝试计算任意位数回文数
- 349. Intersection of Two Arrays