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