Unity圆形、多边形UI点击触发事件

前言

需求是点击圆盘UI转动。最开始的想法是用UI的EventSystem系统,但是发现UI的默认外框都是方形的,无法准确的点击。

思路

既然用不了UI的事件系统,那就使用collider2D来实现多边形效果。首先给UI添加Collider2D组件,然后把collider编辑成UI的形状,最后是编辑代码部分。

代码

我这里是实现的是鼠标按住后会一直执行方法,抬起后停止。

    void Update()
    {
        if (!isGameOver && Input.GetMouseButtonDown(0))
        { 
			//核心代码 接收鼠标点的2Dcollider,其余实现代码可以选择性忽略
            RaycastHit2D hit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector2.zero);

            if (hit.collider != null)
            {
            	//判断点击的物体名字
                if(hit.collider.name == small.name|| hit.collider.name == middle.name|| hit.collider.name == big.name)
                {
                    go = hit.collider.gameObject;
                    go.GetComponent<Turntable>().isDown = true;
                }
            }
        }

        if (Input.GetMouseButtonUp(0))
        {
            if(go != null)
                go.GetComponent<Turntable>().isDown = false;
        }
    }

在这里备注一下layerMask参数的用法。它的作用是指定检测某个层的碰撞器。比如1<<16,前面的1代表bool,可以填1或0,1为true,2为false。后面的数字对应unity中的layer层。
比如:
LayerMask mask = 1 << 2; 表示开启索引为2的层。

LayerMask mask = 0 << 5表示关闭索引为5的层。

LayerMask mask = ~(1 << 16) 打开除了索引为16的层之外的层。

LayerMask mask = ~(1 << 0) 打开所有的层。

(1 << 16) | (1 << 8) 打开索引为10和索引为8的层。等价于LayerMask.GetMask((“Game”, “Processing”);

你可能感兴趣的:(Unity学习)