博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UGUI不规则按钮实现思路
阅读量:5338 次
发布时间:2019-06-15

本文共 1428 字,大约阅读时间需要 4 分钟。

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

using UnityEngine;using System.Collections;using UnityEngine.UI;public class Demo : Image{    Image image;    void Start()    {        image = GetComponent();    }    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

你可能感兴趣的文章
mysql grant 授权
查看>>
Java学习从这里开始
查看>>
qq游戏IE组件停止工作
查看>>
自适应的轮播图
查看>>
桶排序
查看>>
ASP.NET Core2使用Autofac实现IOC依赖注入竟然能如此的优雅简便
查看>>
task
查看>>
处理压力测试中的问题
查看>>
曾经的曾经
查看>>
Android 命名规范 (提高代码可以读性)
查看>>
POJ1837 Balance 背包
查看>>
怎么用UIProgressView去显示上传的进度呢?
查看>>
数据结构-哈夫曼树
查看>>
UVA 1585 Score (c++ )(字符串处理)
查看>>
考题分享
查看>>
webpack 4 简单介绍
查看>>
《数据结构》--第6章图
查看>>
导数的四则运算
查看>>
计算两个时间戳之间相差的时间
查看>>
微服务框架SpringCloud(Dalston版)学习 (一):Eureka服务注册与发现
查看>>