61 lines
1.6 KiB
C#
61 lines
1.6 KiB
C#
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<Canvas>();
|
|
if (canvas == null)
|
|
{
|
|
return;
|
|
}
|
|
RectTransform canvasRect = canvas.GetComponent<RectTransform>();
|
|
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<RaycastResult>();
|
|
EventSystem.current.RaycastAll(pointer, results);
|
|
for (int i = 0; i < results.Count; i++)
|
|
{
|
|
GameObject go = results[i].gameObject;
|
|
if (go.GetComponent<Button>() != null)
|
|
{
|
|
return true;
|
|
}
|
|
if (go.GetComponent<UIInputBlocker>() != null)
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
}
|
|
}
|