DeviceIconCtrl.cs 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using UnityEngine;
  5. using UnityEngine.UI;
  6. public class DeviceIconCtrl : MonoBehaviour
  7. {
  8. private RectTransform rect;
  9. private Camera _camera;
  10. public DeviceIconData _data;
  11. private Text valueText;
  12. private Text nameText;
  13. public Transform targetTransForm;
  14. public Button _Button;
  15. public Image iconImg;
  16. public Sprite shuiWeiIcon;
  17. public Sprite shenYaJiIcon;
  18. public Sprite jingLiShuiZhunYiIcon;
  19. public Sprite wenDuIcon;
  20. public Sprite yinZhangXianYiIcon;
  21. public Sprite chuiXianZuoBiaoYiIcon;
  22. public Sprite tuYaLiJiIcon;
  23. public Sprite yingLiJiIcon;
  24. public Sprite sanXiangWeiCuoJiIcon;
  25. public Sprite erXiangCeFengJiIcon;
  26. public Sprite weiYiJiIcon;
  27. private float currentTime = 0.0f;
  28. public void Init(DeviceIconData data)
  29. {
  30. _camera = CameraManager.instance.mainCamera;
  31. _camera.GetComponent<CameraBird>().OnCameraBeginChange += CameraBeginChange;
  32. _camera.GetComponent<CameraBird>().OnCameraEndChange += CameraEndChange;
  33. _data = data;
  34. targetTransForm = data.targetTransform;
  35. rect = this.GetComponent<RectTransform>();
  36. rect.anchoredPosition = new Vector2(2000, 0);
  37. iconImg = this.transform.Find("Root").Find("bg").GetComponent<Image>();
  38. switch (_data.type)
  39. {
  40. case GongChengType.shuiWei:
  41. iconImg.sprite = shuiWeiIcon;
  42. break;
  43. case GongChengType.shenYaJi:
  44. iconImg.sprite = shenYaJiIcon;
  45. break;
  46. case GongChengType.jingLiShuiZhunYi:
  47. iconImg.sprite = jingLiShuiZhunYiIcon;
  48. break;
  49. case GongChengType.wenDu:
  50. iconImg.sprite = wenDuIcon;
  51. break;
  52. case GongChengType.yinZhangXianYi:
  53. iconImg.sprite = yinZhangXianYiIcon;
  54. break;
  55. case GongChengType.chuiXianZuoBiaoYi:
  56. iconImg.sprite = chuiXianZuoBiaoYiIcon;
  57. break;
  58. case GongChengType.tuYaLiJi:
  59. iconImg.sprite = tuYaLiJiIcon;
  60. break;
  61. case GongChengType.yingLiJi:
  62. iconImg.sprite = yingLiJiIcon;
  63. break;
  64. case GongChengType.sanXiangWeiCuoJi:
  65. iconImg.sprite = sanXiangWeiCuoJiIcon;
  66. break;
  67. case GongChengType.erXiangCeFengJi:
  68. iconImg.sprite = erXiangCeFengJiIcon;
  69. break;
  70. case GongChengType.weiYiJi:
  71. iconImg.sprite = weiYiJiIcon;
  72. break;
  73. }
  74. nameText = this.transform.Find("Root").Find("nameText").GetComponent<Text>();
  75. nameText.text = $"{_data.name}";
  76. valueText = this.transform.Find("Root").Find("valueText").GetComponent<Text>();
  77. valueText.text = $"{_data.value} <size=12><color=FFFFFF>{_data.valueType}</color></size>";
  78. _Button.onClick.AddListener(() =>
  79. {
  80. GCJKLayer._Instance.OpenDeviceTrendPanel(_data.name,_data.type,_data.gid,_data.sid);
  81. });
  82. }
  83. // 分离的委托方法,便于解除绑定
  84. private void CameraBeginChange()
  85. {
  86. this.transform.Find("Root").gameObject.SetActive(false);
  87. }
  88. private void CameraEndChange()
  89. {
  90. this.transform.Find("Root").gameObject.SetActive(true);
  91. }
  92. // 在物体销毁前调用这个方法来解除绑定
  93. private void OnDestroy()
  94. {
  95. if (_camera)
  96. {
  97. _camera.GetComponent<CameraBird>().OnCameraBeginChange -= CameraBeginChange;
  98. _camera.GetComponent<CameraBird>().OnCameraEndChange -= CameraEndChange;
  99. }
  100. }
  101. void Update()
  102. {
  103. currentTime += Time.deltaTime;
  104. if (currentTime > 0.06f) {
  105. if (targetTransForm != null)
  106. {
  107. rect.transform.position = _camera.WorldToScreenPoint(targetTransForm.position);
  108. }
  109. currentTime = 0;
  110. }
  111. }
  112. bool IsObjectInCameraView(Transform objectTransform, Camera camera)
  113. {
  114. Vector3 objectScreenPosition = camera.WorldToScreenPoint(objectTransform.position);
  115. return objectScreenPosition.z > 0 &&
  116. objectScreenPosition.x > 0 &&
  117. objectScreenPosition.x < Screen.width &&
  118. objectScreenPosition.y > 0 &&
  119. objectScreenPosition.y < Screen.height;
  120. }
  121. }