SpotsItem.cs 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. using LitJson;
  2. using SC.XR.Unity.Module_InputSystem;
  3. using System.Collections;
  4. using System.Collections.Generic;
  5. using UnityEngine;
  6. using Vuforia;
  7. using XRTool.Util;
  8. public class SpotsItem
  9. {
  10. public string id;
  11. public string name;
  12. public string triggerImageMark;
  13. public Vector3 pos;
  14. public Vector3 eul;
  15. public string updateTime;
  16. public string triggerImage;
  17. public int triggerImageId;
  18. public UserSceneItem usi;
  19. //景点中的模型
  20. public Dictionary<string, ModelList> modelList = new Dictionary<string, ModelList>();
  21. public GameObject VuforiaItem;
  22. GameObject _spotsObj;
  23. public GameObject SpotsObj
  24. {
  25. get
  26. {
  27. if (_spotsObj == null)
  28. {
  29. VuforiaItem = new GameObject("Vufroia--"+name);
  30. VuforiaItem.transform.parent = usi.SceneModel.transform;
  31. VuforiaItem.transform.localPosition = Vector3.zero;
  32. VuforiaItem.transform.localEulerAngles = Vector3.zero;
  33. VuforiaItem.SetActive(false);
  34. _spotsObj = new GameObject("景点--"+name);
  35. _spotsObj.transform.parent = VuforiaItem.transform;
  36. if (!_spotsObj.GetComponent<BoundingBox>())
  37. {
  38. BoundingBox bb = _spotsObj.AddComponent<BoundingBox>();
  39. bb.FlattenAxis = BoundingBox.FlattenModeType.FlattenZ;
  40. bb.ActiveHandle = BoundingBox.HandleType.Rotation| BoundingBox.HandleType.Scale;
  41. _spotsObj.AddComponent<NearInterationGrabbable>();
  42. _spotsObj.AddComponent<ManipulationHandler>();
  43. GameObject ob = GameObject.Instantiate(Resources.Load<GameObject>("Template/Prefab/TipJD"), _spotsObj.transform);
  44. ob.transform.localPosition = new Vector3(0, -0.3f, 0);// Vector3.zero;
  45. ob.transform.localEulerAngles = Vector3.zero;
  46. ob.transform.localScale = Vector3.one;
  47. ob.SetActive(false);
  48. TimerMgr.Instance.CreateTimer(() => {
  49. ob.SetActive(GameManager.m_IsStartEditorJD);
  50. bb.enabled = GameManager.m_IsStartEditorJD;
  51. }, 1, -1);
  52. }
  53. }
  54. return _spotsObj;
  55. }
  56. }
  57. public ObserverBehaviour obVuforia;
  58. public void setObVuforia(ObserverBehaviour obVuforia)
  59. {
  60. this.obVuforia = obVuforia;
  61. Debug.Log("添加Vuforia监听" + obVuforia.TargetName+" 景点===》"+name);
  62. this.obVuforia.OnTargetStatusChanged += OnTargetStatusChanged;
  63. obVuforia.gameObject.name = "ImageTarget_" + obVuforia.TargetName;
  64. obVuforia.gameObject.AddComponent<TurnOffBehaviour>();
  65. if (obVuforia.gameObject.GetComponent<DefaultObserverEventHandler>())
  66. {
  67. GameObject.Destroy(obVuforia.gameObject.GetComponent<DefaultObserverEventHandler>());
  68. }
  69. obVuforia.gameObject.AddComponent<DefaultObserverEventHandler>();
  70. DefaultObserverEventHandler imageaction = obVuforia.gameObject.GetComponent<DefaultObserverEventHandler>();
  71. obj = new GameObject("Cube");
  72. obj.transform.parent = imageaction.transform;
  73. obj.transform.localEulerAngles = new Vector3(90, 0, 0);
  74. obj.transform.localPosition = Vector3.zero;
  75. }
  76. GameObject obj;
  77. void OnTargetStatusChanged(ObserverBehaviour behaviour, TargetStatus status)
  78. {
  79. if (status.Status == Status.TRACKED)
  80. {
  81. Debug.Log("OnTargetStatusChanged 发现 " + behaviour.TargetName + "status ==>" + status.Status.ToString());
  82. if(obVuforia.TargetName == behaviour.TargetName)
  83. {
  84. VuforiaItem.SetActive(true);
  85. Debug.Log("OnTargetStatusChanged 发现 VuforiaItem " + VuforiaItem.name);
  86. TimerMgr.Instance.CreateTimer(()=> {
  87. VuforiaItem.transform.position = obj.transform.position;
  88. VuforiaItem.transform.eulerAngles = obj.transform.eulerAngles;
  89. Debug.Log("OnTargetStatusChanged 发现 " + obj.transform.position + "status ==>" + obj.transform.eulerAngles);
  90. }, 0.1f,10);
  91. }
  92. UserSceneUI.Instance.obj.GetComponent<UserChooseScene>().st.SetActive(false);
  93. SendNetConnectPointTrigger sendNet = new SendNetConnectPointTrigger();
  94. sendNet.sn = SendSN.GetSN();
  95. //sendNet.sn = API_GSXR_Slam.SlamManager.plugin.SN;
  96. sendNet.projectId = int.Parse(usi.id);
  97. sendNet.id =int.Parse(id);
  98. string jsonData = JsonMapper.ToJson(sendNet);
  99. Debug.Log(jsonData);
  100. HttpTool.Instance.Post(HttpAction.sn_viewpoint, jsonData, (string msg)=> { });
  101. }
  102. else
  103. {
  104. Debug.Log("OnTargetStatusChanged 消失 " + behaviour.TargetName + "status ==>" + status.Status.ToString());
  105. // if (obVuforia.TargetName == behaviour.TargetName)
  106. // SpotsObj.SetActive(false);
  107. }
  108. }
  109. public void initSpoitTfInfo(JsonData data)
  110. {
  111. if (data["nowScale"] != null && (data["nowScale"]["x"].ToString() != "0" || data["nowScale"]["y"].ToString() != "0" || data["nowScale"]["z"].ToString() != "0"))
  112. {
  113. SpotsObj.transform.localScale = new Vector3(float.Parse(data["nowScale"]["x"].ToString()), float.Parse(data["nowScale"]["y"].ToString()), float.Parse(data["nowScale"]["z"].ToString()));
  114. }
  115. else
  116. {
  117. SpotsObj.transform.localScale = Vector3.one;
  118. }
  119. if (data["nowPos"] != null && (data["nowPos"]["x"].ToString() != "0" || data["nowPos"]["y"].ToString() != "0" || data["nowPos"]["z"].ToString() != "0"))
  120. {
  121. SpotsObj.transform.localPosition = new Vector3(float.Parse(data["nowPos"]["x"].ToString()), float.Parse(data["nowPos"]["y"].ToString()), float.Parse(data["nowPos"]["z"].ToString()));
  122. }
  123. else
  124. {
  125. SpotsObj.transform.localPosition = Vector3.zero;
  126. }
  127. if (data["nowRot"] != null && (data["nowRot"]["x"].ToString() != "0" || data["nowRot"]["y"].ToString() != "0" || data["nowRot"]["z"].ToString() != "0"))
  128. {
  129. SpotsObj.transform.localEulerAngles = new Vector3(float.Parse(data["nowRot"]["x"].ToString()), float.Parse(data["nowRot"]["y"].ToString()), float.Parse(data["nowRot"]["z"].ToString()));
  130. }
  131. else
  132. {
  133. SpotsObj.transform.localEulerAngles = Vector3.zero;
  134. }
  135. }
  136. public void init()
  137. {
  138. VuforiaItem.transform.parent = usi.SceneModel.transform;
  139. VuforiaItem.transform.localPosition = Vector3.zero;
  140. VuforiaItem.transform.localEulerAngles = Vector3.zero;
  141. VuforiaItem.SetActive(false);
  142. }
  143. public void show()
  144. {
  145. foreach(var v in modelList.Values)
  146. {
  147. v.init(true);
  148. }
  149. }
  150. }