当前位置: 首页 > wzjs >正文

尚云网站建设建设招聘网站需要注册什么证

尚云网站建设,建设招聘网站需要注册什么证,网站设计和美工一样吗,天水市住房和城乡建设局网站今天来详细介绍一下LoadManager、ResourceManager。LoadManager和ResourceManager主要负责框架的资源加载和管理,话不多说直接开始。 LoadManager LoadManager主要的功能有: 提供资源加载的接口提供资源卸载的接口持有、管理AsyncOperationHandle句柄对…

        今天来详细介绍一下LoadManager、ResourceManager。LoadManager和ResourceManager主要负责框架的资源加载和管理,话不多说直接开始。

LoadManager

        LoadManager主要的功能有:

  1. 提供资源加载的接口
  2. 提供资源卸载的接口
  3. 持有、管理AsyncOperationHandle句柄对象
  4. Loader类的创建于调用

        LoadManager定义了多种加载方式的接口。加载单个资源、加载多个资源、加载场景。接口参数由资源名称、加载回调方法组成。代码如下:

/// <summary>异步加载资源(单个)</summary>
/// <param name="pAssetName">资源名称</param>
/// <param name="pLoadCallback">加载回调</param>
public void LoadAssetAsync(string pAssetName, Action<bool> pLoadCallback = null)
{LoadAsset(pAssetName, ELoadType.LoadAssetAsync, pLoadCallback);
}/// <summary>异步加载资源(多个)</summary>
/// <param name="pLabelsName">Labals</param>
/// <param name="pLoadCallback">加载回调</param>
public void LoadAssetsAsyc(string pLabelsName, Action<bool> pLoadCallback = null)
{LoadAsset(pLabelsName, ELoadType.LoadAssetsAsyc, pLoadCallback);
}/// <summary>加载场景</summary>
/// <param name="pSceneName"></param>
/// <param name="pLoadCallback"></param>
public void LoadSceneAsyc(string pSceneName, Action<bool> pLoadCallback = null)
{LoadAsset(pSceneName, ELoadType.LoadSceneAsyc, pLoadCallback);
}

        不同的加载接口最终统一调用LoadAsset方法。LoadAsset负责Loader的创建与加载接口的调用。LoadAsset内通过调用Loader的加载接口进行资源加载。创建出来的Loader会被进行缓存,在加载完成后会移除对应的Loader。这样做的目的是避免同一资源重复。

        为避免资源的重复加载,AsyncOperationHandle句柄会被保存在成员对象mHandleDictionay中,根据资源名称的HashCode来进行判断。如果已经加载过,则直接返回。

private Dictionary<int, AsyncOperationHandle> mHandleDictionay = new Dictionary<int, AsyncOperationHandle>();
private Dictionary<int, Loader> mLoaderDictionary = new Dictionary<int, Loader>();private void LoadAsset(string pAssetName, ELoadType pLoadType, Action<bool> pLoadCallback = null)
{int loaderId = pAssetName.GetHashCode();if (mHandleDictionay.ContainsKey(loaderId)){pLoadCallback?.Invoke(true);return;}Loader loader = CreateLoader(loaderId, pLoadCallback);if (loader != null){switch (pLoadType){case ELoadType.LoadAssetAsync:loader.LoadAssetAsync(pAssetName);break;case ELoadType.LoadAssetsAsyc:loader.LoadAssetsAsync(pAssetName);break;case ELoadType.LoadSceneAsyc:loader.LoadSceneAsync(pAssetName);break;}}
}private Loader CreateLoader(int loaderId, Action<bool> pLoadCallback = null)
{Loader loader = null;if (!mLoaderDictionary.ContainsKey(loaderId)){loader = new Loader(loaderId, pLoadCallback);mLoaderDictionary.Add(loaderId, loader);}return loader;
}

        接下来说一下Loader类。Loader类的主要功能有:

  1. 提供资源加载的接口。
  2. 负责Addressables资源加载接口的调用。
  3. 持有LoaderId、mLoadCallback(加载回调)、mAsyncOperationHandle(加载句柄)这些成员变量。
  4. 完成加载后的处理。

        Loader类提供了多种对应Addressables加载资源的接口,加载单个资源、加载多个资源、加载场景。这些接口实现了Addressables对资源加载的调用。

        资源加载完成后统一回调LoadComplete方法,LoadComplete会传入AsyncOperationHandle参数。加载成功后会在LoadManager移除Loader,在LoadManager添加AsyncOperationHandle,在ResourceManager添加资源等操作。

