首页/ 第 8 章 · 输入系统/ 第 114 课
LESSON 114 · 输入系统

触摸输入与多点触控

触摸输入已掌握。下一课对比新旧输入系统。

⏱ 约 13 分钟📊 难度:入门🗂 第 8 章 · 输入系统📍 第 114 / 300 课
课程进度
114 / 300

🎯本节学习目标

  • 掌握触摸输入基础
  • 掌握多点触控
  • 理解触摸与鼠标的映射

🚀课程导读

手机游戏用触摸操控。本课学习 Unity 的触摸输入 API(电脑上可用触摸模拟或后续真机测试)。

触摸输入基础

Touch 结构。

  1. 【触摸数量】Input.touchCount:当前屏幕上的触摸点数。
  2. 【遍历触摸】for (int i = 0; i < Input.touchCount; i++) { Touch t = Input.GetTouch(i); }
  3. 【Touch 属性】t.position(触摸位置)、t.phase(状态)、t.fingerId(手指 ID)、t.deltaTime。
  4. 【phase 状态】TouchPhase.Began(刚按下)、Moved(移动中)、Stationary(按住不动)、Ended(抬起)、Canceled(取消)。
  5. 【单点点击】if (Input.touchCount == 1 && Input.GetTouch(0).phase == TouchPhase.Began) { 点击处理 }
  6. 【坐标】触摸位置 t.position 与鼠标坐标同体系(屏幕坐标),可转世界/射线。
  7. 【注意】移动端运行时,Input 会同时报告鼠标(模拟),需注意区分(Input.simulateMouseWithTouches)。
💡
触摸的 phase 类似鼠标的 Down/Hold/Up,按状态机处理。

多点触控与缩放

实现双指缩放。

  1. 【检测双指】if (Input.touchCount == 2) { Touch t1 = Input.GetTouch(0); Touch t2 = Input.GetTouch(1); }
  2. 【双指距离】Vector2 prev1 = t1.position - t1.deltaPosition; 用上一帧与当前帧的位置差算距离变化。
  3. 【缩放实现】记录两指距离变化:
  4. float prevDist = Vector2.Distance(t1.position - t1.deltaPosition, t2.position - t2.deltaPosition);
  5. float currDist = Vector2.Distance(t1.position, t2.position);
  6. float delta = (currDist - prevDist) * 0.01f; // 距离增量
  7. camDistance = Mathf.Clamp(camDistance - delta, min, max);
  8. 【双指旋转】同理用两指连线的角度变化控制旋转(进阶)。
  9. 【单指拖动】在 Moved 阶段记录增量移动物体。
  10. 【测试】电脑上用触摸模拟(较新编辑器支持多点触控模拟)或打包到手机测试(第 285 课)。
💡
双指缩放 = 算两指距离变化 → 换算成缩放量。掌握这个公式,移动端交互就有了。

常见错误与排查

错误:触摸没反应?
原因:在电脑上运行没有触摸事件
解决:电脑上触摸事件通常不会触发;用鼠标模拟或真机测试(打包安卓)。

动手练习

课后小任务(做出来才算真的学会)

  • 实现单指点击检测
  • 实现双指缩放相机
  • 说出 TouchPhase 的几种状态

本节小结

触摸输入已掌握。下一课对比新旧输入系统。

完成打卡后,主站会实时更新你的学习进度 🎯

← 上一课鼠标输入(位置/点击/滚轮)