求教Unity3d的unity easytouch 教程插件的多点触控

程序写累了,就来玩玩酷跑小游戏吧,嘿嘿。
雨松MOMO送你一首歌曲,嘿嘿。
NGUI研究院之与EasyTouch结合使用(十五)
NGUI研究院之与EasyTouch结合使用(十五)
围观30379次
编辑日期: 字体:
用了EasyTouch插件一段时间了,小问题还是有一些,总体来说用起来还行。这篇文章我就来说说EasyTouch和NGUI的结合。
总体来说触摸屏幕也就三种情况。
1.触摸事件只响应NGUI部分,不响应3D部分。
2.触摸事件只响应3D部分,不响应NGUI部分。
3.触摸事件同时响应。
举个例子,在战斗场景我们希望通过手指滑动来控制摄像机的旋转。但是这时屏幕上可能还有一些UI的按钮,但是我们不希望用户点击UI按钮也影响到了摄像机的旋转。所以此时我们只希望触摸事件在3D部分响应。
1. 如下图所示,这里我增加了一个UISprite,我希望我的手指触摸事件只在UI上响应,不在3D上响应
1234567891011121314151617181920212223242526272829303132333435363738394041
using UnityEngine;using System.Collections;&public class UImomo : MonoBehaviour { //头像 GameObject icon; void Start ()
icon = transform.Find("icon").gameObject;
//添加一个手指滑动的事件。
EasyTouch.On_SwipeEnd += EasyTouch_On_SwipeEnd; }& void OnDestroy() {
//施放一个手指滑动的事件。
EasyTouch.On_SwipeEnd -= EasyTouch_On_SwipeEnd; }& //当手指滑动结束时在这里 void EasyTouch_On_SwipeEnd(Gesture gesture) {
//判断手指是否触摸在NGUI的头像中
if(gesture.IsStartInRect(NGUIObjectToRect(icon)))
//输出手指滑动的方向
Debug.Log(gesture.swipe);
} }& //计算出NGUI某个UISprite或者UITexture或者 UILabel 在屏幕中占的矩形位置。 private&&Rect NGUIObjectToRect(GameObject go) {
Camera camera = NGUITools.FindCameraForLayer(go.layer);
Bounds bounds = NGUIMath.CalculateAbsoluteWidgetBounds(go.transform);
Vector3 min = camera.WorldToScreenPoint(bounds.min);
Vector3 max = camera.WorldToScreenPoint(bounds.max);
return new Rect(min.x, min.y, max.x - min.x, max.y - min.y); }&}
2.我希望手指触摸只响应3D,不响应NGUI 。这里其实更多的运用于游戏的战斗界面,战斗界面的UI一般都集中在屏幕的四个角, 比如头像 小地图 技能 摇杆等等。EasyTouch提供了NGUI模式,可以很方便的解决这个问题,不过它原理也是用射线来判断,所以你要确保需要略过的UI空间有BoxCollider组件。
我们把所有NGUI做的界面放在UI层上面。代码简单的改改,这样EasyTouch就不会在UI层上响应了。
123456789101112131415161718192021222324252627282930
void Start ()
icon = transform.Find("icon").gameObject;
//添加一个手指滑动的事件。
EasyTouch.On_SwipeEnd += EasyTouch_On_SwipeEnd;
//得到UI摄像机
Camera uiCamera = GameObject.Find("UI Root/Camera").GetComponent&Camera&();
if(uiCamera != null)
//启动NGUI模式
EasyTouch.instance.enabledNGuiMode = true;
//把NGUI摄像机加入过滤队列
if(!EasyTouch.instance.nGUICameras.Contains(uiCamera))
EasyTouch.instance.nGUICameras.Add(uiCamera);
//设置需要过滤的UI层
EasyTouch.instance.nGUILayers = (1 && LayerMask.NameToLayer("UI"));
} }& void OnDestroy() {
//施放一个手指滑动的事件。
EasyTouch.On_SwipeEnd -= EasyTouch_On_SwipeEnd;
EasyTouch.instance.enabledNGuiMode = false;
EasyTouch.instance.nGUILayers =0;
EasyTouch.instance.nGUICameras.Clear(); }
最后,我现在用的EasyTouch可能版本比较老,我用的版本是v3.1.1 因为目前项目也比较稳定,所以也不敢升级。EasyTouch这个版本里有一个BUG。就是超过10只手指在屏幕中滑动会出现空指针的错误,后来我看了一下代码,在UpdateTouches 里面做一下判断就好了。
EasyTouch有很强大的事件回调方法,大家可以去它的官网上查一下。不知道现在还有没有更好用的触屏插件,如果你觉得比EasyTouch还好用的话,希望你在下面给我留言,谢谢。
本文固定链接:
转载请注明:
雨松MOMO提醒您:亲,如果您觉得本文不错,快快将这篇文章分享出去吧 。另外请点击网站顶部彩色广告或者捐赠支持本站发展,谢谢!
作者:雨松MOMO
专注移动互联网,Unity3D游戏开发
如果您愿意花10块钱请我喝一杯咖啡的话,请用手机扫描二维码即可通过支付宝直接向我捐款哦。
您可能还会对这些文章感兴趣!求教Unity3d的EasyTouch插件的多点触控,该怎么解决_百度知道

我要回帖

更多关于 unity3d easy touch 5 的文章

 

随机推荐