ModelItem.cs 8.8 KB

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