博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于Unity中的Input输入事件
阅读量:6733 次
发布时间:2019-06-25

本文共 4529 字,大约阅读时间需要 15 分钟。

截获鼠标,键盘的消息

监听事件我们都是在Update里面监听的。 

Unity的虚拟轴打开:Edit-->Project Settings-->Input,打开的各个Name就是双引号里面要填的,记不住就打开查,也可以自己定义一些按键。

 

一、Input的主要变量

1: mousePosition: 当前鼠标的像素坐标;

2: anyKey/anyKeyDown: 当前是否有按键按住;
3: inputString: 本次update时间间隔内输入的字符串;
4: acceleration: 重力加速度传感器的值,加速度的方向;
5: touches: 返回当前所有触摸对象的列表Touch[],触摸屏可以支持多根手指轨迹;

 

二、Input的主要方法

1: GetAxis/GetAxisRaw: 返回表示虚拟轴的值:

2: GetButton/GetButtonDown/GetButtonUp 虚拟按钮
3: GetKey/GetKeyDown/GetKeyUp 按下制定按钮;
4: GetMouseButton
GetMouseButtonDwon
GetMouseButtonUp
5: GetTouch(index) 返回当前触控Touch对象;
6: 打开InputManager: 配置虚拟轴;

 

三、Input使用实例

1.创建一个Canvas

2.对Canvas进行初始化
3.创建一个Image的UI节点作为Canvas的子节点,名字叫bg,拖进背景图片到这个节点中。
4.创建一个叫Game_scene的脚本,挂载到Canvas下面

5.Game_scene脚本内容:

