Files
butchers-games-test/Assets/Scripts/Toolkit/OHM/UnityToolkit/UIUtils.cs
T
Boris Nikolaev 5f1e94b653 add project files
2026-08-14 01:58:31 +03:00

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;
}
}
}