easy easytouch unity我设置成全屏自动隐藏,那我怎样才能让它显示出来

程序写累了,就来玩玩酷跑小游戏吧,嘿嘿。
雨松MOMO送你一首歌曲,嘿嘿。
NGUI研究院之与EasyTouch结合使用(十五)
NGUI研究院之与EasyTouch结合使用(十五)
围观36486次
编辑日期: 字体:
用了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块钱请我喝一杯咖啡的话,请用手机扫描二维码即可通过支付宝直接向我捐款哦。
您可能还会对这些文章感兴趣!您好, []|
不羡iOS小黑框 安卓快捷键Easy Touch
  作为一名安卓控,有时候也要承认iOS的强大之处,比如著名的“小黑框”AssistiveTouch功能,可以在iPhone界面上增加一个黑色小方块,一些常用的应用、常用设置、主屏按钮等都集合于此,方便了常用操作的同时也保护了实体Home键。不过安卓控不必嫉妒,因为通过安装第三方应用,Android手机也可以实现类似的功能。
Easy 菜单界面  这款软件的名字叫做Easy Touch,安装了这款软件之后,我们可以看到屏幕上果然多了一个圆心小黑框。这个小黑框吸附在屏幕边缘,用户通过手指可以改变它的位置,无论是在主屏界面、功能表界面还是应用界面,小黑框都显示在最前端。无论在哪个界面,用手指点击这个小黑框都会弹出一个与AssistiveTouch十分相似的半透明菜单,这其中包括常用、锁屏、设置、应用程序、主屏幕五个按钮。
Easy Touch常用与设置界面  点击常用按钮,半透明菜单将切换到另一界面,这里有八个空白按钮,点击带有白色加号的按钮,用户就可以自定义添加一些自己的常用应用。在设置选项中则是一些常用的开关以及设置,比如亮度调节、自动旋屏、手电筒、振动等。锁屏、主屏幕按钮我们就不做过多介绍了,不过可以肯定的是使用这项功能可以减少实体电源键、Home键的点击次数。
女生风格版Easy Touch  值得一提的是,Easy Touch共有两个不同风格的版本,除了深色调的iPhone风格版之外,还有一款粉色调的女生风格版。女生风格版的Easy Touch以桃心作为图标,所有界面均为粉白搭配,更加适合女性用户使用。
Easy Touch软件设置界面  当然这款应用也有一些不足之处,比如使用锁屏功能,屏幕在锁定后会重新亮起(仍然是锁屏状态)。相比iPhone的AssistiveTouch功能,Easy Touch缺少了手势功能,此为系统所限,并非软件功能不足。另外还有需要注意这款软件的方法,首先进入设置位置和安全(安全)选择设备管理器取消勾选Easy Touch,然后在进行卸载,或者也可以在Easy Touch的的设置界面中直接卸载。
  (杨雪涛)
