栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 游戏开发 > 其他

【Unity UGUI】IsRaycastLocationValid和RectangleContainsScreenPoint自定义Image可接收射线检测区域

其他 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Unity UGUI】IsRaycastLocationValid和RectangleContainsScreenPoint自定义Image可接收射线检测区域

public bool ICanvasRaycastFilter.IsRaycastLocationValid(Vector2 sp,Camera eventCamera);

在指定摄像机eventCamera中,屏幕坐标sp是否可以点击到this.RectTransform。

public static bool RectTransformUtility.RectangleContainsScreenPoint(RectTransform rect,Vector2 screenPoint,Camera cam,Vector4 offset);

在指定摄像机cam中,屏幕坐标screenPoint是否在rect的范围内。判定区域偏移offset: x:左偏移;y:下偏移;z:右偏移;w:上偏移; 正数向里偏移,负数向外偏移。
 

using UnityEngine;
using UnityEngine.UI;

[RequireComponent(typeof(Image))]
public class TestImage : MonoBehaviour, ICanvasRaycastFilter
{
    //在指定摄像机eventCamera中,屏幕坐标sp是否可以点击到this.RectTransform
    //public bool ICanvasRaycastFilter.IsRaycastLocationValid(Vector2 sp,Camera eventCamera);

    //在指定摄像机cam中,屏幕坐标screenPoint是否在rect的范围内
    //判定区域偏移offset: x:左偏移;y:下偏移;z:右偏移;w:上偏移; 正数向里偏移,负数向外偏移;
    //public static bool RectTransformUtility.RectangleContainsScreenPoint(RectTransform rect,Vector2 screenPoint,Camera cam,Vector4 offset);

    //例1: 使用rectangleOffset,可以点击区域为Image四条边往里偏移10之后围成的矩形
    public bool IsRaycastLocationValid(Vector2 sp, Camera eventCamera)
    {
        Vector4 rectangleOffset = new Vector4(10,10,10,10);
        return RectTransformUtility.RectangleContainsScreenPoint(transform as RectTransform,sp,eventCamera,rectangleOffset);
    }

    //例2: 此处可以时任意RectTransform(比如,利用子物体标记父物体可点击区域,与子物体重叠部分可以点击,其余部分不可点击)
    public bool IsRaycastLocationValid(Vector2 sp,Camera eventCamera)
    {
        RectTransform rectTransform = transform.GetChild(0) as RectTransform;
        return RectTransformUtility.RectangleContainsScreenPoint(rectTransform,sp,eventCamera);
    }

    //例3: 可点击区域是 以Image自身为圆心,radius半径形成的圆形
    public bool IsRaycastLocationValid(Vector2 sp,Camera eventCamera)
    {
        Vector2 selfPos = RectTransformUtility.WorldToScreenPoint(eventCamera,transform.position);
        float radius = 100;
        return (selfPos - sp).sqrMagnitude <= radius * radius;
    }

}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/901775.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号