今天来写一写Unity3D中两个比较常用插件:EasyTouch和NGUI的学习心得。我用的版本分别是EasyTouch 3.1.1和NGUI 3.6.0,下面也是对这两个版本的学习心得。

  1. EasyTouch

  EasyTouch是为触摸屏准备的插件,提供了触摸屏的虚拟按键,大致包括3部分:摇杆、按钮和触摸响应。

  1.1 EasyTouch摇杆

  这个摇杆就是通过手指在摇杆区域的滑动控制你想控制的物体上下左右移动的,当手指触摸到摇杆上面进行移动时,可以通过MovingJoystick类的变量获取移动灵敏度。当然,使用教程网上也有很多,这里不详细讲了,只是简单进行主要流程说明。在使用时,首先要添加一个事件相应函数:EasyJoystick.On_JoystickMove += OnJoystickMove; 其中OnJoystickMove是函数名,需要自己实现这个函数,这个函数的原型需要是: void OnJoystickMove(MovingJoystick move) ,其中接收一个MovingJoystick的变量,可以通过move.joystickAxis.x和move.joystickAxis.y获取左右和前后的移动距离,这里的x对应Unity3D中的x轴(左右移动方向),y对象Unity3D中的z轴(前进后退方向),这样就可以控制物体移动了。通过摇杆控制物体当然还有其他方法,可以不写代码,直接将需要控制移动的物体通过Inspector面板赋值给它也可以,我没有用过,这里就不讲了。

  1.2 EasyTouch按钮

  EasyTouch也贴心的提供了按钮,可以通过下图的操作直接创建一个按钮,并指定相应事件,和按钮的Texture。

  EasyTouch提供了Normal Texture和Active Texture两个接口,分别是平时的按钮纹理和按钮被按下时的纹理。

  EasyTouch按钮添加事件也很方便,在Inspector面板中找到Receiver Object,这里把你要接受消息的对象拖过来,然后在Down method name里面写上函数名(不要加括号),这样当你按下按钮时,它就会去在你指定的接收对象的脚本中去寻找这个函数,然后执行。

  但是EasyTouch按钮有个缺点就是按钮的外观是通过Texture指定的,如果你想在上面添加文字,或者想在游戏中变换其上面的文字只能通过重新加载新的纹理实现,加载新纹理可以使用Resource.Load函数。可以使用如下代码,注意Resource.Load中的第一个参数是纹理名称,纹理放在Assets下的Resources目录下面这个函数就可以找到。按钮上面加文字可以使用OnGUI,NGUI或者自己PS一个按钮的Texture,在里面加上文字。

EasyButtonName.ActiveTexture = Resources.Load("ActiveTexturePath", typeof(Texture2D)) as Texture2D;

  1.3 EasyTouch

  EasyTouch最主要的功能还是提供了手指在屏幕上的触摸行为,包括按下、双击、长按、拖拽等。我用到了滑动,也就是手指在屏幕上滑动控制摄像机的旋转。

  触发滑动操作的相应函数需要添加EasyTouch.On_SwipeStart、EasyTouch.On_Swipe和EasyTouch.On_SwipeEnd方法,分别表示滑动开始、滑动中、滑动结束的方法,当然如果不需要滑动开始和结束,也可以不添加。这些方法的原型是 void OnSwipe(Gesture gesture) ,滑动的多少可以通过gesture.deltaPosition.x和gesture.deltaPosition.x获取。

  最后还要说一下,在这个版本的EasyTouch中有一个bug:当你一只手使用摇杆,另一只手在屏幕滑来滑去控制摄像机视角时,会引发这个bug。该bug在手机上的表现就是:当你放开控制摇杆的手时,发现摇杆并没有复位,而是卡在摇杆区域的边缘,控制的对象还在运动。在电脑端这个问题比较难重现,是因为电脑端用鼠标点,只有一个鼠标,一般不会触发这个bug,因此这个bug在手机上发生时就表现的很诡异,不知道是什么原因。在电脑端重现的方法:用鼠标移动摇杆,此时鼠标按住不要动,然后按下ctrl键(如下图可以设置),屏幕会出现一个黄色的圆点,然后仍然按住鼠标不动,移动鼠标,会发现Unity3D的Console窗口有红字提示错误:NullReferenceException: Object reference not set to an instance of an object。

  通过搜索,找到了解决方法,在这个网站上http://forum.unity3d.com/threads/released-easy-touch.135192/page-13#post-1400790有人提出了这个问题,在下面EasyTouch制作团队进行了回复,说这是一个bug,并给出了临时解决方案,在Easytouch脚本中做如下修改:

