LoadManager.cs 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using QFramework;
  5. using System.IO;
  6. using Newtonsoft.Json;
  7. using UnityEngine.Networking;
  8. using UnityEngine.XR.ARFoundation.Samples;
  9. public class LoadManager : MonoSingleton<LoadManager>
  10. {
  11. /// <summary>
  12. /// 本次运行已经加载过的物体
  13. /// </summary>
  14. private List<MaterialData> listMaterialData;
  15. /// <summary>
  16. /// 下载过的物体
  17. /// </summary>
  18. // private List<MaterialObjValue> listLoadData;
  19. private List<DownLoadMaterial> listDownLoad;
  20. private bool isLoading;
  21. public bool isSave = false;
  22. private void Start()
  23. {
  24. // PlayerPrefs.DeleteAll();
  25. isLoading = true;
  26. listMaterialData = new List<MaterialData>();
  27. if (PlayerPrefs.HasKey("LoadData209"))
  28. {
  29. string str = PlayerPrefs.GetString("LoadData209");
  30. listDownLoad = JsonConvert.DeserializeObject<List<DownLoadMaterial>>(str);
  31. Debug.Log(str);
  32. if (listDownLoad == null)
  33. listDownLoad = new List<DownLoadMaterial>();
  34. Debug.Log(listDownLoad.Count);
  35. for (int i = 0; i < listDownLoad.Count; i++)
  36. {
  37. Debug.Log(listDownLoad[i].mObj.name + " " + listDownLoad[i].updateTime);
  38. }
  39. }
  40. else
  41. {
  42. listDownLoad = new List<DownLoadMaterial>();
  43. }
  44. // listDownLoad = new List<DownLoadMaterial>();
  45. }
  46. private void Update()
  47. {
  48. if (isSave)
  49. {
  50. isSave = false;
  51. SaveData();
  52. }
  53. }
  54. /// <summary>
  55. /// 初始 下载所有需要的素材
  56. /// </summary>
  57. /// <param name="listObjValue"></param>
  58. public void InitLoad(List<DownLoadMaterial> listObjValue)
  59. {
  60. bool state;
  61. //int num;
  62. Debug.Log("AllDownLoad " + listObjValue.Count);
  63. // 初始化
  64. try
  65. {
  66. for (int i = 0; i < listObjValue.Count; i++)
  67. {
  68. state = true;
  69. if (listDownLoad != null)
  70. for (int j = 0; j < listDownLoad.Count; j++)
  71. {
  72. if (listDownLoad[j].mObj.DownloadPath == listObjValue[i].mObj.DownloadPath && listDownLoad[j].updateTime == listObjValue[i].updateTime)
  73. {
  74. state = false;
  75. break;
  76. }
  77. }
  78. if (state)
  79. {
  80. if (listObjValue[i].mObj.DownloadPath.IsNotNullAndEmpty())
  81. {
  82. Debug.Log(listObjValue[i].mObj.DownloadPath + " NAME " + listObjValue[i].mObj.name);
  83. DownLoadManage.Instance.AddDownLoadData(listObjValue[i]);
  84. isLoading = true;
  85. }
  86. }
  87. }
  88. LoadShow.Instance.allDownLoad = listObjValue.Count;
  89. LoadShow.Instance.ViewShow(true);
  90. Debug.Log("AllDownLoad " + DownLoadManage.Instance.AllDownLoad);
  91. if (DownLoadManage.Instance.AllDownLoad == 0)
  92. {
  93. Debug.Log("AllDownLoad " + DownLoadManage.Instance.AllDownLoad);
  94. GameManager.Instance.state = true;
  95. #if UNITY_EDITOR
  96. if (!GameManager.Instance.finish)
  97. GameManager.Instance.finish = true;
  98. #endif
  99. isLoading = false;
  100. DynamicLibrary.Instance.AddImageTracked(GameManager.Instance.listImageTracked);
  101. }
  102. }
  103. catch (System.Exception e)
  104. {
  105. ErrorLogPanel.Instance.Show(" 初始化下载信息出现错误 ");
  106. throw;
  107. }
  108. }
  109. /// <summary>
  110. /// 加载素材
  111. /// </summary>
  112. /// <param name="value"></param>
  113. /// <param name="updateTime"></param>
  114. public void LoadMaterial(MaterialObjValue value, int updateTime)
  115. {
  116. try
  117. {
  118. for (int i = 0; i < listMaterialData.Count; i++)
  119. {
  120. // 已经加载过
  121. if (listMaterialData[i].mObj.DownloadPath == value.DownloadPath)
  122. {
  123. SendMsg(value.DownloadPath, listMaterialData[i].value);
  124. return;
  125. }
  126. }
  127. Debug.Log(listDownLoad.Count);
  128. for (int i = 0; i < listDownLoad.Count; i++)
  129. {
  130. // 已经下载了,无需更新,直接加载本地资源
  131. if (listDownLoad[i].mObj.DownloadPath == value.DownloadPath && listDownLoad[i].updateTime == updateTime)
  132. {
  133. object obj;
  134. switch ((MaterialType)int.Parse(value.type))
  135. {
  136. case MaterialType.Video:
  137. string path = listDownLoad[i].mObj.localSavePath;
  138. obj = path;
  139. SendMsg(value.DownloadPath, obj);
  140. listMaterialData.Add(new MaterialData(value, value.localSavePath));
  141. break;
  142. case MaterialType.Model:
  143. DownLoadManage.Instance.AddLocalData(new DownLoadMaterial(value, updateTime));
  144. break;
  145. case MaterialType.Image:
  146. DownLoadManage.Instance.AddLocalData(new DownLoadMaterial(value, updateTime));
  147. break;
  148. default:
  149. break;
  150. }
  151. return;
  152. }
  153. }
  154. // 需要下载
  155. DownLoadManage.Instance.AddDownLoadData(new DownLoadMaterial(value, updateTime));
  156. }
  157. catch (System.Exception e)
  158. {
  159. ErrorLogPanel.Instance.Show(" 加载素材出现错误 " + e.Message);
  160. throw;
  161. }
  162. }
  163. /// <summary>
  164. /// 发送下载消息
  165. /// </summary>
  166. /// <param name="name"></param>
  167. /// <param name="value"></param>
  168. public void SendMsg(string name, object value)
  169. {
  170. MsgHandler.SendMsg(name, new Msg("", value));
  171. }
  172. /// <summary>
  173. /// 下载结束
  174. /// </summary>
  175. /// <param name="mObj"></param>
  176. /// <param name="value"></param>
  177. public void DownLoadEnd(DownLoadMaterial mObj, object value , bool state)
  178. {
  179. // Debug.Log(listMaterialData.Count +" ++++++++++++++");
  180. if (state)
  181. listDownLoad.Add(mObj);
  182. // SaveData();
  183. isSave = true;
  184. listMaterialData.Add(new MaterialData(mObj.mObj, value));
  185. SendMsg(mObj.mObj.DownloadPath, value);
  186. // Debug.Log(mObj.mObj.name);
  187. // 后续根据实际测试结果来决定是否需要保存 模型的object文件 (可能会造成内存占用过大的问题)
  188. }
  189. /// <summary>
  190. /// 获取已下载素材
  191. /// </summary>
  192. /// <param name="downLoadPath"></param>
  193. /// <param name="updatetime"></param>
  194. /// <returns></returns>
  195. public object GetMaterial(string downLoadPath, long updatetime)
  196. {
  197. // Debug.Log(listMaterialData.Count);
  198. for (int i = 0; i < listMaterialData.Count; i++)
  199. {
  200. // Debug.Log(listMaterialData[i].mObj.DownloadPath +" "+downLoadPath);
  201. if (listMaterialData[i].mObj.DownloadPath == downLoadPath)
  202. {
  203. return listMaterialData[i].value;
  204. }
  205. }
  206. return null;
  207. }
  208. // 下载模块同步,CDN下载同步,MaterialShow transform.id
  209. // ARCore 动态替换识别图测试
  210. /// <summary>
  211. /// 初始加载结束
  212. /// </summary>
  213. public void DownLoadFinish()
  214. {
  215. if (isLoading)
  216. {
  217. isLoading = false;
  218. // Debug.Log("DownLoadFinish @@@@@@@@@@@@@@@@@@@@@@@");
  219. GameManager.Instance.state = true;
  220. #if UNITY_EDITOR
  221. if (!GameManager.Instance.finish)
  222. GameManager.Instance.finish = true;
  223. #endif
  224. DynamicLibrary.Instance.AddImageTracked(GameManager.Instance.listImageTracked, GameManager.Instance.dicImageTracked);
  225. }
  226. }
  227. protected void OnDestroy()
  228. {
  229. SaveData();
  230. }
  231. /// <summary>
  232. /// 保存数据至本地 离线版
  233. /// </summary>
  234. private void SaveData()
  235. {
  236. string str = JsonConvert.SerializeObject(listDownLoad);
  237. PlayerPrefs.SetString("LoadData209", str);
  238. }
  239. }
  240. public class DownLoadMaterial
  241. {
  242. public MaterialObjValue mObj { get; set; }
  243. public int updateTime { get; set; }
  244. public DownLoadMaterial(MaterialObjValue mObj, int updateTime)
  245. {
  246. this.mObj = mObj;
  247. this.updateTime = updateTime;
  248. }
  249. }
  250. public class MaterialData
  251. {
  252. public MaterialObjValue mObj;
  253. public object value;
  254. public MaterialData(MaterialObjValue mObj, object value)
  255. {
  256. this.mObj = mObj;
  257. this.value = value;
  258. }
  259. }