如果你对数码频道有任何意见或建议,请到交流平台反馈。【】
新闻排行财经科普科技数码
Copyright & 1998 - 2017 Tencent. All Rights Reserved1317人阅读
Unity游戏开发(2)
移动平台上的RPG类的游戏,我们常用虚拟摇杆来控制人物角色的行走和一些行为,相信我们对它并不陌生。而EasyTouch正是完善的帮我们实现了这一功能。
EasyTouch支持触摸屏所有主流手势:轻触、连击、重击、扭、捏等等。对于快速集成的虚拟摇杆插件,初次使用后向大家分享一下经验。下面以我做的第一款游戏《红内内侠》举例
(一)简单介绍
1.在easytouch里面,新建的摇杆或者按钮的transform是不起作用的,只能通过ButtonPosition&Size来设置。
在代码是通过stick.JoystickPositionOffset来设置位置的,这个参数是个很纠结的参数。
2.Interactiontype4种交互类型:
Direct:直接通过参数控制;
Incude:直接控制joystick中的值
EventNotification:通过发送消息类通知joystick的移动类型:这是比较常用的方式。通过声明这些委托来动态控制
EasyJoystick.On_JoystickMove += OnJoyM(运动有效时循环执行,dead zone radius范围内无效)
EasyJoystick.On_JoystickMoveEnd += On_JoystickMoveE(当运动停止时执行一次)
EasyJoystick.On_JoystickTouchUp += OnJoyTouchUp;(当手指按下时执行一次)
EasyJoystick.On_JoystickTouchStart += OnJoyTouchD(当手指抬起时执行一次)
EasyJoystick.On_JoystickMoveStart += OnJoyMoveS(当开始移动时执行一次)
。。。。。。
DirectAndEvents:Direct和EventNotification两种模式的结合,也比较常用。
默认的类型是Direct,但是此种方法下接收不到消息。
3.摇杆的调节:
Area radius:指的是easytouch的有效点击区域,也就是说,感知摇杆范围的大小。
Touch radius:指的是摇杆触摸点的大小。我的游戏里面平时不点击时显示的比较小,当按下时就会把这个值设置大一点,这样比较美观。
dead zone radius:指的是,当摇杆偏离中心多少距离才会发生效果,此值设置的越小越灵敏。
3.代码控制:
以OnJoyMove (MovingJoystick move)为例。
move.joystickAxis.x,move.joystickAxis.y的范围是(-1,1);对于控制物体运动来说,可以用rigidbody2D.velocity = new Vector()。
因为move.joy
stickAxis的值一直变化,如果想控制某个物体匀速运动,我是这样写的(仅供参考):
(二)屏幕自适应
因为我做的游戏控制器的外边需要有一个“血条”,也就是在控制器外包了一圈同心圆:
绿色以内的是摇杆Easytouch,外边是血条。因为我们是在UIRoot下面操作的,默认的分辨率是800*480,采用fixedSizeOnMobiles的自适应方式,所以根据手机屏幕的长宽比,以高为基准进行缩放的。所以如果不对EasyTouch进行调整,那么它的位置在每种长宽比的手机里显示是不一样的。自适应位置代码如下:
1.大小跟随EasyTouch自适应(血条):其中5f/3f实际为800/480:
2.EasyTouch位置自适应:
stick.JoystickPositionOffset = new Vector2(106f,Screen.height*(float)ConstPreference.SCREEN_WIDTH/Screen.width-105f);
106f,105f是常量(即原始分辨率800*480下,在easyStick调整好固定位置后,血条对应Stick时的transform.localPostion的x,y值)。
3.easyStick根据屏幕长宽的差异自适应了,那么血条也要跟随移动(原理是调整原始分辨率800*480对应的(106,105,z)为最新位置):
collder.transform.position = UICamera.currentCamera.ScreenToWorldPoint(&new Vector3(106f*Screen.width/(float)ConstPreference.SCREEN_WIDTH,105f*Screen.width/(float)ConstPreference.SCREEN_WIDTH));
4.注意,如果要是做非固定方式的摇杆,也就是跟随手指在全屏幕范围内移动的TouchStick的话,血条跟随全屏幕移动可以这样写:
其中,collder为血条的gameobject,SCREEN_WIDTH是屏幕设定的宽度即800。ViewportToWorldPoint()是在NGUI相机下对应的位置屏幕百分比(以左下为基准,0-1到右、上)转换为世界坐标。而最关键的一个参数:Rect stickRect的获取。这个参数来自于EasyTouch内部代码GUI绘图的时候所用。即在EasyJoyStick.cs里面的:areaRect—&GUI.DrawTexture( areaRect, areaTexture,ScaleMode.StretchToFill,true);//内部OnGUI里面的代码
EasyTouch就先简单介绍到这里,如果遇到难解的文字,欢迎大家一起讨论、实验、研究源代码,实现最强悍的功能。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:2783次
排名:千里之外对于移动平台上的RPG类的游戏,我们常用虚拟摇杆来控制人物角色的行走和一些行为,相信我们对它并不陌生,之前尝试了EasyTouch2.5,发现并没有最新版的3.1好用,2.5版本的对于自适应没有做的很好,而最新版的已经解决了这一问题。当然unity也自带了摇杆Joystick,用起来也简单,但存在不少局限,不会满足普通mmo游戏的需求,比如指定显示区域或者是更改一些素材等等,而这些EasyTouch插件都已经帮你实现,不得不佩服插件的原作者,能做出这么炫酷好用的插件,当然这估计是老外开发的,关于插件的下载,你可以在AssetStore上购买,当然也可以使用free版。
我这里也提供一个3.1版本的插件下载地址:
一、效果图
感觉很酷有木有!接下来就看一下创建的过程吧!
二、操作步骤
1.官方文档上的步骤
Quick Start (C#)
1-Import EasyTouch Package.2-Create an empty gameObject, and name it EasyTouch.(You can choose another name)Step 1 & 2 can be replace by the option menu
3-Add the EasyTouch.cs script on the EasyTouch gameObject that you just created.&4-Select the EasyTouch gameobject, and verifies that Broadcast messages is set to FALSE in the inspector.
5-Create a new C# script MyFirstTouch6-Add these methods
void&OnEnable(){&&
EasyTouch.On_TouchStart&+=&On_TouchS&&
void&OnDisable(){&&
EasyTouch.On_TouchStart&-=&On_TouchS&&
void&OnDestroy(){&&
EasyTouch.On_TouchStart&-=&On_TouchS&&
public&void&On_TouchStart(Gesture&gesture){&&
Debug.Log(&"Touch&in&"&+&gesture.position);&&
7-Create an empty gameObject, and name it Receiver.8- Add MyFirstTouch script to the gameObject Receiver.9- Run it in editor, and click on the screen
2.翻译一下以上的步骤
&&1.import&EasyTouch&资源包
& & & & 2.创建空物体,命名为EasyTouch(当然你也可以改成其他名字)
& & & & 3.添加EasyTouch.cs脚本在刚刚创建的空物体(EasyTouch)上
4.选择改物体但不要将BroadcastMessages勾选
5.创建一个新的C#脚本,命名MyFirstTouch
6.添加这些方法
7.再创建一个空物体,命名为Receiver
8.将MyFirstTouch脚本添加到空物体Receiver上
9.运行并且点击遥感,会发现控制台打印了当前按下的坐标
3.根据官方的这些提示,自己来做一个属于自己的人物遥感控制
& &1.导入EasyTouch3资源包
2.做好前期准备,包括人物模型、地形的创建
3.添加JoyStick实例:Hedgehog Team-&Easy Touch-&Extensions-&Add a new Joystick。此时就会在左下角创建了虚拟遥感的实例。
& & & & 4.设置遥感的相关参数
5.创建脚本MoveController.cs用来接收遥感事件控制角色的移动
using&UnityE&&
using&System.C&&
public&class&MoveController&:&MonoBehaviour&{&&
&&&&void&OnEnable()&&
&&&&&&&&EasyJoystick.On_JoystickMove&+=&OnJoystickM&&
&&&&&&&&EasyJoystick.On_JoystickMoveEnd&+=&OnJoystickMoveE&&
&&&&void&OnJoystickMoveEnd(MovingJoystick&move)&&
&&&&&&&&if&(move.joystickName&==&"MoveJoystick")&&
&&&&&&&&{&&
&&&&&&&&&&&&animation.CrossFade("idle");&&
&&&&&&&&}&&
&&&&void&OnJoystickMove(MovingJoystick&move)&&
&&&&&&&&if&(move.joystickName&!=&"MoveJoystick")&&
&&&&&&&&{&&
&&&&&&&&&&&&&&
&&&&&&&&}&&
&&&&&&&&&&
&&&&&&&&float&joyPositionX&=&move.joystickAxis.x;&&
&&&&&&&&float&joyPositionY&=&move.joystickAxis.y;&&
&&&&&&&&if&(joyPositionY&!=&0&||&joyPositionX&!=&0)&&
&&&&&&&&{&&
&&&&&&&&&&&&
&&&&&&&&&&&transform.LookAt(new&Vector3(transform.position.x&+&joyPositionX,&transform.position.y,&transform.position.z&+&joyPositionY));&&
&&&&&&&&&&&&
&&&&&&&&&&&&transform.Translate(Vector3.forward&*&Time.deltaTime&*&5);&&
&&&&&&&&&&&&
&&&&&&&&&&&&animation.CrossFade("run");&&
&&&&&&&&}&&
几个函数的执行顺序:
7.创建点击按钮
点击HedgehogTeam-&EasyTouch-&Extensions-&Create a new Button,会在屏幕右下角创建一个button
如何让有下角的按钮点击能做出我们想要的效果呢?
jump方法:
然后点击一下按钮,人物就会跳跃动作!
如需转载请注明出处:
==================== 迂者 丁小未 CSDN博客专栏=================
MyBlog:& & & & & & &MyQQ:
Unity QQ群:858550 & & & & cocos2dx QQ群:
======================&相互学习,共同进步&===================
阅读(...) 评论()

我要回帖

更多关于 easytouch 的文章

 

随机推荐