带槽口的物理设备上的Unity UI似乎已被奇怪地更改,但是,在带槽口的仿真器(Pixel 3 XL)上,它可以正常工作。 我已经更新到Unity 2019.1.6,尝试进行设置并使用implemented the safe area。
以下是屏幕截图,比较了更改后的UI(物理设备)和预期的UI(模拟器):
我的所有SDKS都是最新的,其中安装最高的是SDK 28。我尝试使用Unity随附的SDK以及通过Android Studio安装的SDK。
以下是“安全区”脚本的代码(来自上面的链接):
using UnityEngine;
public class SafeArea : MonoBehaviour
{
RectTransform Panel;
Rect LastSafeArea = new Rect (0, 0, 0, 0);
void Awake ()
{
Panel = GetComponent<RectTransform> ();
Refresh ();
}
void Update ()
{
Refresh ();
}
void Refresh ()
{
Rect safeArea = GetSafeArea ();
if (safeArea != LastSafeArea)
ApplySafeArea (safeArea);
}
Rect GetSafeArea ()
{
return Screen.safeArea;
}
void ApplySafeArea (Rect r)
{
LastSafeArea = r;
// Convert safe area rectangle from absolute pixels to normalised anchor coordinates
Vector2 anchorMin = r.position;
Vector2 anchorMax = r.position + r.size;
anchorMin.x /= Screen.width;
anchorMin.y /= Screen.height;
anchorMax.x /= Screen.width;
anchorMax.y /= Screen.height;
Panel.anchorMin = anchorMin;
Panel.anchorMax = anchorMax;
Debug.LogFormat ("New safe area applied to {0}: x={1}, y={2}, w={3}, h={4} on full extents w={5}, h={6}",
name, r.x, r.y, r.width, r.height, Screen.width, Screen.height);
}
}
脚本已附加到全屏面板,并且所有UI元素都是该面板的子代。
Kinda感到奇怪的是,它只能在仿真器上运行,而不能在物理设备上运行(而不是物理设备是S8,而仿真器是Pixel 3 XL)。 从错误的屏幕截图来看,这似乎与缺口或Android 9 Pie有关。尽管带有缺口的设备也恰好在运行Pie。