iOS平台上,增强输入的重力 输入在开启"屏幕旋转锁定"并翻转设备180度后出现轴向反转

引擎版本:UE5.6

测试设备: Iphone 14pro

在iOS平台上,当系统的“方向锁定”功能开启时,增强输入系统提供的重力数据似乎始终基于设备的物理坐标系,而没有根据屏幕渲染方向进行调整。导致当应用以横屏启动,然后用户将设备物理翻转180度时,应用界面会正确地旋转一次并锁定,但此时用于左右倾斜的输入轴会完全反转,因为输入数据没有随屏幕一起“翻转”。

[Attachment Removed]

重现步骤
复现步骤:

1. 开启 iOS 系统的 “竖排方向锁定”(从右上角下拉控制中心)。

2. 保持此状态(Home 键在右),左右倾斜手机。记录重力的原始值。

3. 此时,向屏幕左侧倾斜(面向我的右侧抬起),观察到原始 Y 轴为正值。

4. 向屏幕右侧倾斜(面向我的左侧抬起),我们观察到原始 Y 轴为负值。

5. 现在,将手机物理旋转 180 度(Home 键现在在左侧)。

6. 由于开启了锁定,App 只会翻转一次 以适应新的横屏方向,然后保持锁定。

7. 在此新方向下(Home 键在左),再次向屏幕左侧倾斜(此时是面向我的右侧抬起)。

此时观察到:

- 向屏幕左侧倾斜时,原始 Y 轴的值变为了负值。

- 向屏幕右侧倾斜时,原始 Y 轴的值变为了正值。

输入轴的值没有随着屏幕翻转而翻转,导致玩家的控制方向颠倒。

以下是直接打印了原始的的增强输入和通过PlayerController的GetInputMotionState获取的原始值,以及GetDeviceOrientation获取的设备方向。

手动测量存在误差,并且向上抬(面向我底部抬起)时可能导致旋转所以不会完全抬起。

锁定时,Home在右侧,此时打印GetDeviceOrientation是LandscapeRight

[Image Removed]

系统屏幕方向锁定时,翻转(只能翻转一次,然后就锁定了)

此时Home在左侧,此时打印GetDeviceOrientation是LandscapeRight

上倾斜 | 0,0,1 | -1.57,-1.58,0

下倾斜 | 0.01.0,-1 | -1.56,-1.61,0

左倾斜 | 0,-1,0.01 | 1.65,0.1,-1.56

右倾斜 | 0,1,0.01 | 1.1,-2.8,1.56

平放 | 1,0,0.015 | 0.015,-1.6,0

锁定时,Home在左,此时打印GetDeviceOrientation是LandscapeLeft

上倾斜 | 0.86,0,-0.5 | 0.53,0.07,0

下倾斜 | 0.03,0,1 | -1..53,0.1,0

左倾斜 | 0,1,0 | 0.3,-0.3,1.55

右倾斜 | -0.05,-1,-0.01 | 2.81,3,-1.53

平放 | 1,0,-0.01 | 0.015,0.075,0

锁定翻转,Home在右,此时打印GetDeviceOrientation是LandscapeLeft

上倾斜 | 0.78,0,0.62 | -0.67,-3.07,0

下倾斜 | 0.03,0,-1 | 1.51,-03,0

左倾斜 | 0,-1,0 | 1.5,-1.2,-1.56

右倾斜 | 0,1,0 | 2.97,0.4,1.5

平放 | 1,0,0 | 0,-3,0

不锁定的情况,Home在左,此时打印GetDeviceOrientation是LandscapeLeft

上倾斜 | 0.84,0,-0.5 | 0.56,0.01,0

下倾斜 | 0,0,1 | -1.57,0.09,0

左倾斜 | 0,1,0 | 1.6,-1.4,1.56

右倾斜 | 0,-1,0 | 1.5,1.7,-1.55

平放 | 1,0,0 | 0.01,0.03,0

不锁定的情况,Home在右,此时打印GetDeviceOrientation是LandscapeRight

上倾斜 | 0.84,0,-0.54 | -0.57,3.13,0

下倾斜 | 0.06,0,1 | 1.5,3,0

左倾斜 | 0,1,0 | 2,1,1.57

右倾斜 | 0,-1,0 | 0.7,-2.6,-1.56

平放 | 1,0,0 | 0,3,0

[Attachment Removed]

Hi,

你好,抱歉回复的比较晚,我测试了一下,主要的原因是在开启方向锁定后,收不到系统的屏幕旋转消息(IOSAppDelegate.cpp里的didRotate不会响应),这会导致计算Orientation跟实际不相符。可能要跟苹果开发者沟通一下,看看具体可能是什么愿意。

[Attachment Removed]

好的, 看起来是iOS的机制.

[Attachment Removed]