| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 | using System;using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.EventSystems;using UnityEngine.UI;using UnityEngine.UIElements;public class ObsIconCtrl : MonoBehaviour,IPointerEnterHandler,IPointerExitHandler{    private RectTransform rect;    private Camera _camera;    private UnityEngine.UI.Button _button;    public ObsData _data;    public Transform targetTransForm;    public GameObject tint;    public Text tintName;    private float currentTime = 0.0f;    public void Init(ObsData data)    {        _data = data;        tintName.text = data.name;                rect = this.GetComponent<RectTransform>();        _button = this.transform.Find("Root").Find("Icon").GetComponent<UnityEngine.UI.Button>();        if (!data.status)        {            this.transform.Find("Root").Find("Icon").GetComponent<UnityEngine.UI.Image>().color = Color.red;            this.transform.Find("Root").Find("Icon").GetChild(0).GetComponent<UnityEngine.UI.Image>().color = Color.red;        }        else        {            _button.onClick.AddListener(() =>            {                if (GlobalData.pageIndex == PageIndex.Page1)                {                    GCJKLayer._Instance.ShowObsPlayerPanel(_data);                }                if (GlobalData.pageIndex == PageIndex.Page3)                {                    ThreeDNav.instance.ShowObsPanel(_data);                }            });        }                rect.anchoredPosition = new Vector2(2000, 0);        _camera = CameraManager.instance.mainCamera;        //_camera.GetComponent<CameraBird>().OnCameraBeginChange += CameraBeginChange;        //_camera.GetComponent<CameraBird>().OnCameraEndChange += CameraEndChange;        targetTransForm =StaticLod.instance.GetStaticObj(_data.targetName).transform;            }        void Update()    {        if (targetTransForm != null)        {            Vector3 pos = _camera.WorldToScreenPoint(targetTransForm.position);            if (pos.z > 0)             {                rect.transform.position = pos;            }            else            {                rect.transform.position = new Vector3(10000, 10000, 0);            }        }    }    // 分离的委托方法,便于解除绑定    private void CameraBeginChange()    {        this.transform.Find("Root").gameObject.SetActive(false);    }    private void CameraEndChange()    {        this.transform.Find("Root").gameObject.SetActive(true);    }    // 在物体销毁前调用这个方法来解除绑定    private void OnDestroy()    {        if (_camera)        {           // _camera.GetComponent<CameraBird>().OnCameraBeginChange -= CameraBeginChange;            //_camera.GetComponent<CameraBird>().OnCameraEndChange -= CameraEndChange;        }    }    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<RectTransform>()); // 强制重新计算布局        LayoutRebuilder.ForceRebuildLayoutImmediate(tint.GetComponent<RectTransform>()); // 强制重新计算布局    }    public void OnPointerExit(PointerEventData eventData)    {        tint.gameObject.SetActive(false);    }}
 |