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的,相当于两个触发,点击一次会触发两次方法。

posted @ 2016-07-21 09:12  哎呦不能错喔  阅读(1497)  评论(0编辑  收藏  举报