Unity中如何获取安卓手机等触屏设备的触摸输入?
嘿,很高兴看到你在Unity里开发这款Cube闯关游戏!针对安卓触摸输入的需求,我给你整理了几种常用的实现方案,都是Unity官方支持的,上手很简单:
安卓触摸输入的实现方案
一、直接使用Unity的Input.touches API(最灵活)
Unity提供了Input.touches数组来获取所有当前触摸点的信息,每个Touch对象包含触摸的位置、状态、ID等关键数据。下面是两种常见的控制逻辑:
1. 滑动控制Cube移动(类似摇杆)
适合需要精准滑动方向的场景,代码示例如下(挂载到Cube对象上):
public class CubeTouchMovement : MonoBehaviour { public float moveSpeed = 6f; private Rigidbody _rb; void Start() { _rb = GetComponent<Rigidbody>(); } void Update() { // 检测是否有触摸输入 if (Input.touchCount > 0) { Touch touch = Input.GetTouch(0); // 当触摸滑动时,根据水平偏移量控制移动 if (touch.phase == TouchPhase.Moved) { // 获取触摸的水平方向增量(x轴) float horizontalInput = touch.deltaPosition.x; // 施加水平方向的力(乘以Time.deltaTime保证帧率无关) _rb.AddForce(Vector3.right * horizontalInput * moveSpeed * Time.deltaTime, ForceMode.Force); } } // 保留键盘输入,方便编辑器测试 if (Input.GetKey(KeyCode.D)) { _rb.AddForce(Vector3.right * moveSpeed * Time.deltaTime, ForceMode.Force); } if (Input.GetKey(KeyCode.A)) { _rb.AddForce(Vector3.left * moveSpeed * Time.deltaTime, ForceMode.Force); } } }
2. 屏幕分栏点击/长按控制(类似跑酷游戏)
如果不需要滑动,只想通过点击屏幕左右区域控制Cube方向,可以用这种方式:
public class CubeTapMovement : MonoBehaviour { public float moveSpeed = 5f; private Rigidbody _rb; void Start() { _rb = GetComponent<Rigidbody>(); } void Update() { if (Input.touchCount > 0) { Touch touch = Input.GetTouch(0); // 触摸静止或移动时,根据触摸位置判断方向 if (touch.phase == TouchPhase.Stationary || touch.phase == TouchPhase.Moved) { // 屏幕左半部分点击 → 向左移动 if (touch.position.x < Screen.width / 2) { _rb.AddForce(Vector3.left * moveSpeed * Time.deltaTime, ForceMode.Force); } // 屏幕右半部分点击 → 向右移动 else { _rb.AddForce(Vector3.right * moveSpeed * Time.deltaTime, ForceMode.Force); } } } // 编辑器键盘输入测试 if (Input.GetKey(KeyCode.D)) _rb.AddForce(Vector3.right * moveSpeed * Time.deltaTime, ForceMode.Force); if (Input.GetKey(KeyCode.A)) _rb.AddForce(Vector3.left * moveSpeed * Time.deltaTime, ForceMode.Force); } }
二、使用UI按钮实现触摸控制(新手友好)
如果觉得直接处理触摸API太麻烦,可以用Unity的UI系统快速实现:
- 在场景中创建一个
Canvas,然后添加两个Button组件。 - 调整按钮的RectTransform,让它们分别覆盖屏幕的左半和右半区域,设置按钮的背景为透明(方便看到游戏画面)。
- 在Cube的脚本中添加两个移动方法:
public class CubeButtonMovement : MonoBehaviour { public float moveSpeed = 5f; private Rigidbody _rb; void Start() { _rb = GetComponent<Rigidbody>(); } // 给右按钮绑定的方法 public void MoveRight() { _rb.AddForce(Vector3.right * moveSpeed * Time.deltaTime, ForceMode.Force); } // 给左按钮绑定的方法 public void MoveLeft() { _rb.AddForce(Vector3.left * moveSpeed * Time.deltaTime, ForceMode.Force); } }
- 选中左右按钮,在Inspector面板的
OnClick()事件中,把Cube对象拖进去,然后选择对应的MoveRight()/MoveLeft()方法即可。
三、注意事项
- 编辑器测试:Unity编辑器可以用鼠标模拟触摸输入,或者使用
Unity Remote工具连接安卓设备进行实时测试。 - 多指区分:如果需要支持多指操作,可以通过
Touch.fingerId来区分不同的触摸点,避免不同手指的输入混淆。 - 帧率无关:所有移动逻辑记得乘以
Time.deltaTime,保证在不同帧率的设备上移动速度一致。
内容的提问来源于stack exchange,提问作者user9262680
相关产品推荐
相关产品推荐

