U4S1L4——触屏输入
U4S1L4——触屏输入
本章代码关键字
1 | Touchscreen //触屏类 |
获取当前触屏设备
由于触屏相关都是在移动平台或提供触屏的设备上使用,所以在使用时最好做一次判空
1 | Touchscreen ts = Touchscreen.current; |
得到触屏手指信息
-
得到触屏手指数量
1
print(ts.touches.Count);
-
得到单个触屏手指
1
2ts.touches[0]
ts.touches[1] -
得到所有触屏手指
1
foreach (var touch in ts.touches) { }
手指按下 抬起 长按 点击
-
获取指定索引手指
1
2
3
4
5
6
7void Update()
{
if (Touchscreen.current != null)
{
TouchControl touchControl = Touchscreen.current.touches[0];
}
} -
按下 抬起
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16void Update()
{
if (Touchscreen.current != null)
{
TouchControl touchControl = Touchscreen.current.touches[0];
if (touchControl.press.wasPressedThisFrame)
{
print("手指按下");
}
if (touchControl.press.wasReleasedThisFrame)
{
print("手指抬起");
}
}
} -
长按
1
2
3
4
5
6
7
8
9
10
11
12void Update()
{
if (Touchscreen.current != null)
{
TouchControl touchControl = Touchscreen.current.touches[0];
if (touchControl.press.isPressed)
{
print("手指按下");
}
}
} -
点击手势
(没有在实际操作里触发,原因不明)
1
2
3
4
5
6
7
8
9
10
11void Update()
{
if (Touchscreen.current != null)
{
TouchControl touchControl = Touchscreen.current.touches[0];
if (touchControl.tap.isPressed)
{
print("手指点击");
}
}
} -
连点次数
这个连点次数是在连续点击(按下抬起)的次数,如果按下太久,按下后拖动,太久没有按下,都会让计数清零
1
2
3
4
5
6
7
8void Update()
{
if (Touchscreen.current != null)
{
TouchControl touchControl = Touchscreen.current.touches[0];
print(touchControl.tapCount.ReadValue());
}
}
手指位置等相关信息
-
位置
1
print(touchControl.position.ReadValue());
-
第一次接触时位置
1
print(touchControl.startPosition.ReadValue());
-
接触区域大小
(没有在实际操作里触发,原因不明)
1
print(touchControl.radius.ReadValue());
-
偏移位置
1
print(touchControl.delta.ReadValue());
-
得到当前手指的状态
注意,这里的手指状态枚举是****
UnityEngine.InputSystem.TouchPhase
,命名空间是****UnityEngine.InputSystem
,而非UnityEngine
的1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35void Update()
{
if (Touchscreen.current != null)
{
TouchControl touchControl = Touchscreen.current.touches[0];
UnityEngine.InputSystem.TouchPhase touchPhase = touchControl.phase.ReadValue();
switch (touchPhase)
{
//无
case UnityEngine.InputSystem.TouchPhase.None:
print("无");
break;
//开始接触
case UnityEngine.InputSystem.TouchPhase.Began:
print("开始接触");
break;
//移动
case UnityEngine.InputSystem.TouchPhase.Moved:
print("移动");
break;
//结束
case UnityEngine.InputSystem.TouchPhase.Ended:
print("结束");
break;
//取消
case UnityEngine.InputSystem.TouchPhase.Canceled:
print("取消");
break;
//静止
case UnityEngine.InputSystem.TouchPhase.Stationary:
print("静止");
break;
}
}
}
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 文KRIFE齐的博客!