zoukankan      html  css  js  c++  java
  • 关于Unity中的Input输入事件

    截获鼠标,键盘的消息

    监听事件我们都是在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 }
    }

      

  • 相关阅读:
    Java核心技术 卷一 笔记四 库类的直接使用
    Java核心技术 卷一 笔记三 大数值及数组
    Java核心技术 卷一 笔记2 字符串的复制
    Java核心技术 卷一 笔记1
    修改css 样式后, hover事件 不生效
    修改 element ui input 输入框 样式不生效问题
    css3 计算属性
    Vue3 改动系列
    浏览器实现,向下滑动 鼠标滚轮,页面横向移动
    linux ceont0s7 vue 打包压缩图片 一直报错
  • 原文地址:https://www.cnblogs.com/HangZhe/p/6905466.html
Copyright © 2011-2022 走看看