Unity-NGUI不规则点击碰撞处理
2015-12-03 16:16
411 查看
在开发过程中经常会遇到这样的问题,UI点击的地图是一个不规则形状的这是如何解决这类问题呢?这里提供两种解决问题的方案。
使用Unity内置的PloygonCollider碰撞体,进行碰撞检测。但是需要注意的是由于NGUI碰撞检测不是基于2D物理处理的,所以这里需要自己实现以下2D的物理检测碰撞
将不规则区域生成一张颜色图,通过碰撞的点的颜色值来获取点击区域。
第一种方式射线检测网上实现方式如下:
使用Unity内置的PloygonCollider碰撞体,进行碰撞检测。但是需要注意的是由于NGUI碰撞检测不是基于2D物理处理的,所以这里需要自己实现以下2D的物理检测碰撞
将不规则区域生成一张颜色图,通过碰撞的点的颜色值来获取点击区域。
第一种方式射线检测网上实现方式如下:
void Update() { bool btnDown = Input.GetMouseButtonDown(0); bool btnUp = Input.GetMouseButtonUp(0); if (btnDown || btnUp) { UICamera uicam = UISystem.Instance.uiCamera; Camera cam = uicam.camera; int mask = cam.cullingMask & (int)uicam.eventReceiverMask; float dist = uicam.rangeDistance; if (dist < 0.000001f) dist = cam.farClipPlane-cam.nearClipPlane; Ray ray = cam.ScreenPointToRay(Input.mousePosition); RaycastHit2D hit = Physics2D.Raycast(ray.origin, ray.direction, dist, mask); if (hit.collider != null) { GameObject obj = hit.collider.gameObject; UISprite spr = obj.transform.GetComponentInChildren<UISprite>(); if (btnDown) { spr.color = Color.gray; DebugLog.Log("click " + obj.name); } else { spr.color = Color.white; DebugLog.Log("release " + obj.name); } } } }
相关文章推荐
- unity3d 根据tag查找物体编辑器工具
- Unity : Ran out of trampolines of type 2
- Unity性能优化-GPU优化
- Unity3D下NGUI插件使用中文TrueTypeFont(ttf)字库教程
- Unity3D Android手机开发环境配置,可真机发布调试
- Unity嵌入Android后Android视图获取不到事件焦点
- unity3d 发布后动态修改地形高度源码
- Unity 通过 www 下载 assetbundle , 在 iOS9 设备无法下载的问题
- unity3d利用sharesdk分享内容至微信、新浪微博、qq空间等国内主流社交平台(ios篇)
- Unity性能优化-总篇
- Unity5的uGUI中实现文字渐变效果(Gradient)
- Unity实现一个morpher/blendShape
- [shader]Unity3D地形
- 通过Scroll View实现简易背包的滑动效果
- win8.1 unity静默调用打印机
- unity 球体表面平均分割点
- unity 球体表面平均分割点
- unity基础概念
- unity3d脚本控制骨骼旋转
- Unity手游之路<十三>手游代码更新策略探讨