除了使用 '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 进行缩放的,那么需要进行额外的坐标转换。

Unity UI 图片点击坐标获取方法:Raycast 实现

原文地址: https://www.cveoy.top/t/topic/cyOx 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录