private class Loader
{private int mLoaderId = -1;private Action<bool> mLoadCallback = null;private AsyncOperationHandle mAsyncOperationHandle = default;public Loader(int loaderId, Action<bool> pLoadCallback = null){mLoaderId = loaderId;mLoadCallback = pLoadCallback;}#region AsyncOperationHandle.Completedpublic void LoadAssetAsync(string pAssetName){mAsyncOperationHandle = Addressables.LoadAssetAsync<UnityEngine.Object>(pAssetName);mAsyncOperationHandle.Completed += LoadComplete;}public void LoadAssetsAsync(string pLabelsKey){mAsyncOperationHandle = Addressables.LoadAssetsAsync<UnityEngine.Object>(pLabelsKey, null);mAsyncOperationHandle.Completed += LoadComplete;}public void LoadSceneAsync(string pSceneName){mAsyncOperationHandle = Addressables.LoadSceneAsync(pSceneName);mAsyncOperationHandle.Completed += LoadComplete;}#endregionprivate void LoadComplete(AsyncOperationHandle pHandle){if (pHandle.Status == AsyncOperationStatus.Succeeded){ManagerCollection.LoadManager.RemoveLoader(mLoaderId);ManagerCollection.LoadManager.AddHandle(mLoaderId, pHandle);ManagerCollection.ResourceManager.AddAsset(pHandle.Result);mLoadCallback?.Invoke(true);}else if (pHandle.Status == AsyncOperationStatus.Failed){Debug.LogWarning(pHandle.OperationException.Message);mLoadCallback?.Invoke(false);}}
}

        这里只展示了LoadManager的部分代码,关于完整代码,各位同学可以在文章最后获取Git下载工程。

ResourceManager

        ResourceManager主要功能有:

  1. 持有、管理各类型资源(类型包括:AudioClip、GameObject、TextAsset、Texture等等)。
  2. 提供各类型资源获取的接口。
  3. 提供添加资源的接口。
  4. 提供移除资源的接口。

        ResourceManager内定义了多个用于存储不同类型的Dictionary。

public class ResourceManager : ManagerBase<ResourceManager>
{private Dictionary<string, AudioClip> mAudioClipDictionary = new Dictionary<string, AudioClip>();private Dictionary<string, GameObject> mGameObjectDictionary = new Dictionary<string, GameObject>();private Dictionary<string, TextAsset> mTextAssetDictionary = new Dictionary<string, TextAsset>();public Dictionary<string, Texture> mTextureDictionary = new Dictionary<string, Texture>();private Dictionary<string, Sprite> mSpriteDictionary = new Dictionary<string, Sprite>();
}

        在LoadManager中提到过,加载成功后会调用ResourceManager的AddAsset方法进行资源的添加。AddAsset会根据资源类型,调用不同的添加方法,将资源保存到对应的Dictionary中。代码如下:

public void AddAsset(object pResult)
{if (pResult is List<UnityEngine.Object>){List<UnityEngine.Object> assetList = pResult as List<UnityEngine.Object>;for (int index = 0; index < assetList.Count; index++){AddAsset(assetList[index]);}}else{if (pResult is AudioClip)AddAudioClip(pResult);else if (pResult is GameObject)AddGameObject(pResult);else if (pResult is TextAsset)AddTextAsset(pResult);else if (pResult is Texture)AddTexture(pResult);else if (pResult is Sprite)AddSprite(pResult);}
}private void AddAudioClip(object pAssetObject)
{AudioClip audioClip = pAssetObject as AudioClip;if (!mAudioClipDictionary.ContainsKey(audioClip.name))mAudioClipDictionary.Add(audioClip.name, audioClip);
}private void AddGameObject(object pAssetObject)
{GameObject gameObj = pAssetObject as GameObject;if (!mGameObjectDictionary.ContainsKey(gameObj.name))mGameObjectDictionary.Add(gameObj.name, gameObj);
}

        ResourceManager为每一个类型的资源定义了获取资源的方法。这里之所以为每一个类型都定义一个接口,是为了在调用ResourceManager的资源获取接口时,清楚的知道有哪些接口可以使用,并清楚的知道接口返回什么类型的结果。

public AudioClip GetAudioClip(string pAudioClipName)
{if (mAudioClipDictionary.ContainsKey(pAudioClipName))return mAudioClipDictionary[pAudioClipName];elsereturn null;
}public GameObject GetGameObject(string pGameObjectName)
{if (mGameObjectDictionary.ContainsKey(pGameObjectName))return mGameObjectDictionary[pGameObjectName];elsereturn null;
}

        最后就是移除资源的接口,与添加接口类似,每个类型的资源一一对应。

