iPhone5になってAndroid同様に解像度比率が異なる端末が混在するようになった。AndroidのようにGPUや端末特性が異なる訳ではないので、概ね解像度の対策だけでなんとかなると思うが、まあ面倒くさいことに変わりはない。

スクリーンショット 2012-10-08 23.57.20
面倒くさい事の一つに、NGUIの解像度調整機能が縦(Height)にしか対応していない所がある。具体的に何が起こるのかと言うと、UIRootのAutomaticをOFFにしてから縦を960に設定した状態でiphone5の解像度で表示しょうとすると、縦に合わせて拡大し横の部分が見きれてしまう。これでは、画面の左右に配置したボタンが見えなくなってしまう。

なので、今回はウダサンコウボウさんのNGUIUtilScalableUIRootを使ってみた。

[Unity]NGUIで画面サイズに合わせる(その2) (ウダサンコウボウ)
http://udasankoubou.blogspot.jp/2012/08/unityngui2.html

このアセットは、NGUIが提供しているUIRootに干渉してカメラの高さを調整するらしい。縦横の幅と実際の幅を確認し、それに合わせて縦幅を調整してくれる。使い方もごく単純で、UIRootを配置しているGameObjectにアタッチし、WidthとHeightを設定するだけ。

スクリーンショット 2012-10-08 23.13.09 スクリーンショット 2012-10-08 23.14.06
左:対処していない版(上下は黒帯で潰してる) 右:対処した板

とは言え、これをこうしただけでは画面外のオブジェクトがカメラにうつりこんでしまう。なので結局追加でUIViewportで映るカメラの範囲を再設定したり、Panelのクリッピングで見える範囲を限定したり(これは重いのでパフォーマンスに余裕がある時)、黒帯(半透明を使わず見える必要な部分だけ隠す)を配置する等、ゲーム画面周りを隠したりした方が良いと思う。

[Unity3D][NGUI]セカンダリカメラの位置を表示位置を調整する
http://terasur.blog.fc2.com/blog-entry-195.html

しかし、この手の機能はNGUIが標準でもってそうな気もするが、はて。