Edited at

NGUI3.8 on Unity5 ノウハウまとめ

More than 3 years have passed since last update.

自分自身としてのノウハウなのでこれが正解だなんて言ってないし時と場合による!


開発環境

NGUI3.8

Unity5.0.0p2 (4.6.2 から移行済み)


俺的ノウハウ


  • UIのサイズ調整


    • モバイルように作るのであればUIRootでConstrained On Mobiles に設定すると幸せになれる。

    • 縦横のサイズは想定される最大のサイズの端末にあわせる

    • 基本的にAnchorを設定することで多様なサイズの端末に合わせていく。


      • Set to Current Position 最強説ある



    • ただし、Anchorの動作するタイミングはよく考えること


      • デフォルトでonUpdateだが、1度読み込めばサイズが変わらないようなUIの場合onStartにするなどしないとパフォーマンスに影響有り





  • UILabel


    • Batches(Draw Call)とDepthの関係上、Depthは99999等固定でスクリプト等でまとめると後で管理しやすくBatchesも減らせる

    • Fontは基本的にNGUIのフォントではなくUnityのフォントを使う

    • フォントの装飾としてtextに直接色等指定できる。こんな感じ(※ただしBBcode にチェックを入れる必要あり)


      • [FF0000]Just this text is red.[-]





  • その他


    • Manager的なシングルトンのクラスを定義してUIの最初の描画系は処理しちゃう

    • オブジェクトの子オブジェクトを追加するときはNGUITool.AddChildをなるべく使う




下記はNGUIを本当に始めるときの話

NGUI3.6以降であれば下記のものをみれば問題なく初められる。

ただし、NGUI2.X、NGUI3.6より前のVersionの場合は様々な仕様が異なるようなので要注意


チュートリアル

チュートリアルはNGUIに入っているExampleとにらめっこしながら、

Youtubeの3.6.0 Versionをひと通り見るのがいいと思う。

このチュートリアルを全部理解したら作りたいものはもう大体作れる気がする。


最低限抑えるTips


バグ?謎の挙動について


独自のスクリプト等でPanelをまたいだ時のスプライトオブジェクトの描画順について

Drag&Dropでアイテムを移動した後に、例えばキャンセルボタン等を実装し、元の親オブジェクトに戻したい時がある。

この時NGUIのスクリプトを介さず、オブジェクトの移動を行った場合スプライトの描画順がおかしくなる場合がある。

応急処置として、移動したオブジェクトを

gameObject.SetActive(false);

gameObject.SetActive(true);

とすることで、再度オブジェクトの描画が行われ、意図した通りの描画順になる。

※これに関してはいつか別途まとめる。。。


UIScrollViewにおける動的なオブジェクトの追加とResetPosition

UIScrollViewに動的にオブジェクトを追加したい場合はよくあることだと思う。

何も気にせずオブジェクトを追加していると、どんどんスクロール位置がずれるので、

オブジェクトを追加したあとに一度ResetPositionを行う

参考 http://bribser.co.jp/blog/reset-position/

このとき、ScrollViewのSmoothTweenだかのオブションにチェックをしているとScrollViewの枠から要素が飛び出る。

オフにするとズレない。

また、同じオブジェクトにUIScrollViewとUIGridをつけての制御はしないほうがいい。

UIGridの初期表示位置がどうしてもずれてしまうので、UIScrollViewの子オブジェクトにUIGridのオブジェクトを追加したほうが良い


その他