http://blog.csdn.net/lingyun_blog/article/details/41451565

Unity3D使用input类控制用户的输入,输入包括了用户键盘,鼠标,触摸,重力感应以及地理位置输入等输入方式。

本节我们介绍Unity3D中如何监听用户的鼠标、键盘输入。

首先我们介绍一个很重要的类KeyCode,此类中的值记录各种按键,详细键码参照Unity圣典:http://game.ceeger.com/Script/Enumerations/KeyCode/KeyCode.html

一.键盘的输入

GetKey,GetKeyDown,GetKeyUp三个方法分别获取用户键盘按键的输入

GetKey:用户长按按键有效;

GetKeyDown:用户按下按键时有效;

GetKeyUp:用户抬起按键时有效;

示例:

  1. public class Test1 : MonoBehaviour {
  2. void Update ()
  3. {
  4. bool down = Input.GetKeyDown(KeyCode.Space);
  5. bool held = Input.GetKey(KeyCode.Space);
  6. bool up = Input.GetKeyUp(KeyCode.Space);
  7. if(down)
  8. {
  9. GUI.Label(new Rect(100,100,400,100),"down");
  10. }
  11. else if(held)
  12. {
  13. GUI.Label(new Rect(100,100,400,100),"held");
  14. }
  15. else if(up)
  16. {
  17. GUI.Label(new Rect(100,100,400,100),"up");
  18. }
  19. else
  20. {
  21. GUI.Label(new Rect(100,100,400,100),"else");
  22. }
  23. }
  24. }

• anyKey,anyKeyDown

anyKey用于监听用户的任意按键输入或鼠标点击,事件触发后返回true。anyKeyDown:当任意按键松开时返回true。

示例:

  1. public class Test2 : MonoBehaviour {
  2. void OnGUI(){
  3. if(Input.anyKey){
  4. GUI.Label(new Rect(100,100,400,100),"测试任意按键");
  5. }
  6. }
  7. }

 

GetButton(string buttonName)

GetButton用于监听Button的输入,参数为自己指定的button的名字,在Unity中可以使用管理器添加或修改Input参数。unity已经为用户预设了多种输入情况,在button中预设了Fire、Jump等输入情况。用户也可以自行修改,打开Edit-->Project   Settings-->Input可以看到预设如下:

以Fire1为例,可以看到使用左ctil键或者鼠标左键控制Fire1按钮。

示例:

 
  1. public class Test3 : MonoBehaviour {
  2. void OnGUI(){
  3. if(Input.GetButton("Fire1")){
  4. GUI.Label(new Rect(100,100,400,100),"测试按钮点击");
  5. }
  6. }
  7. }

另外还有GetButtonDown( 当某个按钮被按下的那一帧返回true)

GetButtonUp( 当某个按钮弹起时返回true)两个方法,就不详细介绍了。

二.鼠标的输入

mousePosition

Input.mousePosition返回当前鼠标的位置,这里指的是距离原点的像素位置,说明一下,Unity中的原点(0,0)位置为左下角,上位y轴正方向,右为x轴正方向。返回值类型为Vector3。

示例:

 
  1. public class mono2 : MonoBehaviour {
  2. void OnGUI(){
  3. GUI.Label(new Rect(100,100,400,100),"x="+Input.mousePosition.x+"  y="+Input.mousePosition.y+"  z="+Input.mousePosition.z);
  4. }
  5. }

当用户移动鼠标是即可显示x,y坐标,z为0。

•GetMouseButton

GetMouseButton 对应的键处于按下状态时返回true

GetMouseButtonDown 对应的键被按下时返回true

GetMouseButtonUp 对应的键弹起时返回true

示例:

 
  1. public class mono2 : MonoBehaviour {
  2. void OnGUI(){
  3. <span style="white-space:pre">    </span>  GUI.Label(new Rect(100,100,400,100),"X="+Input.GetAxis("Fire1")+"Y="+Input.GetAxis("Fire1"));
  4. if(Input.GetMouseButton(0)){
  5. GUI.Label(new Rect(100,100,400,100),"鼠标左键按下");
  6. }else if(Input.GetMouseButton(1)){
  7. GUI.Label(new Rect(100,100,400,100),"鼠标右键按下");
  8. }else if(Input.GetMouseButton(2)){
  9. GUI.Label(new Rect(100,100,400,100),"鼠标中键按下");
  10. }
  11. }
  12. }
 

