UGUI不规则按钮实现思路

根据图片的透明度来判断是否点击到了适当区域(如果a值是0,说明完全透明,则判断为没点击,否则判断为触发点击)

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class Demo : Image
{
    Image image;
    void Start()
    {
        image = GetComponent<Image>();
    }
    public override bool IsRaycastLocationValid(Vector2 V, Camera C)       //继承Image并重写Image的这个方法  QQ 745701540
    {
        float a = 0;
        if (Input.GetMouseButtonDown(0))
        {
            //--------------------------------------------------------
            //鼠标坐标
            float x, y;
            x = Input.mousePosition.x;
            y = Input.mousePosition.y;
            //图片的实际宽高
            Rect R = new Rect();
            R.x = image.rectTransform.rect.width;
            R.y = image.rectTransform.rect.height;
            //图片左下角坐标
            Vector2 v_you = image.rectTransform.position - new Vector3(R.x / 2, R.y / 2);

            //真实像素点颜色值
            int x_z, y_z;

            x_z = (int)((x - v_you.x) / R.x * image.preferredWidth);//像素宽高比实际宽高
            y_z = (int)((y - v_you.y) / R.y * image.preferredHeight);

            a = image.sprite.texture.GetPixel(x_z, y_z).a;
        }
        if (a > 0)
        {
            Debug.Log("S");
            return true;
        }
        else
            return false;
    }
}

 

将脚本赋给Image图片,然后将图片的格式改为Advanced,  勾上Read/Write Enabled。

 

因为继承了Image,所以脚本上也会出现Raycast Target等一系列属性,勾掉它,否则加上Image的,相当于两个触发,点击一次会触发两次方法。

转载于:https://www.cnblogs.com/Feiyuzhu/p/5690483.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值