Unity UI 图片点击坐标获取方法:Raycast 实现
除了使用 'IPointerClickHandler' 接口外,还可以使用 Raycast 来获取点击图片上的坐标。
首先,你需要在场景中添加一个 EventSystem 对象和一个 GraphicRaycaster 对象。EventSystem 对象用于处理输入事件,GraphicRaycaster 对象用于检测点击事件发生在哪个 UI 元素上。
然后,你可以使用以下代码来获取点击图片上的坐标:
using UnityEngine;
using UnityEngine.EventSystems;
public class ImageClickHandler : MonoBehaviour, IPointerClickHandler
{
public RectTransform imageRectTransform;
public void OnPointerClick(PointerEventData eventData)
{
// 获取点击的屏幕坐标
Vector2 screenPos = eventData.position;
// 创建一个射线从屏幕坐标发出
Ray ray = Camera.main.ScreenPointToRay(screenPos);
// 创建一个平面与图片的 RectTransform 对齐,用于进行射线与平面的相交计算
Plane plane = new Plane(imageRectTransform.forward, imageRectTransform.position);
float distance;
if (plane.Raycast(ray, out distance))
{
// 获取射线与平面相交点的世界坐标
Vector3 worldPos = ray.GetPoint(distance);
// 将世界坐标转换为图片的本地坐标
Vector2 localPos = imageRectTransform.InverseTransformPoint(worldPos);
Debug.Log('点击坐标:' + localPos);
}
}
}
将这个脚本挂载到你的图片对象上,并将 imageRectTransform 字段设置为图片的 RectTransform 组件。当你点击图片时,OnPointerClick 方法会被调用,其中会获取点击的屏幕坐标,然后使用射线与平面相交的方法来计算点击点在图片上的坐标,并打印到控制台上。
注意,这个方法只适用于屏幕坐标与世界坐标是一一对应的情况,如果你的 UI 以屏幕适配或者使用 CanvasScaler 进行缩放的,那么需要进行额外的坐标转换。
原文地址: https://www.cveoy.top/t/topic/cyOx 著作权归作者所有。请勿转载和采集!