2014年1月28日火曜日

Kindle FireHD8.9でデバイス画面の回転で見事にハマる~Unity

画面の論理回転で見事にハマった。なんじゃこれは・・・。
自分の勉強不足の可能性は大アリなのだが、Unity公式でも海外サイトでも有益な情報が見つからない。

■予備知識

論理画面とはLCD内の表示画面の上下左右の向きで、Android、IOS、スマホなどは筐体の向きに応じて論理画面を回転できるようになっている。
(今回は実機にKindle Fire HD8.9を使用)

UnityでもそれらのAPIは用意されており、

Screen.orientation = ScreenOrientation.Portrait;          //縦画面。普通状態
Screen.orientation = ScreenOrientation.LandscapeRight;    //筐体右が上の画面
Screen.orientation = ScreenOrientation.PortraitUpsideDown;//縦画面で逆さま
Screen.orientation = ScreenOrientation.LandscapeLeft;     //筐体左が上の画面

などで、自由に論理画面の向きを変えられる。

ちなみに、

Screen.orientation = ScreenOrientation.AutoRotate

とするとデバイス側で自動的に筐体の傾き検知を行い適切な方向に論理画面を回転する。

の、だが・・・検知閾値があまりに安全よりすぎて、ほぼ垂直付近まで傾けないと反応しない。
KindleのUI等での本体動作はもっと浅い角度で反応するので、UnityのAPI的な問題な気がする。
この閾値を変更できればいいのだが情報が見つからない → できない?
と、いうことから、論理画面制御を自前実装に至る<今ココ。


■何が起こったのか?

【状況】

  • 回転開始~回転完了までに3~4秒かかるときがある(直近の問題点)。
  •  Kindle本体のUI等の非Unity状態では1秒以内にサクサク切り替わる。
  •  コンパイルターゲットのAndroid OS Verに関係するか?
    → 多少発生挙動に変化はあった「気」はするがやはり遅いので解決にならない。
  •  UnityアプリのUpdate()等はキチンと適切な速度で呼び続けられている。
    → アプリ側が一時ハングアップしてるのではない。
  • APIからの戻りが遅いのか?
    → 遅くない。充分早い。

【気が付いたこと】

ハマることほぼ1日。気が付いたことがある。
現在の論理画面状態から、左右いずれかに90度回転するときは常に素早く回転する。
180度回転させるとほとんどの場合遅い(3~4秒)。稀に早い時があるのが罠でわかりにくさ倍増。

なんだこれは・・・むぅ~ん。

Unity API内部で90度回転処理を2回=180度という横着をしていたとしても遅い。
APIで90度回転をこちらから2回叩いたほうが充分速い。

【ちょっとトライ】

実際に論理画面の回転制御の仕方を変えて実験、

  • 180度回転時は一旦90度回し、さらに90度回す。

ように変えてみた。サクサク回転する(笑。
回転速度は実用レベル。

しかし、途中の90度回転画面が一瞬見えてしまうのが問題。



この件がUnity全般で起こりうるのかAndroid系だけなのか、はたまたKindle固有問題なのかは不明。

ちなみにIOSだとIOS内部APIをUnityが叩いてるだけらしい。
となるとなんとなくKindleも叩いてる内部API固有な気もするのだが、Kindle上で非Unityなものではサクサク回転するし・・・。


どうするかなこれ・・・うーん(-_-;



追記:
huluのアプリを見てて気が付いた。

huluのアプリは、


180度回転する時だけ画面をOFFしてる(笑

90度回転は瞬時にできるのでそのまま回してる。
180度のときだけブラウン管のTVのようにLCD画面が「ひゅん」と歪んで消えて、回転後にまた「ひゅん」と表示される。

180度回転は90度回転を2回こちらで叩くとして、とりあえずUnity的なシーン切り替え小技な黒テクスチャで画面を埋める処理を間にかましてみる

一応ごまかせる (笑


が、ホームボタンはテクスチャでは誤魔化せなかった。その為の「ひゅん」動作か・・・。

とりあえずコレでこの180度回転遅い問題は「既知のもの」らしいことを確信した。
Huluアプリはこの問題に間違いなく対策してると思う!

後はこの「ひゅん」動作がUnityでできるのかどうか。Android SDK環境じゃないと叩けないAPIだとちょっと困る。

ないしは似た誤魔化し画面操作が何かないか・・・。







0 件のコメント:

コメントを投稿