You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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系统快速实现:

  1. 在场景中创建一个Canvas,然后添加两个Button组件。
  2. 调整按钮的RectTransform,让它们分别覆盖屏幕的左半和右半区域,设置按钮的背景为透明(方便看到游戏画面)。
  3. 在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);
    }
}
  1. 选中左右按钮,在Inspector面板的OnClick()事件中,把Cube对象拖进去,然后选择对应的MoveRight()/MoveLeft()方法即可。

三、注意事项

  • 编辑器测试:Unity编辑器可以用鼠标模拟触摸输入,或者使用Unity Remote工具连接安卓设备进行实时测试。
  • 多指区分:如果需要支持多指操作,可以通过Touch.fingerId来区分不同的触摸点,避免不同手指的输入混淆。
  • 帧率无关:所有移动逻辑记得乘以Time.deltaTime,保证在不同帧率的设备上移动速度一致。

内容的提问来源于stack exchange,提问作者user9262680

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:20:22