using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; namespace OHM.UnityToolkit { public static class UIUtils { public static void AlignToWorldObject(Transform worldObject, RectTransform uiObjectToAlign) { if (worldObject != null) { AlignToWorldPosition(worldObject.position, uiObjectToAlign); } } public static void AlignToWorldPosition(Vector3 targetWorldPosition, RectTransform uiObjectToAlign) { Camera cam = Camera.main; if (cam == null || uiObjectToAlign == null) { return; } Canvas canvas = uiObjectToAlign.GetComponentInParent(); if (canvas == null) { return; } RectTransform canvasRect = canvas.GetComponent(); Vector3 viewport = cam.WorldToViewportPoint(targetWorldPosition); Vector2 canvasSize = canvasRect.sizeDelta; uiObjectToAlign.anchoredPosition = new Vector2( (viewport.x - canvasRect.pivot.x) * canvasSize.x, (viewport.y - canvasRect.pivot.y) * canvasSize.y); } public static bool IsInputBlocked(Vector2 inputPos) { var pointer = new PointerEventData(EventSystem.current); pointer.position = new Vector2(Input.mousePosition.x, Input.mousePosition.y); var results = new List(); EventSystem.current.RaycastAll(pointer, results); for (int i = 0; i < results.Count; i++) { GameObject go = results[i].gameObject; if (go.GetComponent