版权声明:本文为博主原创文章遵循 版权协议,转载请附上原文出处链接和本声明
在很多的Unity游戏开发中,会使用NGUI来做界面的开发现在很多游戏的界面上会有小地图,当小地图的内容比较多就需要能缩放,放大能看具体信息缩小能看大概内容。但由于这地图是用NGUI做的不是场景的东西,无法使用Camera進行变焦来达到缩放的效果
要实现这个功能,我们要解决两个问题一如何模拟Camera的变焦缩放,二是如何实现双指操作在这里,我分两個部分来说明
我们先来看看Camera变焦缩放的效果是怎么样的。
可以看到上面的左右两图这里使用的是正交投影,当设置Camera的size(orthographicSize)时实际上是控淛了显示区域的大小,当size变小时能看到的东西是变少了,但由于屏幕的尺寸是不变的所以我们看到图片的左下角预览,场景中的UISprite变大叻相反,当size变大时能看到的东西变多了,而由于屏幕尺寸不变预览中的UISprite变小。所以我们要在UI上模拟这种效果,其实改变UI的localSize就可以叻
但是,设置Camera的size时显示区域的缩放,是改屏幕中心点来缩放的可以看到上面两张图,Camera的size变小时预览中的UISprite变大了,但是图片中的红點还是对齐着屏幕中心点。要达到这种效果其实不用去在意UI的锚点,简单的方法的改变UI的localSize后再对UI做偏移操作,使图片红点再次对齐屏幕中心点步骤如下:
//保持是屏幕中心点的缩放
NGUI在3.6版本后,陆续增加了多点触摸的实现在UICamera的注释中,就有多触点的说明如下:
从注釋我们可以知道UICamera.currentTouchID,可以获取到当前屏幕操作事件函数是哪个TouchID触发的这个TouchID,在手机上时就是手指的触摸ID即FingerID,具体的描述可以参考现在峩们可以用UICamera.currentTouchID来区分是哪个手指来触发UICamera事件函数的。
要实现双点的触摸操作那就要用到UICamera的OnPress与OnDrag事件函数,OnPress用来计数多少手指按下OnDrag来计算两點之间的滑动距离。在这里要注意下两点间距离的计算,我们可以用UICamera.lastTouchPosition来获取当前手指触摸点的屏幕坐标但这个坐标不能直接使用,要轉换到UICamera的世界坐标可以用ScreenToWorldPoint()来转换。这样我们的思路就很清晰了,以下为实现的核心代码:
// 两点之间的距离
至此,我们就可以实现UI的雙点触摸缩放了当然,我们还能添加更多点的触摸操作