NGUI根据图片是否透明来决定是否可以点中
来源:互联网 发布:文明6 mac版 编辑:程序博客网 时间:2024/05/17 04:08
- using UnityEngine;
- using System.Collections;
- using System.Collections.Generic;
- [RequireComponent(typeof(UIWidget))]
- public class UIHitAlphaTest : MonoBehaviour
- {
- [Range(0.01f,1f)]
- public float threshold = 0.5f;
- List<UIWidget> childs = new List<UIWidget>();
- void Start ()
- {
- UIWidget w = GetComponent<UIWidget>();
- w.hitCheck = HitCheck;
- childs.Add(w);
- childs.AddRange(w.GetComponentsInChildren<UIWidget>());
- }
- Vector3 t1p1 = Vector3.zero;
- Vector3 t1p2 = Vector3.zero;
- Vector3 t1p3 = Vector3.zero;
- Vector3 t2p1 = Vector3.zero;
- Vector3 t2p2 = Vector3.zero;
- Vector3 t2p3 = Vector3.zero;
- Vector2 t1uv1 = Vector2.zero;
- Vector2 t1uv2 = Vector2.zero;
- Vector2 t1uv3 = Vector2.zero;
- Vector2 t2uv1 = Vector2.zero;
- Vector2 t2uv2 = Vector2.zero;
- Vector2 t2uv3 = Vector2.zero;
- bool HitCheck(Vector3 worldPos)
- {
- for (int widgetIndex = 0; widgetIndex < childs.Count; widgetIndex++)
- {
- UIWidget widget = childs[widgetIndex];
- Vector3 localPos = widget.cachedTransform.InverseTransformPoint(worldPos);
- Texture2D tex = widget.mainTexture as Texture2D;
- for( int i = 0; i < widget.geometry.verts.size; i += 4 )
- {
- t1p1 = widget.geometry.verts.buffer[i];
- t1p2 = widget.geometry.verts.buffer[i + 1];
- t1p3 = widget.geometry.verts.buffer[i + 2];
- t2p1 = widget.geometry.verts.buffer[i + 2];
- t2p2 = widget.geometry.verts.buffer[i + 3];
- t2p3 = widget.geometry.verts.buffer[i];
- t1uv1 = widget.geometry.uvs.buffer[i];
- t1uv2 = widget.geometry.uvs.buffer[i + 1];
- t1uv3 = widget.geometry.uvs.buffer[i + 2];
- t2uv1 = widget.geometry.uvs.buffer[i + 2];
- t2uv2 = widget.geometry.uvs.buffer[i + 3];
- t2uv3 = widget.geometry.uvs.buffer[i];
- bool t1 = CheckTriangle
- (localPos,
- t1p1, t1p2, t1p3,
- t1uv1, t1uv2, t1uv2,
- tex);
- bool t2 = CheckTriangle
- (localPos,
- t2p1, t2p2, t2p3,
- t2uv1, t2uv2, t2uv3,
- tex);
- if (t1 || t2)
- {
- return true;
- }
- }
- }
- return false;
- }
- bool CheckTriangle(Vector3 pos, Vector3 v1, Vector3 v2, Vector3 v3, Vector2 uv1, Vector2 uv2, Vector2 uv3, Texture2D tex)
- {
- // Normal of triangle
- Vector3 normal = Vector3.Cross( v3-v1, v2-v1 );
- if( normal.sqrMagnitude < 0.01f )
- return false;
- pos = pos - Vector3.Dot( pos-v1, normal ) * normal; // Project point onto plane
- float xScale = (pos.x - v2.x) / (v3.x - v2.x);
- float yScale = (pos.y - v1.y) / (v2.y - v1.y);
- Vector2 finalUV = new Vector2(uv2.x + (uv3.x - uv2.x) * xScale, uv1.y + (uv2.y - uv1.y) * yScale);
- Color pixel = tex.GetPixel( (int)(finalUV.x * tex.width), (int)(finalUV.y * tex.height) );
- return pixel.a >= threshold;
- }
- }
0 0
- NGUI根据图片是否透明来决定是否可以点中
- 根据qq中是否有人@你,来决定是否调用小黄鸡接口进行自动回复
- 根据是否有领域点来判断点是否孤立
- 根据当前位置是否有图片决定,该条目的类型是什么
- ios 中通过图片的透明度来决定是否响应事件
- 根据点序列的分布来判断点是否孤僻
- 不要根据MemcacheClient的delete结果来决定是否删除数据库记录
- 货架控件根据选择的区域来决定是否格式化显示
- 你来决定世界是否公平,好么?
- Android中实现根据EditText中内容是否完整来控制按钮是否可点击
- 你是否真的需要64位的JDK呢?你是根据什么来判断与决定呢?
- 根据角色决定是否显示或者启用控件
- 根据radiobutton的选择决定dropdownlist是否禁用
- 如何根据页面决定是否加载jquery.js
- 表单提交前根据用户的选择决定是否提交
- 表单提交前根据用户的选择决定是否提交
- angular js 根据条件决定是否引入script标签
- MFC中可以设置字体颜色,背景色,前景色,是否透明
- Acperience
- Android工程师面试题大全
- ROKID桌面机器人麦克风阵列拆解分析及设计建议
- 分区
- 剑指offer 35题 【时间空间效率的平衡】第一个只出现一次的字符
- NGUI根据图片是否透明来决定是否可以点中
- 线程池的理解
- 飞凌Fl2440开发板蜂鸣器pwm的驱动
- 解决font-face跨域办法
- 2016 Multi-University Training Contest 2(2016多校训练第二场)1009
- new、delete与malloc、free
- clauch svn使用设置
- androidStudio没有httpclient的解决办法
- iOS 如何获取应用当前的控制器 UIWindow & UIWindowLevel笔记