using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; using UnityEngine.UIElements; public class ZhaMenIconCtrl : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler { private RectTransform rect; private Camera _camera; private UnityEngine.UI.Button _button; public FloodGate _data; public Transform targetTransForm; public GameObject tint; public Text tintName; public void Init(FloodGate data,string name,GameObject targetObj) { _data = data; tintName.text = name; rect = this.GetComponent(); _button = this.transform.Find("Icon").GetComponent(); _button.onClick.AddListener(() => { }); rect.anchoredPosition = new Vector2(2000, 0); _camera = CameraManager.instance.mainCamera; targetTransForm = targetObj.transform; } void Update() { if (targetTransForm != null) { if (IsObjectInCameraView(targetTransForm, _camera)) { rect.transform.position = _camera.WorldToScreenPoint(targetTransForm.position); } else { rect.transform.position = new Vector3(2000, 0, 0); } } } bool IsObjectInCameraView(Transform objectTransform, Camera camera) { Vector3 objectScreenPosition = camera.WorldToScreenPoint(objectTransform.position); return objectScreenPosition.z > 0 && objectScreenPosition.x > 0 && objectScreenPosition.x < Screen.width && objectScreenPosition.y > 0 && objectScreenPosition.y < Screen.height; } public void OnPointerEnter(PointerEventData eventData) { tint.gameObject.SetActive(true); LayoutRebuilder.ForceRebuildLayoutImmediate(tintName.GetComponent()); // 强制重新计算布局 LayoutRebuilder.ForceRebuildLayoutImmediate(tint.GetComponent()); // 强制重新计算布局 } public void OnPointerExit(PointerEventData eventData) { tint.gameObject.SetActive(false); } }