using Mapbox.Unity.Map; using UnityEngine; namespace Assets.Scenes.Ride.Scripts { public class MiniMapPlayerController: MonoBehaviour { private AbstractPlayer _player; private AbstractMap _map; RectTransform RectRoot; GameObject arrow; Camera _minicamera; private void Awake() { _map = transform.parent.Find("MiniMap").GetComponent(); _minicamera = transform.parent.Find("MiniCamera").GetComponent(); RectRoot = transform.parent.Find("SingleUI/Panel/MiniMap/MiniMap").GetComponent(); var parent = transform.parent.Find("SingleUI/Panel/MiniMap/MiniMap"); arrow = Instantiate(Resources.Load("UI/Prefab/Ride/MiniArrow"), parent); } public void SetController(AbstractPlayer player) { _player = player; } float t = 1f; private void Update() { t -= Time.deltaTime; while (t < 0) { if (_player != null) { transform.localPosition = _map.GeoToWorldPosition(_player.Currentlatlong); var tr = arrow.GetComponent(); Vector2 vp2 = _minicamera.WorldToViewportPoint(transform.localPosition);//将三维物体的世界坐标转换为视口坐标 tr.anchoredPosition = new Vector2((vp2.x * RectRoot.sizeDelta.x) - (RectRoot.sizeDelta.x * 0.5f), (vp2.y * RectRoot.sizeDelta.y) - (RectRoot.sizeDelta.y * 0.5f)); } else { DestroyImmediate(arrow); //DestroyImmediate(gameObject); } t = 1; } } } }