Replace line 1193 :

 gesture.isHoverReservedArea = IsTouchReservedArea( fingers[twoFinger0].fingerIndex) || IsTouchReservedArea( fingers[twoFinger1].fingerIndex);

by

 if (fingers[twoFinger0] != null){
gesture.isHoverReservedArea = IsTouchReservedArea( fingers[twoFinger0].fingerIndex);
}
if (fingers[twoFinger1] != null){
gesture.isHoverReservedArea = gesture.isHoverReservedArea || IsTouchReservedArea( fingers[twoFinger1].fingerIndex);
}

And replace line 1181 1182:

 gesture.pickCamera = fingers[twoFinger0].pickedCamera;
gesture.isGuiCamera = fingers[twoFinger0].isGuiCamera;

by

 if (fingers[twoFinger0] != null){
gesture.pickCamera = fingers[twoFinger0].pickedCamera;
gesture.isGuiCamera = fingers[twoFinger0].isGuiCamera;
}
else if (fingers[twoFinger1] != null){
gesture.pickCamera = fingers[twoFinger1].pickedCamera;
gesture.isGuiCamera = fingers[twoFinger1].isGuiCamera;
}

  大家也可以点击上面的网址,直接去看他的回复。EasyTouch就先写到这里,下面简单写一下NGUI的使用心得。

  2. NGUI

  NGUI是制作UI用的,为什么不用Unity3D自带的OnGUI呢?网上说OnGUI会在一帧内调用好多次,导致效率非常低,尤其是到移动平台更是明显,自己也没做过很复杂的UI,对这点感受还不深,但是为了适应移动平台,还是学了NGUI。

  对于新版NGUI来说,整个界面、操作以及使用方法变化较大,很多网上的教程已经跟不上版本的变化了,这里只能自己慢慢摸索,现在学的也不是很深,大概说一下制作NGUI按钮的一个流程吧。

  创建一个NGUI界面,首先可以通过下图所示按钮创建一个2D或3D界面。

  点击2D UI或者3D UI后,在Hierarchy中会出现UI Root或者UI Root(3D),这里以2D为例吧,3D比较复杂。在UI Root里面自带了一个Camera是用来显示UI的,我们可以通过设置这个Camera的Culling Mask控制它只显示我们给UI Root以及下面的子对象指定的Layer,然后让Main Camera不显示这些Layer,这样可以防止在游戏中可能会看到多个UI的情况。然后呢,在UI Root下面新建一个Panel,把一组按钮放在这个Panel上面,方便统一管理,如果不想新建Panel也可以。接着创建一个Sprite,在这个对象上添加NGUI自带的Button脚本(用于设置响应,显示为UIButton)和Box Collider(用于响应点击),设置按钮的响应函数的一个方法是在这里拖入一个对象,拖入一个对象后,在Notify下面会显示Meshod,可以再这里选择在该对象的脚本中定义好的一个public方法作为单击相应函数,注意一定是public方法,否则Method里面找不到。

  关于按钮上的文字,可以通过创建一个Label实现,这样一个按钮就创建好了。当然,按钮还可以有各种动画,这些可以参考NGUI自带的Example,里面做了很多例子。

  还有关于锚点的,老版本的NGUI需要将按钮什么的对象放到一个Anchor下面,在新版本中不用了,在很多NGUI的脚本中都已经集成了Anchors,就像下面这样,可以通过这种方式去设置位置。

  今天就写这么多吧,关于NGUI也还学的不深,写的比较简单。本文如果有不正确的地方,欢迎指正。

