UGUI_屏幕坐标转UI相对坐标,Mask遮罩,模型和粒子在UI前显示以及异形按钮

public class L17 : MonoBehaviour,IDragHandler
{
    public Image img;
    // Start is called before the first frame update
    void Start()
    {


        //使用遮罩
        //在父对象上挂载Mask组件就可遮罩其子对象
        //子对象需要勾选Maskable

        //模型显示在UI之前
        //方法一:直接用摄像机渲染3D物体,需要Canvas的渲染不是Overlay

        //方法二:将3D物体渲染在图片上,通过图片显示

        //粒子特效显示在UI前,类似3D物体
        //在Camera模式下,可以在粒子组件的Renderer相关参数中修改排序层,使其始终显示在UI之前不受Z轴影响

        //让异形按钮能够准确点击
        //方法一:用子对象拼凑一个不规则图形

        //方法二:通过代码改变图片的透明度的响应阈值
        //1.修改图片参数,开启Read/Write Enable
        //2.通过代码修改图片的响应阈值
        //像素的alpha小于该值就不会被射线检测
        img.alphaHitTestMinimumThreshold = 0.1f;
    }
    public void OnDrag(PointerEventData eventData)
    {
        //将屏幕坐标转换为UI本地坐标系
        //RectTransformUtility.ScreenPointToLocalPointInRectangle
        //参数1:相对父对象
        //参数2:屏幕点
        //参数3:摄像机
        //参数4:最终得到的点
        //一般配合拖曳事件使用
        Vector2 nowPos;
        RectTransformUtility.ScreenPointToLocalPointInRectangle(
        transform.parent as RectTransform,
        eventData.position,
        eventData.enterEventCamera,
        out nowPos);
        transform.localPosition = nowPos;
    }

}
posted @ 2025-04-05 21:10  cannedmint  阅读(40)  评论(0)    收藏  举报