/ kyokomi note / blog

UaalでAndroidのcutoutを調査した

February 11, 2021 [Android | Unity]

Unity as a Libraryでカットアウトの対応をしようとしたら Screen.safeArea で取れる値が全然だめそうだったので少し調査したメモ。

環境

Activity側でdisplayCutoutのboundingRects値を取得

// MainUnityActivity.kt

// onCreateとかで適当に
ViewCompat.setOnApplyWindowInsetsListener(mUnityPlayer) { view, windowInsetsCompat ->
     windowInsetsCompat.displayCutout?.boundingRects?.let {
         Log.d(TAG, "cutout1: ${it.get(0).flattenToString()}")
         Log.d(TAG, "cutout2: ${it.get(1).flattenToString()}")
     }
     windowInsetsCompat
 }

上記を実行したlog

cutout1: 0 342 88 738
cutout2: 2072 342 2160 738

Unity側でScreen.safeAreaを取得

// Hoge.cs

void Update()
 {
     var area = Screen.safeArea;
     var resolition = Screen.currentResolution;
     text.text =
         $"safeArea yMin={area.yMin}, yMax={area.yMax}, xMin={area.xMin}, xMax={area.xMax}\n  currentResolution width={resolition.width}, height={resolition.height}\n";
 }

上記を実行したlog

safeArea yMin=0, yMax=1080, xMin=0, xMax=2160
currentResolution width=2160, height=1080

※ちなみに Screen.cutouts も確認したが値がなかった

結論

Bridge経由でcutoutの値をUnity側に渡してあげて Screen.currentResolution の値を元に描画可能な領域を計算してあげればよさそう。

last modified March 16, 2021

👋 Related posts in the uaal series...