FPS游戏移动端相机旋转异常:多指触摸时自动右偏问题求助
解决移动端双指操作时相机偏移的问题
问题根源在于Unity默认会把所有触摸点的移动合并为鼠标输入,当你用一根手指旋转相机、另一根手指触摸开火按钮或其他区域时,两个触摸点的位置变化会被错误计算成鼠标位移,导致相机偏移。以下是具体修复方案:
核心修复:单独处理旋转触摸点
放弃依赖Unity的触摸转鼠标模拟,直接通过Input.touchesAPI跟踪指定区域的触摸点来处理相机旋转,忽略其他触摸点:
- 添加专门获取触摸旋转输入的方法:
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; }
- 修改原代码的输入获取逻辑:
将原代码中
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
相关产品推荐
相关产品推荐