在例子中可以看出参数为int型,含义为:0左键,1右键,2中键。

 
 
 
 
 
 
 
 
 
 
 
 

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集合

  1. public class Test1 : MonoBehaviour {
  2. private string countNum;
  3. void OnGUI(){
  4. GUI.Label(new Rect(100,100,400,100),"count=="+countNum);
  5. }
  6. void Update() {
  7. int fingerCount = 0;
  8. foreach (Touch touch in Input.touches) {
  9. if (touch.phase != TouchPhase.Ended && touch.phase != TouchPhase.Canceled)
  10. fingerCount++;
  11. }
  12. if (fingerCount > 0)
  13. countNum="User has " + fingerCount + " finger(s) touching the screen";
  14. }
  15. }

example2:

  1. public class Test2 : MonoBehaviour {
  2. public GUISkin mySkin;
  3. void OnGUI(){
  4. GUI.skin=mySkin;
  5. GUI.Label(new Rect(100,50,400,50),"是否支持多点触摸"+Input.multiTouchEnabled);
  6. GUI.Label(new Rect(100,100,400,50),"触摸对象的数量:"+Input.touchCount);
  7. //Input.multiTouchEnabled=false;    //当设为false是只能单点触控
  8. Touch[] touch  = Input.touches;
  9. string nowPhase="";
  10. for(int i = 0;i<touch.Length;i++){
  11. GUI.Label(new Rect(100,150+50*i,400,50),"第"+i+"个触摸点:  X="+touch[i].position.x+" Y="+touch[i].position.y);
  12. switch(touch[i].phase){
  13. case TouchPhase.Began:
  14. nowPhase = "开始";
  15. break;
  16. case TouchPhase.Canceled:
  17. nowPhase = "取消";
  18. break;
  19. case TouchPhase.Ended:
  20. nowPhase = "结束";
  21. break;
  22. case TouchPhase.Moved:
  23. nowPhase = "移动";
  24. break;
  25. case TouchPhase.Stationary:
  26. nowPhase = "静止";
  27. break;
  28. default:
  29. break;
  30. }
  31. GUI.Label(new Rect(100,150+50*i+25,400,50),"第"+i+"个触摸点状态:"+nowPhase);
  32. }
  33. }
  34. }

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

 
 
 

【转】Unity3D的输入(Input)——键盘和鼠标的更多相关文章

  1. unity3d的键盘和鼠标输入

    一.键盘的输入 •GetKey,GetKeyDown,GetKeyUp三个方法分别获取用户键盘按键的输入 1. GetKey:用户长按按键有效: bool down = Input.GetKeyDow ...

  2. DX11 Without DirectX SDK--05 键盘和鼠标输入

    回到 DirectX11--使用Windows SDK来进行开发 提供键鼠输入可以说是一个游戏的必备要素.在这里,我们不使用DirectInput,因为Windws SDK本身就不提供该头文件.这里我 ...

  3. DirectX11 With Windows SDK--05 键盘和鼠标输入

    前言 提供键鼠输入可以说是一个游戏的必备要素.在这里,我们不使用DirectInput,而是使用Windows的消息处理机制,不过要从头开始实现会让事情变得很复杂.DXTK提供了鼠标输入的Mouse. ...

  4. python input()键盘输入8583报文带有\x单反斜杠自动转义问题解决办法

    用input()输入的字符串是8385报文比如:\x30\x30\x30\x30...,但是输入后,代码把8583报文字符串中多加了一个\,类似\\x30. 但是我把input()代码注释掉,把858 ...

  5. WPF嵌入Unity3D之后,unity3D程序的键盘和鼠标事件无法触发(3D程序的焦点无法激活)的解决方案

    目前最通用的客户端调用3D的方式,就是WPF程序通过Process启动Unity3D的exe进程,直接上代码: //开启3D进程 internal void Create3DProcess(strin ...

  6. WPF之路-键盘与鼠标事件 - 简书

    原文:WPF之路-键盘与鼠标事件 - 简书 键盘事件 事件类型分为以下几个类型 生命周期事件:在元素加载与卸载的时候发生 鼠标事件:鼠标动作 键盘事件:键盘动作 手写笔事件:适用于win7以上的系统 ...

  7. WPF 窗体中获取键盘和鼠标无操作时的超时提示

    原文:WPF 窗体中获取键盘和鼠标无操作时的超时提示 通过调用Windows API中的GetLastInputInfo来获取最后一次输入的时间 , , );            timer.Tic ...

  8. winform中键盘和鼠标事件的捕捉和重写(转)

    在 编写winform应用程序时,有时需要无论在哪个控件获取焦点时,对某一个键盘输入或者鼠标事件都进行同样的操作.比如编写一个处理图片的应用程序时, 希望无论当前哪个控件获得焦点,当用户按上.下.左. ...

  9. WPF 中模拟键盘和鼠标操作

    转载:http://www.cnblogs.com/sixty/archive/2009/08/09/1542210.html 更多经典文章:http://www.qqpjzb.cn/65015.ht ...

