zoukankan      html  css  js  c++  java
  • 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的,相当于两个触发,点击一次会触发两次方法。

  • 相关阅读:
    第六周上机任务
    java第四次作业
    第二次上机练习
    第三周作业
    第一次上机作业
    计算机1802刘思源
    第五次上机作业
    第六周作业
    第四次上机作业
    第三次上机作业
  • 原文地址:https://www.cnblogs.com/Feiyuzhu/p/5690483.html
Copyright © 2011-2022 走看看