Unity SafeArea 在不同的起始轮换之间不一致

Posted

技术标签:

【中文标题】Unity SafeArea 在不同的起始轮换之间不一致【英文标题】:Unity SafeArea is inconsistent between different starting rotations 【发布时间】:2021-11-17 05:45:40 【问题描述】:

我正在尝试制作一个脚本,用于在设备旋转时调整 Canvas 的 SafeArea。我已经让它几乎可以工作了,它在启动时看起来很棒,但是旋转后我得到了一个我无法理解的奇怪结果:SafeArea 会有所不同,具体取决于应用程序是以纵向模式还是横向模式启动.

例如,当我在 iPhone 12 Pro 上注销 Screen.safeArea 的值时,我得到以下值:

发布时的纵向:(x:0.00, y:102.00, width:1170.00, height:2289.00) 纵向旋转为横向:(x:0.00, y:102.00, width:2532.00, height:927.00) 发布时的风景:(x:141.00, y:63.00, width:2250.00, height:1107.00) 横向旋转为纵向:(x:141.00, y:63.00, width:888.00, height:2469.00)

宽度/高度值在旋转时会发生变化,这是有道理的,但 X/Y 偏移量不会。鉴于 iPhone 12 的特殊性质,这意味着当以纵向启动并旋转到横向时,顶部有一个很大的空白区域,但会溢出到侧面的凹槽,而当以横向启动并旋转到时,两侧会有很大的空白空间纵向但溢出缺口到顶部。

这是预期的行为吗?我会认为“纵向启动”和“旋转到纵向”安全区域应该是一样的,对吧?有没有办法强制刷新安全区域或其他东西,以获得正确的 X/Y 值?还是我误解了这应该如何工作?

【问题讨论】:

我不确定它是否仍然存在,但显然这是Unity Bug。在这篇文章中提到了几次。 【参考方案1】:

正如我在评论中提到的,我相信这是您使用的 Unity 版本中的一个错误。不过好消息!根据this bug report,已在2020.1.X, 2018.4.X and 2019.3.X 中修复。如果您已经在其中一个版本中,则可能是该错误已返回。如果是这种情况,我会尝试列出的替代版本之一。如果列出的版本都不起作用,您应该报告该错误已回归。

【讨论】:

我在2020.3.4工作,所以听起来好像又回来了。这令人沮丧,但感谢您的提醒! @Nrrolken 如果您查看错误报告的 cmets,另一位用户谈论它是 2020 年的一个问题。他们似乎有某种形式的解决方法/解决方案。 错误报告中发布的解决方法似乎误解了用户将安全区域转换为 UGUI 画布的位置。而在这种情况下,我相信@Nerrolken 是在直接谈论 Screen.safeArea 的值。

以上是关于Unity SafeArea 在不同的起始轮换之间不一致的主要内容,如果未能解决你的问题,请参考以下文章

unity屏幕适配

如何在不使用 SafeArea 的情况下检查设备是不是有缺口?

在跨平台原生 Swift 应用程序中计算 SafeArea 常量

在具有不同坐标轴的系统之间转换欧拉角(Unity 和 Threejs)

Unity中的环境变量在开发和生产之间有所不同

在屏幕底部和安全区域之间颤动位置小部件