UGUI 不规则按钮的点击
来源:互联网 发布:android简单源码 编辑:程序博客网 时间:2024/05/28 06:06
using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using System;
[RequireComponent(typeof(PolygonCollider2D))]
public class PolygonClick : Image, IPointerClickHandler
{
public delegate void VoidDelegate(GameObject go);
public VoidDelegate OnClick;
/// <summary>
/// 多边形碰撞器
/// </summary>
PolygonCollider2D polygonCollider;
protected override void Start()
{
//获取多边形碰撞器
polygonCollider = transform.GetComponent<PolygonCollider2D>();
}
public void OnPointerClick(PointerEventData eventData)
{
//对2D屏幕坐标系进行转换
Vector2 local;
local = eventData.position;
local.x = eventData.position.x - (float)Screen.width / 2.0f;
local.y = eventData.position.y - (float)Screen.height / 2.0f;
if (Contains(polygonCollider.points, local))
{
if (OnClick != null)
OnClick(gameObject);
}
}
/// <summary>
/// 使用Crossing Number算法获取指定的点是否处于指定的多边形内
/// </summary>
private bool Contains(Vector2[] pVertexs, Vector2 pPoint)
{
var crossNumber = 0;
for (int i = 0, count = pVertexs.Length; i < count; i++)
{
var vec1 = pVertexs[i];
var vec2 = i == count - 1 // 如果当前已到最后一个顶点,则下一个顶点用第一个顶点的数据
? pVertexs[0]
: pVertexs[i + 1];
if (((vec1.y <= pPoint.y) && (vec2.y > pPoint.y))
|| ((vec1.y > pPoint.y) && (vec2.y <= pPoint.y)))
{
if (pPoint.x < vec1.x + (pPoint.y - vec1.y) / (vec2.y - vec1.y) * (vec2.x - vec1.x))
{
crossNumber += 1;
}
}
}
return (crossNumber & 1) == 1;
}
using System.Collections;
using UnityEngine.UI;
using UnityEngine.EventSystems;
using System;
[RequireComponent(typeof(PolygonCollider2D))]
public class PolygonClick : Image, IPointerClickHandler
{
public delegate void VoidDelegate(GameObject go);
public VoidDelegate OnClick;
/// <summary>
/// 多边形碰撞器
/// </summary>
PolygonCollider2D polygonCollider;
protected override void Start()
{
//获取多边形碰撞器
polygonCollider = transform.GetComponent<PolygonCollider2D>();
}
public void OnPointerClick(PointerEventData eventData)
{
//对2D屏幕坐标系进行转换
Vector2 local;
local = eventData.position;
local.x = eventData.position.x - (float)Screen.width / 2.0f;
local.y = eventData.position.y - (float)Screen.height / 2.0f;
if (Contains(polygonCollider.points, local))
{
if (OnClick != null)
OnClick(gameObject);
}
}
/// <summary>
/// 使用Crossing Number算法获取指定的点是否处于指定的多边形内
/// </summary>
private bool Contains(Vector2[] pVertexs, Vector2 pPoint)
{
var crossNumber = 0;
for (int i = 0, count = pVertexs.Length; i < count; i++)
{
var vec1 = pVertexs[i];
var vec2 = i == count - 1 // 如果当前已到最后一个顶点,则下一个顶点用第一个顶点的数据
? pVertexs[0]
: pVertexs[i + 1];
if (((vec1.y <= pPoint.y) && (vec2.y > pPoint.y))
|| ((vec1.y > pPoint.y) && (vec2.y <= pPoint.y)))
{
if (pPoint.x < vec1.x + (pPoint.y - vec1.y) / (vec2.y - vec1.y) * (vec2.x - vec1.x))
{
crossNumber += 1;
}
}
}
return (crossNumber & 1) == 1;
}
}
2.
unity ui 不规则点击.
1 需要将 图集设置未 可读写.
2 设置 Image.alphaHitTestMinimumThreshold = 0.1f
1 需要将 图集设置未 可读写.
2 设置 Image.alphaHitTestMinimumThreshold = 0.1f
阅读全文
0 0
- UGUI 不规则按钮的点击
- UGUI 之 不规则按钮的响应区域
- UGUI不规则相应区域的按钮
- unity不规则按钮点击
- Unity3D UGUI 按钮点击
- 【Unity3d】UGUI小贴士:使用不规则按钮
- 【Unity3d】UGUI小贴士:使用不规则按钮
- 如何使用UGUI创建制作不规则按钮
- Unity UGUI不规则图片点击事件处理
- Unity3D UGUI不规则图片点击事件处理
- UGUI实现不规则区域点击响应
- Android中不规则图片按钮透明区域的点击效果
- cocos2d-x 不规则形状按钮的点击判定
- cocos2d-x中实现不规则按钮的点击效果
- 重写UGUI按钮组件button的点击、选中事件
- unity不规则按钮透明点击偏移问题
- Unity UGUI按钮动态添加点击事件
- cocos2dx 不规则按钮的实现
- boost asio的异步服务器
- 数据结构实验之栈与队列七:出栈序列判定
- spring各种疑难杂症
- 第1093期AI100_机器学习日报(2017-09-15)
- 第七周 项目1
- UGUI 不规则按钮的点击
- LeetCode167. Two Sum II
- 第八周(1)项目2---建立链串的算法库
- Visual Studio Code开发Qt应用程序实现自动提示、语法高亮、代码导航、编译和调试
- Glide
- git相关
- Failed to start LSB 网络服务启动失败的四种解决方法
- 在一个英文字符串中,查询首先出现三次的英文字符
- Android隐藏标题栏