基于Unity3D的手势识别程序设计方法
摘要本文介绍了以触摸屏的基本工作原理和程序控制方法,比较详细地分析触摸屏的单点操作、和多点操作的理论根据,最后给出了基于Unity3D游戏引擎的手势识别算法。
【关键词】手势识别触摸屏 Unity3D多点触摸
随着手机游戏的爆发式增长,游戏引擎也不断提高对触摸屏的人机交互界面的要求。这些进展主要体现触摸屏控制程序对触摸点数量的承载能力和游戏引擎对手势理解能力方面。手势识别实现了特有的触屏操作,它已经取代了鼠标在人机交互界面领域中的地位。本文详细地介绍了Unity3d游戏引擎的触摸屏人机交互方法。
1触摸屏人机交互界面
触摸屏(touch screen)是通过收集触头讯号而完成人机交互的感应式液晶显示设备。当用户接触液晶屏幕上的图形按钮时,屏幕接触点后面的触觉反馈系统将按照预先编写的程序驱动各种连结电子设备向操作系统报告。
触摸原理具体来说是如下的过程:
(1)用户用手指或者其他物体接触安装在液晶显示器前端的触摸屏;
(2)触摸屏系统根据手指等媒介接触的图标或菜单位置的来定位信息的输入对象;
(3)触摸检测部件接受触摸点位置,并送入屏幕控制器;
(4)屏幕控制器将位置信号换算称坐标,交给操作系统。
2 触摸屏程序编写方法
在Unity3d游戏引擎中,需要考虑的相关因素包含3个方面:触屏的点数、手指的移动和摄像头的移动。触屏动作类型根据触屏的点数分为单点触屏和多点触屏。单点触屏通常用于拐弯,跳跃等触屏操作,多点触屏多用于放大,缩小等操作; 手指的移动存在一定的运动轨迹,其运动轨迹决定了触摸的动作;摄像头拍摄的位置是观察者的视图,摄像头拍摄的位置应及时根据手指的移动进行调整。本文给出基于Unity3d引擎的手势识别算法。
S1[允许多点触屏]
Input.multiTouchEnabled=1.
MI1[判断触屏手指的个数]
Input.touchCount==1,//表示当前只有一个手指在触摸屏上(单点触摸)。
Input.touchCount>1,//表示当前有两个手指在触摸屏上(多点触摸)
MI2[当手指个数为一个]
根据Begin、Moved、Ended三个状态来判断触屏的状态.
MI3[当手指为两个]
定义两个属性f1,f2分别用来记录两个手指的位置。
手指移动的方向分为水平方向和垂直方向,水平方向又可以分为左右两个方向,而垂直方向可以分为上下两个方向。如果第一次记录的位置和离开屏幕时记录的位置的X轴的方向的记录值相减的绝对值大于Y轴的方向的记录值相减的绝对值则为水平方向的移动,否则为垂直方向的移动。若是水平方向的移动,继续判断是向左划动还是向右划动,当first_screenpos.x大于endpos.x时则为向左划动,否则为向右划动。若是垂直方向的移动,继续判断是向下划动还是向上划动,当first_screenpos.y大于endpos.y时则为向下划动,否则为向上划动。
For (i=0;i<2;i++)/*在for循环中进行判断触摸动作是否结束或者手指处于移动状态*/
{ Touch touch=Input.touch[i];
if(触屏结束) 中断循环;
if(触屏进行)
{ 设置变量mov,初始值为0,用来存储X,Y轴的增量
if(i==0)
{ finger1=touch.position;
mov1=touch.deltaposition;//Touch.deltaPostion即增量位置}
else
{finger2=touch.position;
mov2=touch.deltaposition;
if(向左划){ 将m1的X轴的值赋给mov;}
else{将m2的x轴的值赋给mov; }
if(手指向下移){ 将m1的y轴的值赋给mov;}
else{将m2的y轴的值赋给mov;}
}}}}
3 总结
本文分析了触摸屏的硬件工作原理,并给出了基于Unity3D的单点触摸操作以及多点触摸操作的实现方法。这些算法可以用于windows、Mac、iOS、Wii、PS3、Andriod等多种平台的游戏开发当中,从而可以降低开发难度、减少跨平台的开发周期。此外还讨论了多点识别所存在的若干问题。
参考文献
[1]金玉玺.Unity3D手机游戏开发[M].北京:清华大学出版社,2013(8).
[2]林淦.基于平板计算机的触摸屏程序设计[D].福建工程学院,2012(6).
作者单位
福建工程学院福建省福州市350108