Unity3D游戏开发之跟踪已下载资源包浅析.docx
-
资源ID:70326593
资源大小:16.62KB
全文页数:3页
- 资源格式: DOCX
下载积分:15金币
快捷下载
会员登录下载
微信登录下载
三方登录下载:
微信扫一扫登录
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
Unity3D游戏开发之跟踪已下载资源包浅析.docx
Unity3D游戏开发之跟踪已下载资源包浅析Keeping track of loaded AssetBundles跟踪已下载资源包 Unity 一次只允许加载一个特定资源包 (AssetBundle) 实例到应用程序中。这意味着您无法检索 WWW 对象中之前已加载的相同资源包 (AssetBundle) 或尚未加载的资源包。实际上,这意味着您尝试访问之前已下载的如下资源包 (AssetBundle) 时:AssetBundle bundle = www.assetBundle; 程序将引出以下错误Cannot load cached AssetBundle.A file of the same name is already loaded from another AssetBundle 且资源包属性将返回 null。如果第一次下载时下载了该资源包 (AssetBundle),则第二次下载时无法检索到该资源包,因此,无需再使用该资源包时,可以将其卸载 或获取其引用,并在它存在于内存中时避免将其下载。可根据需求决定需要采取的相应措施,但我们建议在加载完对象后立即卸载该资源包 (AssetBundle)。这可释放内存空间,并且不会再收到有关加载已缓存资源包 (AssetBundles) 的错误。文章出处【狗刨学习网】如需跟踪已下载资源包 (AssetBundles),可使用包装类协助管理下载,如下:1. using UnityEngine;2. using System;3. using System.Collections;4. using System.Collections.Generic;5. 6. static public class AssetBundleManager 7. / A dictionary to hold the AssetBundle references8. static private Dictionary<string, AssetBundleRef> dictAssetBundleRefs;9. static AssetBundleManager ()10. dictAssetBundleRefs = new Dictionary<string, AssetBundleRef>();11. 12. / Class with the AssetBundle reference, url and version13. private class AssetBundleRef 14. public AssetBundle assetBundle = null;15. public int version;16. public string url;17. public AssetBundleRef(string strUrlIn, int intVersionIn) 18. url = strUrlIn;19. version = intVersionIn;20. 21. 22. / Get an AssetBundle23. public static AssetBundle getAssetBundle (string url, int version)24. string keyName = url + version.ToString();25. AssetBundleRef abRef;26. if (dictAssetBundleRefs.TryGetValue(keyName, out abRef)27. return abRef.assetBundle;28. else29. return null;30. 31. / Download an AssetBundle32. public static IEnumerator downloadAssetBundle (string url, int version)33. string keyName = url + version.ToString();34. if (dictAssetBundleRefs.ContainsKey(keyName)35. yield return null;36. else 37. using(WWW www = WWW.LoadFromCacheOrDownload (url, version)38. yield return www;39. if (www.error != null)40. throw new Exception("WWW download:"+ www.error);41. AssetBundleRef abRef = new AssetBundleRef (url, version);42. abRef.assetBundle = www.assetBundle;43. dictAssetBundleRefs.Add (keyName, abRef);44. 45. 46. 47. / Unload an AssetBundle48. public static void Unload (string url, int version, bool allObjects)49. string keyName = url + version.ToString();50. AssetBundleRef abRef;51. if (dictAssetBundleRefs.TryGetValue(keyName, out abRef)52. abRef.assetBundle.Unload (allObjects);53. abRef.assetBundle = null;54. dictAssetBundleRefs.Remove(keyName);55. 56. 57. 请记住,本示例中的 AssetBundleManager 类是静态的,正在引用的任何资源包 (AssetBundles) 不会在加载新场景时销毁。请将此类当做指南例程,但正如最初建议的那样,最好在使用后立即卸载资源包 (AssetBundles)。您始终可以克隆之前实例化的对象,无需再下载该资源包 (AssetBundles)。文章出处【狗刨学习网】