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

FPS游戏移动端相机旋转异常:多指触摸时自动右偏问题求助

解决移动端双指操作时相机偏移的问题

问题根源在于Unity默认会把所有触摸点的移动合并为鼠标输入,当你用一根手指旋转相机、另一根手指触摸开火按钮或其他区域时,两个触摸点的位置变化会被错误计算成鼠标位移,导致相机偏移。以下是具体修复方案:

核心修复:单独处理旋转触摸点

放弃依赖Unity的触摸转鼠标模拟,直接通过Input.touchesAPI跟踪指定区域的触摸点来处理相机旋转,忽略其他触摸点:

  1. 添加专门获取触摸旋转输入的方法:
private float GetTouchLookInput(string axisName)
{
    // 遍历所有触摸点,只处理左半屏的触摸(可根据你的UI布局调整区域范围)
    foreach (Touch touch in Input.touches)
    {
        // 限制旋转操作仅在左半屏触发,右半屏触摸交给开火等功能处理
        if (touch.position.x < Screen.width / 2)
        {
            if (axisName.Equals("Mouse X", StringComparison.OrdinalIgnoreCase))
            {
                return touch.deltaPosition.x * LookSensitivity * 0.01f;
            }
            else if (axisName.Equals("Mouse Y", StringComparison.OrdinalIgnoreCase))
            {
                float input = touch.deltaPosition.y * LookSensitivity * 0.01f;
                return InvertYAxis ? -input : input;
            }
        }
    }
    // 无符合条件的触摸点时返回0
    return 0f;
}
  1. 修改原代码的输入获取逻辑:
    将原代码中
float i = isGamepad ? Input.GetAxis(stickInputName) : Input.GetAxisRaw(mouseInputName);

替换为:

float i = isGamepad ? Input.GetAxis(stickInputName) : GetTouchLookInput(mouseInputName);

辅助优化:隔离UI触摸事件

确保开火按钮等UI元素使用Unity的EventSystem(比如UGUI按钮),这样UI区域的触摸会被系统拦截,不会被误判为旋转输入。如果是自定义触摸检测,也要在检测开火时过滤掉旋转区域的触摸点。

额外提示

  • 可根据游戏实际布局调整旋转区域的范围(比如左70%屏幕),确保和开火等操作区域完全分离
  • 测试时重点验证多触摸点场景,确认旋转和开火操作互不干扰

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 15:09:14