ModelItem.cs 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  1. using SC.XR.Unity.Module_InputSystem;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.IO;
  5. using UnityEngine;
  6. using XRTool.Util;
  7. public enum ModelType
  8. {
  9. Image,
  10. Video,
  11. ABModel,
  12. Text,
  13. scene = -1,
  14. vuforial = -2,
  15. }
  16. public class ModelItem
  17. {
  18. //WEB端排版
  19. public string template { get; set; }
  20. //模型所在组合素材内
  21. public GameObject modelList;
  22. public GameObject prefabModel;
  23. private GameObject _model;
  24. //模型数据
  25. public GameObject Model
  26. {
  27. get {
  28. if(_model==null)
  29. {
  30. _model = new GameObject(name);
  31. _model.transform.parent = modelList.transform;
  32. // _model.transform.localPosition = getInfoPos();
  33. // _model.transform.localEulerAngles = getInfoEul();
  34. Debug.Log(" ModelName>>>> " + name + " Type " + type);
  35. }
  36. return _model; }
  37. }
  38. public void init()
  39. {
  40. Debug.LogError("ModelItem Init");
  41. if (modelType != ModelType.Text)
  42. LoadManager.Instance.load(this, (float f) =>
  43. {
  44. //显示加载
  45. }, (GameObject obj) =>
  46. {
  47. _model = prefabModel;
  48. obj.name ="加载出来的模型-----"+ obj.name;
  49. // obj.transform.parent = _model.transform;
  50. // obj.transform.localPosition = getInfoPos();
  51. // obj.transform.localEulerAngles = getInfoEul();
  52. });
  53. // else
  54. // SetData(null);
  55. }
  56. //模型地址
  57. public string url;
  58. //模型类型
  59. public ModelType modelType;
  60. ////模型原始信息
  61. //public string info;
  62. //模型版本
  63. public string Version { get; set; }
  64. Vector3 getInfoPos()
  65. {
  66. if (prefabModel == null || objectTransform.nowPos==null)
  67. return Vector3.zero;
  68. Debug.Log("获取modelItem坐标==》"+prefabModel.name+ objectTransform.nowPos);
  69. //return Vector3.zero;
  70. if (objectTransform.nowPos == Vector3.zero&& prefabModel.transform.localPosition!=Vector3.zero)
  71. return objectTransform.startPos;
  72. else
  73. return objectTransform.nowPos;
  74. }
  75. Vector3 getInfoEul()
  76. {
  77. if (prefabModel == null || objectTransform.nowPos == null)
  78. return Vector3.zero;
  79. if (objectTransform.nowRot == Vector3.zero && prefabModel.transform.localEulerAngles != Vector3.zero)
  80. return objectTransform.startRot;
  81. else
  82. return objectTransform.nowRot;
  83. // return Vector3.zero;
  84. }
  85. Vector3 getInfoScale()
  86. {
  87. if ( objectTransform.nowPos == null)
  88. return Vector3.one;
  89. if (objectTransform.nowScale == Vector3.zero)
  90. return objectTransform.startScale;
  91. else
  92. return objectTransform.nowScale;
  93. }
  94. //模型id
  95. public string uid { get; set; }
  96. //模型name
  97. public string name { get; set; }
  98. /// <summary>
  99. /// 模型类型
  100. /// </summary>
  101. public int type { get; set; }
  102. /// <summary>
  103. /// 文本内容
  104. /// </summary>
  105. public string textContent { get; set; }
  106. /// <summary>
  107. /// 文本框背景
  108. /// </summary>
  109. public string TextBJ { get; set; }
  110. public string textPosition { get; set; }
  111. /// <summary>
  112. /// 下载地址
  113. /// </summary>
  114. public string DownloadPath { get; set; }
  115. /// <summary>
  116. /// 本地保存地址
  117. /// </summary>
  118. public string localSavePath { get; set; }
  119. /// <summary>
  120. /// 坐标
  121. /// </summary>
  122. public ObjectTransform objectTransform { get; set; }
  123. public int fileId { get; set; }
  124. public int id { get; set; }
  125. public void init(GameObject modelList)
  126. {
  127. switch (type)
  128. {
  129. case 1: // 图片
  130. modelType = ModelType.Image;
  131. break;
  132. case 2: // 视频
  133. modelType = ModelType.Video;
  134. break;
  135. case 3: // 模型
  136. modelType = ModelType.ABModel;
  137. break;
  138. case 4: // 文字
  139. modelType = ModelType.Text;
  140. break;
  141. default:
  142. Debug.LogError(name + " 素材结构类型异常!!!");
  143. break;
  144. }
  145. if (type == 0)
  146. return;
  147. url = DownloadPath;
  148. Debug.Log(url);
  149. this.modelList = modelList;
  150. if (!modelList.GetComponent<BoundingBox>())
  151. {
  152. BoundingBox bb = modelList.AddComponent<BoundingBox>();
  153. bb.FlattenAxis = BoundingBox.FlattenModeType.FlattenZ;
  154. bb.ActiveHandle = BoundingBox.HandleType.Rotation | BoundingBox.HandleType.Scale;
  155. modelList.AddComponent<NearInterationGrabbable>();
  156. modelList.AddComponent<ManipulationHandler>();
  157. GameObject ob = GameObject.Instantiate(Resources.Load<GameObject>("Template/Prefab/TipJD"), modelList.transform);
  158. ob.transform.localPosition = new Vector3(0, -0.3f, 0);// Vector3.zero;
  159. ob.transform.localEulerAngles = Vector3.zero;
  160. ob.transform.localScale = Vector3.one;
  161. ob.SetActive(false);
  162. TimerMgr.Instance.CreateTimer(() => {
  163. ob.SetActive(GameManager.Instance.IsStartEditor);
  164. bb.enabled = GameManager.Instance.IsStartEditor;
  165. }, 1, -1);
  166. }
  167. if (Version == null)
  168. Version = Application.version.ToString();
  169. init();
  170. // if (Model != null)
  171. // Debug.Log(" 添加模型 " + name);
  172. }
  173. public void SetData(byte[] data)
  174. {
  175. if(data ==null && modelType!= ModelType.Video)
  176. {
  177. Debug.LogError(name + " 未下载完成 !!!!!");
  178. }
  179. switch (modelType)
  180. {
  181. case ModelType.Image:
  182. Texture2D texture = new Texture2D(1, 1);
  183. texture.LoadImage(data);
  184. Sprite sprite = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), Vector2.one * 0.5f);
  185. prefabModel.GetComponent<TemplateImage>().M_Image.sprite = sprite;
  186. break;
  187. case ModelType.Video:
  188. Debug.Log(" DownloadPath " + DownloadPath);
  189. // prefabModel.GetComponent<TemplateVideo>().SetData(HttpAction.baseurvideo + DownloadPath);
  190. prefabModel.GetComponent<TemplateVideo>().SetData(Application.persistentDataPath+"/Material/"+Path.GetFileName(DownloadPath));
  191. break;
  192. case ModelType.ABModel:
  193. AssetBundle assetBundle = AssetBundle.LoadFromMemory(data);
  194. Debug.Log(data.Length);
  195. prefabModel.GetComponent<TemplateModel>().LoadModel(assetBundle);
  196. break;
  197. case ModelType.Text:
  198. Debug.Log("HJJTEST ModelType.Text " + DownloadPath);
  199. prefabModel.GetComponent<TemplateText>().SetData(textContent, TextBJ);
  200. break;
  201. default:
  202. break;
  203. }
  204. }
  205. public void initModelObj()
  206. {
  207. if (getInfoPos() != Vector3.zero)
  208. {
  209. prefabModel.transform.localPosition = getInfoPos();
  210. }
  211. if (getInfoEul() != Vector3.zero)
  212. {
  213. prefabModel.transform.localEulerAngles = getInfoPos();
  214. }
  215. // prefabModel.transform.localPosition = getInfoPos();
  216. // prefabModel.transform.localEulerAngles = getInfoEul();
  217. switch (modelType)
  218. {
  219. case ModelType.Text:
  220. prefabModel.GetComponent<TemplateText>().SetData(textContent, TextBJ);
  221. break;
  222. default:
  223. break;
  224. }
  225. }
  226. }