TemplateModel.cs 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316
  1. using SC.XR.Unity.Module_InputSystem;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.IO;
  5. using TriLibCore;
  6. using UnityEngine;
  7. public class TemplateModel : BaseTemPlate
  8. {
  9. private GameObject m_ModelObj = null;
  10. protected override void OnEnable()
  11. {
  12. base.OnEnable();
  13. StartCoroutine(LoadModel());
  14. }
  15. private IEnumerator LoadModel()
  16. {
  17. yield return new WaitForSeconds(0.01f);
  18. if (GameManager.Instance.IsRuning && m_ModelObj == null)
  19. {
  20. //Debug.Log(Data.name);
  21. Debug.Log("DGJ ==>> "+Data.localLoadPath);
  22. var ab = AssetBundle.LoadFromFileAsync(Data.localLoadPath);
  23. yield return ab;
  24. if (ab == null)
  25. {
  26. Debug.Log("Failed to load AssetBundle!");
  27. }
  28. else
  29. {
  30. var allab = ab.assetBundle.LoadAllAssetsAsync<GameObject>();
  31. yield return allab;
  32. var prefab = ab.assetBundle.LoadAssetAsync<GameObject>((allab.allAssets[0] as GameObject).name);
  33. yield return prefab;
  34. switch (prefab.asset.name)
  35. {
  36. case "GHZ_OOBE_230721":
  37. var objload = Resources.LoadAsync<GameObject>("GongYe");
  38. yield return objload;
  39. GameObject obj = null;
  40. if (objload.asset is GameObject)
  41. {
  42. obj = objload.asset as GameObject;
  43. }
  44. if (obj == null)
  45. {
  46. Debug.LogError(" GHZ_OOBE_230721 物体加载失败,请查看是否导入相关Packages ");
  47. obj = new GameObject();
  48. }
  49. m_ModelObj = GameObject.Instantiate(obj,transform);
  50. m_ModelObj.name = "GongYe";
  51. if (GameObject.Find("AudioManager") ==null)
  52. {
  53. GameObject audio = Resources.Load<GameObject>("AudioManager");
  54. if(audio ==null)
  55. {
  56. Debug.LogError(" GHZ_OOBE_230721 Packages内AudioManager组件丢失");
  57. audio = new GameObject();
  58. }
  59. GameObject Audio = GameObject.Instantiate(audio, transform);
  60. Audio.name = "AudioManager";
  61. }
  62. break;
  63. case "GHZ_XXXXXX_230721":
  64. break;
  65. default:
  66. m_ModelObj = Instantiate(prefab.asset as GameObject, transform);
  67. break;
  68. }
  69. //if (ab.LoadAllAssets<GameObject>()[0].name == "MRVideo")
  70. //m_ModelObj.AddComponent<MovieScreen>();
  71. gameObject.AddComponent<ManipulationHandler>();
  72. gameObject.AddComponent<BoundingBox>();
  73. gameObject.AddComponent<Patch_ModelController>();
  74. yield return new WaitForSeconds(0.3f);
  75. ab.assetBundle.Unload(false);
  76. HideCollider();
  77. }
  78. //var obj = DownloadManager.Instance.GetAbObj(Util.MD5Encrypt(Data.downloadPath));
  79. //if (obj != null)
  80. //{
  81. // m_ModelObj = Instantiate(obj, transform);
  82. // m_ModelObj.transform.localPosition = Vector3.zero;
  83. // m_ModelObj.gameObject.SetActive(true);
  84. //}
  85. }
  86. }
  87. public void LoadModel(AssetBundle ab)
  88. {
  89. GameManager.Instance.StartCoroutine(LoadABModel(ab));
  90. //LoadABModel(ab);
  91. }
  92. private IEnumerator LoadABModel(AssetBundle ab)
  93. {
  94. if (ab == null)
  95. {
  96. Debug.Log("Failed to load AssetBundle!");
  97. }
  98. else
  99. {
  100. var allab = ab.LoadAllAssetsAsync<GameObject>();
  101. yield return allab;
  102. var prefab = ab.LoadAssetAsync<GameObject>((allab.allAssets[0] as GameObject).name);
  103. switch (prefab.asset.name)
  104. {
  105. case "GHZ_OOBE_230721":
  106. var objload = Resources.LoadAsync<GameObject>("GongYe");
  107. yield return objload;
  108. GameObject obj = null;
  109. if (objload.asset is GameObject)
  110. {
  111. obj = objload.asset as GameObject;
  112. }
  113. m_ModelObj = GameObject.Instantiate(obj, transform);
  114. m_ModelObj.name = "GongYe";
  115. if (GameObject.Find("AudioManager") == null)
  116. {
  117. GameObject audio = Resources.Load<GameObject>("AudioManager");
  118. if (audio == null)
  119. {
  120. Debug.LogError(" GHZ_OOBE_230721 Packages内AudioManager组件丢失");
  121. audio = new GameObject();
  122. }
  123. GameObject Audio = GameObject.Instantiate(audio, null);
  124. Audio.name = "AudioManager";
  125. }
  126. break;
  127. case "GHZ_XXXXXX_230721":
  128. break;
  129. default:
  130. m_ModelObj = Instantiate(prefab.asset as GameObject, transform);
  131. break;
  132. }
  133. //if (ab.LoadAllAssets<GameObject>()[0].name == "MRVideo")
  134. //m_ModelObj.AddComponent<MovieScreen>();
  135. gameObject.AddComponent<ManipulationHandler>();
  136. gameObject.AddComponent<BoundingBox>();
  137. // yield return new WaitForSeconds(0.3f);
  138. ab.Unload(false);
  139. HideCollider();
  140. }
  141. }
  142. protected override void OnAwake()
  143. {
  144. base.OnAwake();
  145. }
  146. public override void SetData(MaterialObjValue value, int updateTime)
  147. {
  148. base.SetData(value, updateTime);
  149. //if (gameObject.GetComponent<Collider>() != null)
  150. //{
  151. // Destroy(gameObject.GetComponent<Collider>());
  152. //}
  153. //下载列表中加入数据
  154. if (!GameManager.Instance.IsRuning|| Data == null)
  155. {
  156. // DownloadManager.Instance.AddDownloadData(Data);
  157. DownLoadMaterial data = new DownLoadMaterial();
  158. data.downLoadPath = value.DownloadPath;
  159. data.localLoadPath = Application.persistentDataPath + "/Material/" + Path.GetFileName(value.DownloadPath);
  160. data.updataTime = GameManager.Instance.m_SceneValue.updateTime;
  161. data.type = "3";
  162. MsgHandler.AddListener(value.DownloadPath, HandleMsg);
  163. DownloadResManager.Instance.DownLoad(data);
  164. Debug.Log(" SetData " + updateTime);
  165. this.Data = data;
  166. }
  167. else
  168. {
  169. if (IsAB())
  170. LoadABModel();
  171. else
  172. TriLibModel();
  173. //AssetBundle ab = AssetBundle.LoadFromFile(Data.localLoadPath);
  174. //if (ab == null)
  175. //{
  176. // Debug.Log("Failed to load AssetBundle!");
  177. // return;
  178. //}
  179. //var prefab = ab.LoadAsset<GameObject>(ab.LoadAllAssets<GameObject>()[0].name);
  180. //m_ModelObj = Instantiate(prefab, transform);
  181. //ab.Unload(false);
  182. //gameObject.AddComponent<ManipulationHandler>();
  183. //gameObject.AddComponent<BoundingBox>();
  184. //var obj = DownloadManager.Instance.GetAbObj(Util.MD5Encrypt(Data.downloadPath));
  185. //if (obj != null)
  186. //{
  187. // m_ModelObj = Instantiate(obj, transform);
  188. // m_ModelObj.transform.localPosition = Vector3.zero;
  189. // m_ModelObj.gameObject.SetActive(true);
  190. //}
  191. }
  192. }
  193. private void HandleMsg(Msg msg)
  194. {
  195. Debug.Log("DGJ TemplateModel ");
  196. if(msg.Value!=null)
  197. {
  198. if (IsAB())
  199. LoadABModel();
  200. else
  201. TriLibModel();
  202. }
  203. else
  204. {
  205. InstantiateCommand Command = new InstantiateCommand(
  206. InstantiateSystem.Instance.BlueObject.WarningPopUp,
  207. InstantiateSystem.Instance.BlueObject.NetErrorText);
  208. CommandSystem.Instance.Send(Command);
  209. Debug.LogError(" 模型下载失败 ");
  210. }
  211. }
  212. private bool IsAB()
  213. {
  214. bool finish = false;
  215. string fileName = Path.GetFileName(Data.localLoadPath);
  216. if(fileName.Contains(".ghb") ||!fileName.Contains("."))
  217. {
  218. finish = true;
  219. }
  220. return finish;
  221. }
  222. private void LoadABModel()
  223. {
  224. AssetBundle ab = AssetBundle.LoadFromFile(Data.localLoadPath);
  225. if (ab == null)
  226. {
  227. Debug.Log("Failed to load AssetBundle!");
  228. return;
  229. }
  230. var prefab = ab.LoadAsset<GameObject>(ab.LoadAllAssets<GameObject>()[0].name);
  231. m_ModelObj = Instantiate(prefab, transform);
  232. ab.Unload(false);
  233. ManipulationHandler manipulation = gameObject.AddComponent<ManipulationHandler>();
  234. manipulation.enabled = false;
  235. BoundingBox boundingBox = gameObject.AddComponent<BoundingBox>();
  236. boundingBox.enabled = false;
  237. }
  238. private void TriLibModel()
  239. {
  240. TriLibModelLoad.Load(Data.localLoadPath, (AssetLoaderContext ac) => {
  241. Debug.Log("模型加载完成");
  242. }, (AssetLoaderContext ac) => {
  243. Debug.Log("载材质加完成");
  244. // ac.RootGameObject.transform.position = Camera.main.transform.forward;
  245. m_ModelObj = Instantiate(ac.RootGameObject, transform);
  246. ManipulationHandler manipulation = gameObject.AddComponent<ManipulationHandler>();
  247. manipulation.enabled = false;
  248. BoundingBox boundingBox = gameObject.AddComponent<BoundingBox>();
  249. boundingBox.enabled = false;
  250. ac.RootGameObject.SetActive(false);
  251. }, (AssetLoaderContext ac, float f) => {
  252. Debug.Log("加载中==》" + f);
  253. }, (IContextualizedError error) => {
  254. Debug.Log("加载失败" + error);
  255. });
  256. }
  257. public override void HideCollider()
  258. {
  259. base.HideCollider();
  260. }
  261. }