Unity3D脚印5——输入

发布时间:2020-03-03 16:05:50 作者:wyb10a10
来源:网络 阅读:381

Input


使用这个类能够读取输入管理器设置的按键,以及访问移动设备的多点触控或加速感应数据。

 

这里重点记录一下这几个东西的用法,鼠标,键盘,触摸,重力(陀螺仪)

 

PS.按钮的名字:http://game.ceeger.com/Script/Enumerations/KeyCode/KeyCode.html

 

鼠标:

 

Input.mousePosition表示鼠标当前的像素位置(坐标系如何?以左下角为原点

 

float GetAxis(string) "Mouse X"和"Mouse Y" 可以获取这一帧鼠标在X,Y上移动的偏移量,正常速度在-1和1之间,快速移动鼠标会超过这个数值(根据我的猜测,这个数值可能是像素?看样子不是像素,或者是一个单位比例吧

 

接下来这三个函数的参数,0左键,1右键,2中键

 

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

 

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

 

GetMouseButtonUp 对应的键弹起时返回true

 

除了Input组件之外,可以使用MonoBehaviour的回调函数来监听

 

以下几个回调函数需要当对象添加了Collider组件或者GUIElement组件才会被回调,这几个函数在iPhone上无效

 

OnMouseDown 当鼠标点击到对象的时候回调

 

OnMouseDrag 当鼠标拖拽对象时调用,在Ignore Raycast层上无效

 

OnMouseEnter 当鼠标进入对象时调用

 

OnMouseExit 当鼠标离开对象时调用

 

OnMouseOver 当鼠标停留在对象上面时调用

 

OnMouseUpAsButton 鼠标在同一个对象上按下,并弹起时调用

 

OnMouseUp 跟楼上一样

 

键盘:

 

anyKey 此时是否有某一按钮或者鼠标按键被按住

 

anyKeyDown 当你松开一个按钮的时候,是true,其他情况都是false

 

GetButton 当某个按钮被按下时返回true,***用的...GetAxis通用

 

GetButtonDown 当某个按钮被按下的那一帧返回true

 

GetButtonUp 当某个按钮弹起时返回true

 

GetKey,GetKeyDown,GetKeyUp 支持KeyCode参数,敲代码时有自动提示,会舒服一些

 

触摸:

 

multiTouchEnabled 是否支持多点触摸

 

touchCount 只读变量,触摸对象的数量

 

touches 一个Touch的静态数组,表示上一帧所有的触摸对象

 

GetTouch(int index) 相当于touches[index]

 

Touch结构表示一个手指在触摸屏上的状态

 

int fingerId 触摸的唯一索引

Vector2 position 触摸的位置

Vector2 deltaPosition 距离上次改变的距离增量

float deltaTime 距离上次改变的时间增量

int tapCount 点击的次数?

TouchPhase phase 触摸的状态

 

TouchPhase有五种状态:

Began 开始触摸

Move 在屏幕上移动

Stationary 触摸但没有移动

Ended 手指从屏幕上离开

Canceled 触摸被系统取消

 

陀螺仪重力感应神马的,以后用到再了解吧

 

想要读取轴向使用Input.GetAxis方法获取下列默认轴: "Horizontal" 和"Vertical" 映射于控制杆、A、W、S、D和箭头键(方向键)。 "Mouse X" 和"Mouse Y" 映射于鼠标,"Fire1", "Fire2" "Fire3"映射于键盘的Ctrl、Alt、Cmd键和鼠标中键或控制器的按钮。新的输入设置可以使用输入管理器来添加。

 

如果你使用Input制作某种运动行为可以使用Input.GetAxis方法,它能够返回来自键盘、控制器或鼠标平缓并且可以设置的输入结果。使用Input.GetButton方法只用于像事件之类的动作。不要将它用于移动动作。Input.GetAxis方法可以使脚本代码更简洁。

 

注意:每次输入在"Update()"之前不会再更新,所以建议你将所有的输入调用都写在Update方法中。(Update循环中)

iOS和Android设备能够支持多点触控。你可以通过Input.touches属性集合访问在最近一帧中触摸在屏幕上的每一根手指的状态数据。

 

当设备移动时,它们的加速感应器硬件将报告它们在三维空间中沿着三个主轴的线性加速变化数据。你可以使用这些数据检测设备当前的移动方向(相对于地面)和突然间的方向改 变。

 

硬件沿着某感应一轴加速就会立即返回重力值。如果值为1.0代表沿着给定轴的方向+1g的重力加速度,如果值为-1.0代表-1g的重力加速度。如果你保持设备垂直(主页键在下方)在你正前方,那么X轴就是指向你右侧的方向,Y轴指向正上方,Z轴就是你所面向的方向。

 

你可以读取Input.acceleration属性获得设备的加速度信息。你也可以使用Input.deviceOrientation属性获取设备在三维空间中的方位偏移。检测方位变化在你想要制作游戏行为中会非常有用,当用户转动设备或拿着设备时它是不同的。

在开发手机游戏的时候,常用的一种做法是对可点击的对象添加一个碰撞器,并调整好大小,在对象脚本上添加OnMouseDown回调,然后在回调中编写相关的代码,最后在游戏主循环的Update中添加下面的脚本,你就会发现,代码在PC上和手机上的运行效果是一样的。 

if (Input.GetKey(KeyCode.Escape))

        {

            Application.Quit();

        }

        RaycastHit hit = new RaycastHit();

        for (int i = 0; i < Input.touchCount; ++i)

        {

            if (Input.GetTouch(i).phase.Equals(TouchPhase.Began))

            {

                // Construct a ray from the current touch coordinates

                Ray ray = Camera.main.ScreenPointToRay(Input.GetTouch(i).position);

                if (Physics.Raycast(ray, out hit))

                {

                    hit.transform.gameObject.SendMessage("OnMouseDown");

                }

            }

        }

上面这段代码在手机上生效,在PC上是不会被触发的,它通过触点发射出一道射线与场景中的碰撞体进行检测,如果检测到对象,则调用对象的OnMouseDown函数。那么在PC上,当我们点击一个碰撞体的时候,会直接调用该对象的OnMouseDown回调,所以我们就可以在PC上测试我们的游戏了

推荐阅读:
  1. Unity3D脚印4——GameObject
  2. Unity3D脚印3——Transform

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

键盘 记录 坐标系

上一篇:达梦数据库的角色管理

下一篇:DNS搭建

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》