当前位置: 首页 > news >正文

Unreal触屏和鼠标控制旋转冲突问题

Unreal触屏和鼠标控制旋转冲突问题

  • 鼠标控制摄像机旋转
    • 添加Input轴
    • 计算旋转角度
    • 通过轴事件控制旋转
  • 问题和原因
    • 问题
    • 原因
  • 解决办法
    • 增加触摸控制旋转代码
    • 触屏操作下屏蔽鼠标轴响应事件

鼠标控制摄像机旋转

通过Mouse X和Mouse Y控制摄像机旋转。

添加Input轴

在这里插入图片描述

计算旋转角度

通过移动像素和摄像机FOV角计算像素移动范围和角度之间关系
在这里插入图片描述

通过轴事件控制旋转

在这里插入图片描述

问题和原因

问题

调试完鼠标控制没有问题的情况下,通过触摸屏旋转则会出现不受控制的乱转问题。

原因

Windows系统会将触摸事件模拟为鼠标事件,这样软件不需进行特殊的触摸屏适配,也可以在触摸屏下进行简单的单指交互操作。
造成触摸屏下出现旋转控制乱转的原因就是Mouse X和Mouse Y轴事件的计算机制。
鼠标在Mouse Pressed状态下,Unreal会锁定鼠标,每次移动鼠标后会把鼠标拉回到按下位置。Unreal在计算Mouse X和Mouse Y轴的Axis Value值时只需要计算当前鼠标位置和按下状态的鼠标位置差值,即可算出Axis Value。

AxisValueX = MouseLocation.X - PressedLocation.X
AxisValueY = MouseLocation.Y - PressedLocation.Y
# 以下操作不需要,Unreal会将鼠标位置自动拉回按下位置
# PressedLocation = MouseLocation

但在触摸屏状态下,这个机制就有问题了。Unreal可以把系统鼠标拉回到按下位置,但触摸屏模拟的鼠标位置是没有办法拉回的,触摸屏模拟的鼠标位置始终位于手指头的下方。这样,计算出来的AxisValueX 和AxisValueY 值就会变得异常的大,导致控制旋转不受控制,旋转异常快或反转(可能旋转超过360°导致看起来倒转了)

解决办法

解决办法就是将触摸事件和鼠标事件分开出来

增加触摸控制旋转代码

在这里插入图片描述
通过一个Bool数组记录十指的状态,在通过一个Vector3数组记录十指的位置,计算在指头按下状态下对应指头的移动距离计算旋转角度。

触屏操作下屏蔽鼠标轴响应事件

增加触摸操作蓝图并不会导致Windows系统自动停止模拟触屏为鼠标事件。需要我们修改Mouse X和Mouse Y鼠标轴事件,增加判断是否为触摸屏模拟的鼠标事件,如果是,则不处理
在这里插入图片描述
根据记录的十指状态判断是不是触屏操作

在这里插入图片描述
如果是,则屏蔽鼠标轴事件处理代码。

http://www.lryc.cn/news/310307.html

相关文章:

  • Vins-Moon配准运行
  • MSCKF3讲:后端理论推导(上)
  • 群控代理IP搭建教程:打造一流的网络爬虫
  • 【IO流系列】字符流练习(拷贝、文件加密、修改文件数据)
  • 华为云磁盘挂载
  • 通过大语言模型理解运维故障:评估和总结
  • SVN教程-SVN的基本使用
  • 【MySQL】数据查询——DQL基本数据库查询
  • 机器人持续学习基准LIBERO系列9——数据集轨迹查看
  • uniapp中canvas的基础使用
  • 中科大计网学习记录笔记(十七):拥塞控制原理 | TCP 拥塞控制
  • 老隋蓝海项目有人盈利的吗?怎么做比较好些呢?
  • 递归与递推(蓝桥杯 c++)
  • ArduinoTFTLCD应用
  • 《秦时明月》IP新高度:与陕西历史博物馆共同书写文化传承新篇章!
  • 2、事件机制、DOM操作、jquery对尺寸操作、jquery添加和删除
  • YOLOv6-Openvino和ONNXRuntime推理【CPU】
  • C语言:结构体(自定义类型)知识点(包括结构体内存对齐的热门知识点)
  • springboot240基于Spring boot的名城小区物业管理系统
  • Day13:信息打点-JS架构框架识别泄漏提取API接口枚举FUZZ爬虫插件项目
  • AJAX 学习笔记(Day1)
  • leetcode 740.删除并活得点数
  • 寻找峰值[中等]
  • 【ESP32 IDF】key按键与EXTI中断
  • Find My运动相机|苹果Find My技术与相机结合,智能防丢,全球定位
  • 零拷贝技术深入分析
  • Android 基础入门 基础简介
  • HUAWEI 华为交换机 配置基于VLAN的MAC地址学习限制接入用户数量 配置示例
  • 编程笔记 Golang基础 042 文件处理
  • linuxlsof详解