随机推荐

  1. 【HTML5】表单元素

    * datalist datalist 元素规定输入域的选项列表. 列表是通过 datalist 内的 option 元素创建的. 如需把 datalist 绑定到输入域,请用输入域的 list 属性 ...

  2. 【项目启动】 tomcat启动,项目无法启动,无法正常访问/项目可以启动,报错:java.lang.ClassNotFoundException: ContextLoaderListener

    使用maven搭建项目(这个错误和是不是使用maven搭建项目没有关系),然后部署到tomcat中运行. 出现问题1: tomcat跑起来了,但是启动时间很短,没有报错,项目不能正常访问 项目启动时间 ...

  3. android native开发时:java.lang.UnsatisfiedLinkError: Native method not found的处理

    这个异常一般是由于JNI的链接器不能正常识别C++的函数名造成的.处理的方法是用exern "C" {},来包裹需要export的C++的native方法. 如果native的方法 ...

  4. 模拟 POJ 1573 Robot Motion

    题目地址:http://poj.org/problem?id=1573 /* 题意:给定地图和起始位置,robot(上下左右)一步一步去走,问走出地图的步数 如果是死循环,输出走进死循环之前的步数和死 ...

  5. Making raycast ignore multiple layers

    I know how to make the raycast ignore a layer but I want it to ignore layers 9 and 10 but collide wi ...

  6. 【wikioi】2216 行星序列(线段树)

    http://wikioi.com/problem/2216/ 这题太让我感动了QAQ,让我找到了我一直以来写线段树的错误!!!! 就是,pushdown一定要放在最前面!要不然顺序会错.也就是说,当 ...

  7. 二分查找算法java实现

    今天看了一下JDK里面的二分法是实现,觉得有点小问题.二分法的实现有多种今天就给大家分享两种.一种是递归方式的,一种是非递归方式的.先来看看一些基础的东西. 1.算法概念. 二分查找算法也称为折半搜索 ...

  8. iOS开发项目之四 [ 调整自定义tabbar的位置与加号按钮的位置]

    自定义tabbar与按钮的添加 01 - 把系统的tabbar用我们自己的覆盖 LHQTabBar *lhqTabBar = [[LHQTabBar alloc]init]; [self setVal ...

  9. 命令行编译运行Java

    首先要安装JDK,然后设置环境变量Path,添加C:\Program Files (x86)\Java\jdk1.8.0_66\bin 然后建立一个名为j.java的文件,里面加入如下代码: publ ...

  10. salt执行报错一例

    执行报错: 查看服务端日志: 认证有问题 重新认证吧!!! minion端: [root@super66 ~]# cd /etc/salt/[root@super66 salt]# lsminion ...