EasyTouch和NGUI的使用心得的更多相关文章

  1. NGUI与EasyTouch结合使用

    用了EasyTouch插件一段时间了,小问题还是有一些,总体来说用起来还行.这篇文章我就来说说EasyTouch和NGUI的结合. 总体来说触摸屏幕也就三种情况. 1.触摸事件只响应NGUI部分,不响 ...

  2. NGUI研究之开发项目的一些使用心得比較细节

     不知不觉使用NGI插件已经有一段时间了.感觉NGUI真的是眼下Unity3D中最好用的UI插件. 可是它也有一些不是BUG的BUG,这些问题可能会让新人摸不着头脑,那么这篇文章将总结一下这段时间 ...

  3. 关于NGUI与原生2D混用相互遮盖的问题心得

    http://www.fzgh.org.cn/zuixindianying/144224.html Native2D自己可以使用Sort Layer来排序,每层又有不同的Order In Layer, ...

  4. NGUI之scroll view制作,以及踩的坑总结

    http://blog.csdn.net/monzart7an/article/details/23878505 链接: http://game.ceeger.com/forum/read.php?t ...

  5. EasyTouch 3.1中文翻译

    Unity3D的Easy Touch 的手册最近寻找中文版本,google无果,自己动手.目前暂时只有c# ,javascript原理是一样的. 一.Quick Start 1-Import Easy ...

  6. NGUI使用教程(1) 安装NGUI插件

    前言 鉴于当前游戏开发的大势,Unity3d的发展势头超乎我的预期,作为一个Flash开发人员,也是为Flash在游戏开发尤其是手游开发中的地位感到担忧....所以 近期一段时间都在自己学习unity ...

  7. NGUI研究之在Unity中使用贝塞尔曲线

    鼎鼎大名的贝塞尔曲线相信大家都耳熟能详.这两天由于工作的原因须要将贝塞尔曲线加在project中.那么我迅速的研究了一下成果就分享给大家了哦.贝塞尔曲线的原理是由两个点构成的随意角度的曲线,这两个点一 ...

  8. Ngui使用随心记

    Ngui的一些基础使用心得! BB:首先BB一下我觉得NGUI和UGUI哪个好?我首推UGUI,先不说是官方内置,在使用的方便性上也要好很多,而且NGUI停止更新了!还有就是NGUI有BUG! Ngu ...

  9. NGUI之scroll view的制作和踩坑总结

    之前也看了不少童鞋谢了关于NGUI的scroll view的制作下面我写下自己的制作过程以及心得,希望对童鞋们有所帮助.1.首先建立一个960*640的背景参考http://game.ceeger.c ...

随机推荐

  1. Eclipse如何新建TOMCAT并配置Server Locations和Publishing属性

    Eclipse如何新建TOMCAT并配置Server Locations和Publishing属性 2018年05月08日 23:10:33 ACGkaka_ 阅读数:1269   一.建立TOMCA ...

  2. JSP是一种语言

    JSP(全称Java Server Pages)是运行在服务端的语言. <%-- 注释 --%>:JSP注释,注释内容不会被发送至浏览器甚至不会被编译 <!-- 注释 -->: ...

  3. 【转】反编译D-Link路由器固件程序并发现后门

    固件是D-link无线路由器(型号:DIR-100 revA)的固件程序 v1.13.使用工具Binwalk,很快的就从中发现并提取出一个只读SquashFS文件系统,没用多大功夫我就将这个固件程序的 ...

  4. 2019 Power BI最Top50面试题,助你面试脱颖而出系列<中>

    敲黑板啦!!! 来来来 大家双眼看黑板 开始划重点啦 这篇大部分是"考试"必考题 你们一定要好好的牢记在心 一分都不要放过 刷题中... Power BI面试题目-DAX 9)什么 ...

  5. JavaScript语言里判断一个整数,属于哪个范围:大于0;小于0;等于0

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  6. jmeter使用手册

    1.在bin文件中找到jmeter.bat文件启动 2.创建测试计划-填写计划名称 3.添加线程组(右键点击) 4.设置线程-红框内均可设置,线程数-并发次数 5.在线程组下添加http请求 6.在h ...

  7. webpack 学习之旅

    首先理解wepack的打包原理:一般单页面应用,你的页面都会引入一个类似bundle.js的文件,在react项目中,你会发现index.html中并没有引入css,那么css哪里去了?答案是它被打包 ...

  8. app内嵌vue h5,安卓和ios拦截H5点击事件

    安卓和ios拦截h5点击事件,这个函数事件必须是暴漏在window下的 安卓和ios拦截普通h5函数: <div onclick = "show(),window.android.sh ...

  9. js Number string

    Number string number Js只有一种数字类型(包括整型,浮点型) 极大或极小的可用科学计数法来表示.(7.7123e+1) 所有js数字均为64位 Js所有的数字都存储为浮点型 小数 ...

  10. HTML5制作网页(2)

     <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title> ...