public void RemoveAsset(object pResult)
{if (pResult is List<UnityEngine.Object>){List<UnityEngine.Object> assetList = pResult as List<UnityEngine.Object>;for (int index = 0; index < assetList.Count; index++){RemoveAsset(assetList[index]);}}else{if (pResult is AudioClip)RemoveAudioClip(pResult);else if (pResult is GameObject)RemoveGameObject(pResult);else if (pResult is TextAsset)RemoveTextAsset(pResult);else if (pResult is Texture)RemoveTexture(pResult);else if (pResult is Sprite)RemoveSprite(pResult);}
}private void RemoveAudioClip(object pAssetObject)
{AudioClip audioClip = pAssetObject as AudioClip;if (mAudioClipDictionary.ContainsKey(audioClip.name))mAudioClipDictionary.Remove(audioClip.name);
}private void RemoveGameObject(object pAssetObject)
{GameObject gameObj = pAssetObject as GameObject;if (mGameObjectDictionary.ContainsKey(gameObj.name))mGameObjectDictionary.Remove(gameObj.name);
}

        有关ResourceManager就先介绍到这里,这里只展示了部分代码,关于完整代码,各位同学可以在文章最后获取Git下载工程。

相关链接

Release-Framework-Client客户端框架Git:https://gitee.com/huoyixian/release-framework-client

Manager模块介绍:https://blog.csdn.net/huoyixian/article/details/145613966


文章转载自:

http://aOIzwkbx.fxxmj.cn
http://lUf4CbPs.fxxmj.cn
http://tEkzGJ8B.fxxmj.cn
http://oewHA1l9.fxxmj.cn
http://XrXUAlhc.fxxmj.cn
http://6flxIGb2.fxxmj.cn
http://pC28wU5D.fxxmj.cn
http://WyOmishR.fxxmj.cn
http://kdMrGEnl.fxxmj.cn
http://V1TGjQE6.fxxmj.cn
http://wM7Qhi2S.fxxmj.cn
http://XJE2gb9T.fxxmj.cn
http://OtBJ71Kw.fxxmj.cn
http://pX4TcbkV.fxxmj.cn
http://e9vJrwYf.fxxmj.cn
http://Lbz7bykx.fxxmj.cn
http://EGbOT4D3.fxxmj.cn
http://hgG4i9Xq.fxxmj.cn
http://0RaYm1BR.fxxmj.cn
http://1ywdwgCE.fxxmj.cn
http://3NUQnagq.fxxmj.cn
http://t5KASCUU.fxxmj.cn
http://1DIRF7aa.fxxmj.cn
http://j0l80Dm0.fxxmj.cn
http://cIv7M33v.fxxmj.cn
http://TQRLFXgy.fxxmj.cn
http://bIf1oFLq.fxxmj.cn
http://qN8eXcuE.fxxmj.cn
http://EFv71bKN.fxxmj.cn
http://g3ZsKKP8.fxxmj.cn
http://www.dtcms.com/wzjs/672081.html

相关文章:

  • 免费自助创建网站网站建设与管理课程实训
  • 网站建设及编辑岗位职责制作公司网站 黑龙江
  • 网站设置三方交易如何建立自己的摄影网站
  • 用户体验做的好的网站网络课程教学平台
  • 中山工程建设信息网站wordpress网站图片
  • 二级域名做很多网站中国空间站vr全景
  • 昆山企业网站建设网站开发一般用什么开发语言
  • 两学一做学习网站献县做网站价格
  • 长沙网页网站制作视频营销成功的案例
  • 搜索引擎优化网站排名网站建设 今网科技
  • 公司网站是用什么软件做wordpress commentor
  • 青岛网站开发虚拟物品网站制作模板
  • 台州市建设招标投标网站做网站刷东西
  • 企业网站设计概念成都旅游学院
  • 网站推广的工具网站开发 渠道
  • thinkphp 网站模板西安直播网站开发
  • 建设文库网站网站建设费会计处理
  • 无法解析您网站的域名.外贸网站商城
  • 哪些网站做问卷可以赚钱电商网站做互联网金融
  • 网站降权恢复中国经济总量
  • wap卖料建站系统wordpress连接memcached
  • 图片生成链接的网站企业微网站案例
  • 泰安聊城网站建设建站工具cms
  • 做论文常用网站做公司网站要走哪些流程
  • 郑州建设网站黔西南州做网站
  • golang做网站建筑规范app
  • 服装网站模板seo运营是什么意思
  • 门户网站的运营公众号 创意名字
  • 网站建设实施步骤宝塔搭建app教程
  • 中国做类似 esty的网站管理类培训课程