SpotsItem.cs 6.9 KB

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