VR、ゲーム制作、プログラミング。Unity とか Oculus Rift とか。

2012年6月19日火曜日

[Unity]NGUIのDepth設定

Unity&NGUIはじめました

これまで、フルスクラッチでマルチプラットフォーム対応の2Dゲームエンジンを作ろう!と細々やってきたりしたのですが、多少は動くけどまだまだ時間かかるな、というところで 3D ゲームエンジン Unity とその 2D 用プラグインの一つ NGUI に出会ってしまったのでした。
  • マルチプラットフォーム対応
  • スクリプト言語利用可
  • ネイティブコードも利用可
  • 必要に応じて拡張可
  • 開発するゲームのジャンルにとらわれない
 と、自分で作ろうとしていたものがほぼカバーされてしまっているようだったので、名残惜しい気持もありつつも  Unity&NGUI に乗り換えてみることにしました。

NGUI の Depth 設定

さて、NGUI でスプライト同士の前後関係は通常 UIWidget の Depth で決まるのですが(大きいほど手前)、この順序関係が適用されるのは同一の Atlas を利用したスプライト間だけで、異なる Atlas を利用したスプライト同士では Depth 通りの順序になりません。

異なる Atlas を利用したスプライト同士の順序を決めるためには、Depth ではなく Z 座標を使います(小さいほど手前)。(2012/7/4 追記 : Z 座標の平均値依存という妙な挙動でした。詳細は [Unity]NGUIのDepth設定その2(複数Atlas) に書きました。)

…というのは公式の NGUI Tutorial: Step 2 に普通に書いてあるのですが、NGUI をいじってみる前に流し読みして分かったつもりになっていたので見逃してしまっていました。

ただ、Z 座標を操作すれば異なる Atlas を利用したスプライトを混在させられるものの、Atlas を増やすとその分だけ DrawCall が増える -> モバイルでの動作が厳しくなるようなので、なるべく一つにまとめたほうがよさそうです。

DrawCall を増やさずにリソースを分割したりできるか、逆に何も考えずにひたすら一つにまとめていいのか、などはまだ調査中です。

ちなみに、Atlas 用画像の生成にはテラシュールウェアさんで紹介されていた TexturePacker が便利でした。


2012/7/4 追記 : [Unity]NGUIのDepth設定その2(複数Atlas) を書きました。
2012/7/6 追記 : 体裁など微修正。

0 件のコメント:

コメントを投稿