02_Unity3D的输入(Input)——移动设备输入


      Untiy3D开发会碰到移动设备的触摸开发,在Android中有做过这方面开发的应该可以感觉到输入尤其是多点输入开发比较复杂,而Unity3D给我们轻松的解决的很多问题,Unity3D中是用Input类来控制用户的输入,同样Input类也会控制移动设备的输入,下面我门将介绍Input类中的移动设备输入方法。

 1.Input.touchCount

     此方法会返回用户触摸点的数量。

     返回值为int型。

2.Input.multiTouchEnabled     

     这个值用于得到和控制用户是否允许多点触控,我们在开发软件过程中常会碰到不需要使用多点触控的情况,这是我们就可以使用Input.multiTouchEnabled=false;这样就只能支持单点触控了。     

3.Input.GetTouch(int index)

          这个方法类似于Input.touches中获得指定的数组元素。这里注意index是在0开始的。通过index索引到指定触摸点,然后再进一步操作,关于触摸点的数据结构以及相位状态,我们将在touches中进一步介绍。

4.Input.touches

          这个是我们最长用的一个方法,此方法返回Touch数组。手指触控使用这个数据结构来描述:

fingerId手指索引摸的唯一索引
position位置触摸屏幕的位置
deltaPosition 增量位置自最后一帧改变的屏幕位置
deltaTime 增量时间从最后状态改变到现在经过的时间
tapCount 点击数iPhone/iPad屏幕能够识别用过的快速点击, 这个计数器让你知道用户点击屏幕多少次,
而不是移动手指。android设备不对点击计数,这个方法总是返回1
phase 相位(状态)描述触摸的状态,可以帮助开发者确定用户是否刚开始触摸,是否用户移动手指,是否用户刚刚抬起手指。

相位状态有以下五种:

开始手指刚刚触摸屏幕
Moved移动手指在屏幕上移动
Stationary静止手指触摸屏幕,但是自最后一帧没有移动
Ended结束手指从屏幕上抬起,这是触控的最后状态
Canceled取消系统取消了触控跟踪,如,用户将设备放在了脸上或超过同时超过5个触摸点。这是触控的最后状态




下面演示上述几种方法的示例;

示例:   

example1:下面是unity官方给出的脚本,这里通过了一个非常重要的Touch集合

public class Test1 : MonoBehaviour {
     private string countNum;
     void OnGUI(){
     GUI.Label(new Rect(100,100,400,100),"count=="+countNum);            
     }
     void Update() {
        int fingerCount = 0;
        foreach (Touch touch in Input.touches) {
            if (touch.phase != TouchPhase.Ended && touch.phase != TouchPhase.Canceled)
                fingerCount++;
        }
        if (fingerCount > 0)
               countNum="User has " + fingerCount + " finger(s) touching the screen";     
    }
}

example2:

public class Test2 : MonoBehaviour {
     public GUISkin mySkin;
     void OnGUI(){
          GUI.skin=mySkin;
          GUI.Label(new Rect(100,50,400,50),"是否支持多点触摸"+Input.multiTouchEnabled);
          GUI.Label(new Rect(100,100,400,50),"触摸对象的数量:"+Input.touchCount);
          //Input.multiTouchEnabled=false;    //当设为false是只能单点触控
          Touch[] touch  = Input.touches;
          string nowPhase="";
          for(int i = 0;i<touch.Length;i++){
               GUI.Label(new Rect(100,150+50*i,400,50),"第"+i+"个触摸点:  X="+touch[i].position.x+" Y="+touch[i].position.y);
               switch(touch[i].phase){
                    case TouchPhase.Began:
                         nowPhase = "开始";
                         break;
                    case TouchPhase.Canceled:
                         nowPhase = "取消";
                         break;
                    case TouchPhase.Ended:
                         nowPhase = "结束";
                         break;
                    case TouchPhase.Moved:
                         nowPhase = "移动";
                         break;
                    case TouchPhase.Stationary:
                         nowPhase = "静止";
                         break;
                    default:
                         break;
               }
               GUI.Label(new Rect(100,150+50*i+25,400,50),"第"+i+"个触摸点状态:"+nowPhase);
          }
     }
}

效果如下所示:(text1和test2同时挂在一个空object上)



  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值