SpotsItem.cs 6.9 KB

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