Sir_wp 2023-05-15 14:21 采纳率: 33.3%
浏览 25

unity 刘海 适配 safeArea取不到值

Unity.safeArea.y 一直是0 安卓的刘海屏,这是为什么

  • 写回答

1条回答 默认 最新

  • Leodong. 2023-05-15 14:47
    关注

    该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
    Unity的safeArea属性用于获取屏幕的安全区域(包括屏幕边缘的安全区域和刘海屏的安全区域),以便进行UI适配。在安卓的刘海屏上,由于刘海区域被视为安全区域的一部分,因此可以通过safeArea属性来获取刘海屏的安全区域,然后进行UI适配。

    Unity的safeArea属性在Unity 2017.2及更高版本中引入,可以在iOS和安卓设备上使用。但是,在某些安卓设备上,可能无法正确获取刘海屏的安全区域,导致safeArea.y始终为0。

    这可能是由于安卓设备的不同导致的。有些设备可能没有正确实现safeArea属性,或者在获取安全区域时存在一些限制。您可以尝试使用设备的特定API来获取安全区域,例如DisplayCutout.getSafeInsetTop()方法,该方法返回刘海屏的安全区域顶部的高度。

    以下是一个示例代码,用于获取安卓设备上的刘海屏的安全区域:

    #if UNITY_ANDROID && !UNITY_EDITOR
    using UnityEngine.Android;
    #endif
    
    ...
    
    Rect safeArea = Screen.safeArea;
    #if UNITY_ANDROID && !UNITY_EDITOR
    if (Permission.HasUserAuthorizedPermission(Permission.ExternalStorageRead))
    {
        // 获取 DisplayCutout 对象
        AndroidJavaObject displayCutout = Screen.currentResolution.Call<AndroidJavaObject>("getCutout");
    
        if (displayCutout != null)
        {
            // 获取刘海屏的安全区域
            int top = displayCutout.Call<int>("getSafeInsetTop");
            safeArea.y += top;
            safeArea.height -= top;
        }
    }
    #endif
    
    // 在此处使用 safeArea 进行 UI 适配
    

    注意,上述代码需要您的应用程序在AndroidManifest.xml文件中声明读取外部存储的权限(即<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />),并且需要用户在应用程序启动后授予该权限。

    希望这些信息能帮助您解决问题。


    如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

    评论

报告相同问题?

问题事件

  • 创建了问题 5月15日

悬赏问题

  • ¥100 三相直流充电模块对数字电源芯片在物理上它必须具备哪些功能和性能?
  • ¥30 数字电源对DSP芯片的具体要求
  • ¥20 antv g6 折线边如何变为钝角
  • ¥30 如何在Matlab或Python中 设置饼图的高度
  • ¥15 nginx中的CORS策略应该如何配置
  • ¥30 信号与系统实验:采样定理分析
  • ¥100 我想找人帮我写Python 的股票分析代码,有意请加mathtao
  • ¥20 Vite 打包的 Vue3 组件库,图标无法显示
  • ¥15 php 同步电商平台多个店铺增量订单和订单状态
  • ¥17 pro*C预编译“闪回查询”报错SCN不能识别