5.代码检测触屏输入

  1. 5.代码检测输入-触屏输入
    1. 5.1 知识点
      1. 获取当前触屏设备
      2. 得到触屏手指信息
      3. 手指按下 抬起 长按 点击
      4. 手指位置等相关信息
    2. 5.2 知识点代码

5.代码检测输入-触屏输入


5.1 知识点

获取当前触屏设备

//获得当前触屏设备
Touchscreen touchscreen = Touchscreen.current;
//由于触屏相关都是在移动平台或提供触屏的设备上使用
//所以在使用时最好做一次判空 
//之前鼠标和键盘其实也最好判空
if (touchscreen == null)
    return;

得到触屏手指信息

//得到触屏手指数量
print(touchscreen.touches.Count);

//得到单个触屏手指
//touchscreen.touches[0]

//得到所有触屏手指 遍历所有手指
foreach (var item in touchscreen.touches)
{
    
}

手指按下 抬起 长按 点击

//获取指定索引手指
TouchControl touchControl = touchscreen.touches[0];

//按下 要先.出press
if (touchControl.press.wasPressedThisFrame)
{

}

//抬起 要先.出press
if (touchControl.press.wasReleasedThisFrame)
{

}

//长按 要先.出press
if (touchControl.press.isPressed)
{

}

//点击手势 
if(touchControl.tap.isPressed)
{

}

//touchControl.press.isPressed 是根据 phase 的值来判断的,只要 phase 是 Began, Stationary, 或者 Moved,就表示触摸正在进行中,返回 1;否则返回 0。
//touchControl.tap.isPressed 是根据 tapCount 的值来判断的,只要 tapCount 大于 0,就表示触摸被点击了,返回 1;否则返回 0。
//因此,touchControl.press.isPressed 更适合用来检测持续性的触摸操作,而 touchControl.tap.isPressed 更适合用来检测瞬间性的触摸操作。

//连续点击次数
print(touchControl.tapCount);

手指位置等相关信息

//位置
print(touchControl.position.ReadValue());

//第一次接触时位置
print(touchControl.startPosition.ReadValue());

//接触区域大小 半径大小
touchControl.radius.ReadValue();

//偏移位置
touchControl.delta.ReadValue();

//得到当前手指的 状态(阶段)
UnityEngine.InputSystem.TouchPhase touchPhase = touchControl.phase.ReadValue();

switch (touchPhase)
{
    //无
    case UnityEngine.InputSystem.TouchPhase.None:
        break;
    //开始接触
    case UnityEngine.InputSystem.TouchPhase.Began:
        break;
    //移动
    case UnityEngine.InputSystem.TouchPhase.Moved:
        break;
    //结束
    case UnityEngine.InputSystem.TouchPhase.Ended:
        break;
    //取消
    case UnityEngine.InputSystem.TouchPhase.Canceled:
        break;
    //静止
    case UnityEngine.InputSystem.TouchPhase.Stationary:
        break;
    default:
        break;
}

5.2 知识点代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;
using UnityEngine.InputSystem.Controls;

public class Lesson05_代码检测输入_触屏输入 : MonoBehaviour
{
    void Start()
    {
        #region 知识点一 获取当前触屏设备

        //获得当前触屏设备
        Touchscreen touchscreen = Touchscreen.current;
        //由于触屏相关都是在移动平台或提供触屏的设备上使用
        //所以在使用时最好做一次判空 
        //之前鼠标和键盘其实也最好判空
        if (touchscreen == null)
            return;

        #endregion

        #region 知识点二 得到触屏手指信息

        //得到触屏手指数量
        print(touchscreen.touches.Count);

        //得到单个触屏手指
        //touchscreen.touches[0]

        //得到所有触屏手指 遍历所有手指
        foreach (var item in touchscreen.touches)
        {
            
        }

        #endregion

        #region 知识点三 手指按下 抬起 长按 点击

        //获取指定索引手指
        TouchControl touchControl = touchscreen.touches[0];

        //按下 要先.出press
        if (touchControl.press.wasPressedThisFrame)
        {

        }

        //抬起 要先.出press
        if (touchControl.press.wasReleasedThisFrame)
        {

        }

        //长按 要先.出press
        if (touchControl.press.isPressed)
        {

        }

        //点击手势 
        if(touchControl.tap.isPressed)
        {

        }

        //touchControl.press.isPressed 是根据 phase 的值来判断的,只要 phase 是 Began, Stationary, 或者 Moved,就表示触摸正在进行中,返回 1;否则返回 0。
        //touchControl.tap.isPressed 是根据 tapCount 的值来判断的,只要 tapCount 大于 0,就表示触摸被点击了,返回 1;否则返回 0。
        //因此,touchControl.press.isPressed 更适合用来检测持续性的触摸操作,而 touchControl.tap.isPressed 更适合用来检测瞬间性的触摸操作。


        //连续点击次数
        print(touchControl.tapCount);

        #endregion

        #region 知识点四 手指位置等相关信息

        //位置
        print(touchControl.position.ReadValue());

        //第一次接触时位置
        print(touchControl.startPosition.ReadValue());

        //接触区域大小 半径大小
        touchControl.radius.ReadValue();

        //偏移位置
        touchControl.delta.ReadValue();

        //得到当前手指的 状态(阶段)
        UnityEngine.InputSystem.TouchPhase touchPhase = touchControl.phase.ReadValue();

        switch (touchPhase)
        {
            //无
            case UnityEngine.InputSystem.TouchPhase.None:
                break;
            //开始接触
            case UnityEngine.InputSystem.TouchPhase.Began:
                break;
            //移动
            case UnityEngine.InputSystem.TouchPhase.Moved:
                break;
            //结束
            case UnityEngine.InputSystem.TouchPhase.Ended:
                break;
            //取消
            case UnityEngine.InputSystem.TouchPhase.Canceled:
                break;
            //静止
            case UnityEngine.InputSystem.TouchPhase.Stationary:
                break;
            default:
                break;
        }
        #endregion
    }
}


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