void Update () {        // 以屏幕的左下脚为原点;        // Debug.Log(Input.mousePosition); // 当前鼠标的位置;        // 如果一个按键一直按住,那么每帧都会返回True,只到弹起;        // 键盘,鼠标的key        /*if (Input.anyKey) {            Debug.Log(Input.anyKey);        }*/        // 检测按键按下,但是,一旦按下以后,后面就不触发了。        // 如果一个按键一直按着,那么这个只会按下的那帧触发true,        /*if (Input.anyKeyDown) {            Debug.Log(Input.anyKeyDown);        }*/        // 返回你在本次update里面输入的assic字符        /*if (Input.inputString.Length > 0) {            Debug.Log(Input.inputString);        }*/        // end         // 重力加速度的方向,那你就可以根据这个方向来获得输入。        // 如果没有重力传感器,那么就是(0, 0, 0); Vector3的对象;        // Debug.Log(Input.acceleration);        // Debug.Log(Input.touchCount); // 获得当前的触摸的事件的个数;        /*if (Input.touchCount > 0) {            // Input.touches // Touch [];        }*/        // Horizontal 是这个虚拟轴,Eidt --> ProjectSetting -->Input        // 由1-->0, 递减的插值的;        // GetAxis 变化的时候,是有插值的。        // float value = Input.GetAxis("Horizontal");        /*float value = Input.GetAxisRaw("Horizontal");        if (value != 0.0f) {            Debug.Log(value);        }*/        // 距离上一次鼠标的变化; dx, dy        /*float mouse_dx = Input.GetAxis("Mouse X");        float mouse_dy = Input.GetAxis("Mouse Y");        Debug.Log(mouse_dx + ":" + mouse_dy);*/        // 不会有插值的,1,0        // float value = Input.GetAxisRaw("Jump");        // Debug.Log(value);        // 鼠标左键,        /*if (Input.GetButton("Fire1")) {            Debug.Log("fire1 click");        }*/        // 只是在按钮,按下那一刻,为真,        /*if (Input.GetButtonDown("Fire1")) {            Debug.Log("fire1 down");        }        //弹起来那一刻为真        if (Input.GetButtonUp("Fire1")) {            Debug.Log("fire1 up");        }*/        // 键盘上的P按键, 如果按下不松,会一直为true        // GetKeyDown, GetKeyUp,只在状态改变的时候为真        /*if (Input.GetKeyDown(KeyCode.P)) {            Debug.Log("Key p down");        }        if (Input.GetKeyUp(KeyCode.P))        {            Debug.Log("Key p up");        }        if (Input.GetKey(KeyCode.P)) {            Debug.Log("P");        }*/        // 判断鼠标按键有没有按下, int button(0(左), 1(右), 2(中))        if (Input.GetMouseButtonDown(2)) {            Debug.Log("mouse left down");        }        if (Input.GetMouseButtonUp(2)) {            Debug.Log("mouse left up");        }        // Move来使用。        if (Input.GetMouseButton(2)) {            Debug.Log("mouse left all ways");        }}

 

四、虚拟轴定义

1: Name: 轴的名字;

2: Descriptive: 正向方向描述;
3: Button:正向反向按钮和附加按钮;
4: Gravity:复位的速度,用于按键和鼠标;
5: Dead: 小于该值的输入值, 都会被视为0,用于摇杆。
6: Sensitivity(灵敏度): 对于键盘输入,该值越大则响应时间越快,该值越小则越平滑。对于鼠标输入,设置该值会对鼠标的实际移动距离按比例缩放
7: Snap对齐: 如果启用该设置,当轴收到反向的输入信号时,轴的数值会立即置为0,仅用于键/鼠标 输入。
8:Invert 反转: 启用该参数可以让正向按钮发送负值,反向按钮发送正值。
9:Type 类型: 所有的按钮输入都应设置为 键/鼠标 (Key / Mouse) 类型,对于鼠标移动和滚轮应设为 鼠标移动(Mouse Movement)。摇杆设为摇杆轴 (Joystick Axis),用户移动窗口设为窗口移动 (Window Movement)。
10:Axis 轴: 设备的输入轴(摇杆,鼠标,手柄等)
11:Joy Num 摇杆编号: 设置使用哪个摇杆。默认是接收所有摇杆的输入。仅用于输入轴和非按键。

 

 

五、Touch对象

1:fingerID; 手指ID

2: position 手指位置
3: deltaPosition 距离上一次的偏移;
4: phase: 触摸相位TouchPhase.Began Moved, cancel, ended;
5: Touch事件同时会触发 GetMouseButton(0)事件,能够使用Input.GetAxis("Mouse X/Y")获取触摸偏移位置;
6: 到底用Touch还是用Mouse,如果对触摸的准确性要求不高,可以使用Mouse,否则还是区别对待,使用Touch,如果要多点触控,那么自己判断,直接自己使用Touch

void Update () {
if (Input.touchCount > 0) { Touch t = Input.GetTouch(0); // t.position; //触摸的位置; // t.deltaPosition; // 距离上一次,位置的偏移 // t.phase // 触摸的相位,-->状态, 按下,滑动,弹起,cancel; // Touch,只在移动设备上能用,所以统一,鼠标和这个Touch, // Touch同时也会发送一个 鼠标左键的事件,模拟一次鼠标左键; // GetMouseButton(0), 鼠标,和触摸都可以当作鼠标事件来处理,那么 // 我们的代码就只要写一次。单点触摸的时候。 // 多点触摸,自己处理Touch事件。 // 单点触控 // t.position, --> mousePostion; // t.deltaPosition --> Input.GetAxis("Mouse X/Y"); // Begin(Down), ended(Up), moved(Button) // end } }

 

  

转载地址:http://rofqo.baihongyu.com/

你可能感兴趣的文章
FAQ系列 | InnoDB Monitor被自动打开
查看>>
重视“互联网+政务服务”改革工作 推进智慧城市建设
查看>>
《云计算揭秘企业实施云计算的核心问题》——1.3节导致云计算的IT演变
查看>>
国内航空WiFi免费模式成主流 机上VR已在测试中
查看>>
微软发布Azure Functions Proxies公开预览版
查看>>
三星证实!7千万美元收购美国QD Vision
查看>>
物联网快速改变生活模式 2020年联网对象超二百亿个
查看>>
物联网标准将是一个难解的问题
查看>>
通过 JSX Control Statements 编写 JSX
查看>>
如何让IT员工为自动化所带来的影响做好准备
查看>>
MySQL 5.7 新时代
查看>>
物联网火热背后的冷思考 中国电信三方面入手摆脱弊端
查看>>
《C语言程序设计:问题与求解方法》——3.11节本章习题
查看>>
企业计算系统的下一次技术突破在哪里?
查看>>
《信息可视化:交互设计(原书第2版)》——2.3节数据
查看>>
Docker和容器技术很火,却未能入CIO法眼
查看>>
内存数据库MemSQL获3600万美元C轮融资
查看>>
《私有云计算整合、虚拟化和面向服务的基础设施》一2.2服务器整合驱动
查看>>
直击网易人工智能事业部:闷声发大财的新面孔
查看>>
NAND Flash供不应求,第三季品牌商营收大幅季成长19.6%
查看>>