NGUIの使い方 その2~UIRootについて~

NGUIをダウンロードすると、メニューに【NGUI】が追加されます。
NGUI – Creat – 2D UI を選択します。

071201

シーン中のNGUIを管理する本体です。
以降基本的に作成されたNGUIのオブジェクトは、このUI Rootの子になります。

注意する事は、スケーリング。
値を見てもらえば分かりますが、0.0001・・などの1以下の値が入っています。
従って、パーティクルなどをRootのこにする、サイズが意図しない形になります。

NGUIで使用するオブジェクトに、パーティクルを出す場合は、
スケールを考え、専用で用意する必要が出てきます。

こちらも合わせてチェック
=>スケール1以下のパーティクルは、カメラ外に出ると、消滅してしまう

Camera は基本的にNGUIのオブジェクトを専用に写す形になります。

flexible (フレキシブル)
よく分かりません。 むしろ教えてください。
constrained (制約)
画面の大きさに応じて、縦または横の比率を維持したまま、スケーリングされます。
This setting will keep UI look the same on all screen size relative to the width of the screen.
you will be able tu see more or less on the top and bottom sides sides of the screen as the aspect ratio changes.
(この設定は、UIが画面の幅にすべての画面サイズの相対的に同じに見えるし続けます。
あなたはTUが、アスペクト比の変化に応じて画面の上側と下側の側面には、多かれ少なかれを見ることができるようになります。)

実行例
640*960の画面サイズに対し、Width640 height960 を入力。
Width640 にチェックを入れる。

スクリーンサイズ 640*960(比率2:3)

072603

スクリーンサイズ 540*960(比率9:16)

072604

スクリーンサイズ 768*1024(比率3:4)

072605

上記から分かるように、 基準にした比率より、縦長の場合は、上下を追加。
横長の場合は、中央をへらし、左右をピッタリにしています。
アンドロイドなどの複数端末に対応する場合、子の設定+Anchors(アンカー)を使うだけで、実現できるかもしれません。


=>複数端末に対応する方法例

constrained On Mobiles (携帯電話上で制約)
PC上ではflexibleで扱われ、携帯端末ではconstrained になる設定らしい。
Content Width
Content Height
基準となるサイズです。
フルHD(1920×1080)を基準にする場合は、子の半分960*540で作成するなど、
等倍の値を入力しない。
画像大きすぎて、テクスチャが馬鹿にならないので。

レイヤーに相当する機能です。
UIPanel の子のオブジェをまとめて、優先度を管理します。

↑手前に表示(優先度:高)

UIPanel(Depth:10)
┗UIWidget

UIPanel(Depth:1)
┗UIWidget
┗UIWidget

UIPanel(Depth:0)
┗UIWidget

ただし注意として、
共通の画像アトラスを表示していても、
UIPanelを挟むと、ドローコールがその都度発生するので注意しましょう。

この場合は、ドローコール2
UIPanel
┗textureB
┗textureA
┗textureA
┗textureA

この場合は、ドローコール3
UIPanel
┗textureB
┗textureA
UIPanel
┗textureA
┗textureA

この場合は、ドローコール4
UIPanel
┗textureB
┗textureA
UIPanel
┗textureB
┗textureA

Alpha
パネル全体の、透過度です。
0にすると、見た目上消えます。 Animatorで透明度をアニメーション使用とすると、うまくいきません。具体的には、0 => 1 で変化するような挙動をしたり、
そもそも表示されないなど、バグがある様子。
UIWidgetも同じような挙動をするので、
自作のコンポーネントなりを追加して、操作する必要があります。(3.9現在)
 
Depth
Panel同士の優先度設定。
値が大きいパネルほど、前面に表示される。
Clipping
■None
デフォ設定。
画面サイズに一致します。

■Texturemask
テクスチャを使った、マスク機能が使えます。

■Soft Clip
四角形の形状で、マスク効果が得られます。
Render Q
■Automatic
■Start At
■Explicit
Sort Order
Normals
Cull
Sisible
padding
Offset
Static
Panel Tool
071901 071902

スケール1以下のパーティクルは、カメラ外に出ると、消滅してしまう

shuriken particle system not rendering particles when off screen

http://answers.unity3d.com/questions/218369/shuriken-particle-system-not-rendering-particles-w.html

NGUIとパーティクルの相性は、はっきり言ってよくないです。

1.スケーリング
UIRootが0.002とかいう、超絶小さいサイズになっているので、
スケールをあわせないで作ったパーティクルが使えない。
2.表示の優先順位がうまくいかない
共通の一つのカメラを使って表示した場合
パーティクルを手前に出すか、出さないしか出来ない。

具体的には、NGUIでパーティクルを挟めない。

上記を踏まえて、かつパーティクルエミッタのサイズは、
1以下にしてはいけない。

1以下にするとどうなるか。
カメラ外に、パーティクルシステムが出てしまうと、
発生してたものも含めて消えてしまう。

Scene上では、発生している。けど、Game上には表示されない。

どうするか。

方法1
UIRoot外でパーティクルシステムをクリエイト。
UIRoot以下に移動。
パーティクルはスケーリングがかかる(480倍等)
その状態で、UIにきちんと映るように、作成。

NGUIの使い方 その1

Unityにおいての、GUIの実装をおこなうアセットの一つです。
ボタンやスクロールビューなど、一通りの機能が揃っており、 基本的なインターフェイスを作る際には、重宝します。

Unityは画像ファイルを読み込むと、ドローコールというものが発生します。
単純に5枚の画像を読み込めば、ドローコール5です。
ですが、これを1枚にまとめて、表示する範囲をしていして表示すれば、ドローコールは1枚の画像を読んだだけなので、ドローコール1です。
この画像をまとめる機能が導入メリットの一つ。

もう一つが、インターフェイスに必要な基本的な機能が、コンポーネントに存在している。
ボタンのマウスオーバー、マウスアウト、プレスといったことや、
スクロールバーなどが簡単に導入できます。

有料でそこそこ高い
大体1万円です。我慢しましょう。
他のオブジェクト(3Dモデル、パーティクル)との描画順のコントロールが難しい
単純にZ軸を手前に置くだけでは、手前に描画されません。
直感的ではなく、カメラを複数置き、描画を管理する必要もあります。
マスクが使えない
基本的にマスクができません(2015/07/15現在 NGUIver3.9)
限定的なマスクなら使えます。
4.0で使えるようになるとかならないとの話ですが、 使えないと考えておいたほうが良いです。


【Unity】NGUIでマスクによる切り抜き
上記の方法は、アンドロイドの一部端末で機能しないバグが存在しているんので、過信しないように。
=>nexus5では機能しませんでした(筆者体験談)
Unity公式ではない
公式のUIシステムはuGuiと呼ばれ、別に存在しています。

ネガティブなことを羅列しましたが、上記の事柄以外は、大体できます。
開発実績も多く、主流といわないまでも、かなり使われています。

NGUIにはフリー版が存在しています。
が、3.xと比べて使いにくく、練習になるわけでもないので、 使用を考えているのでしたら、おとなしく購入される事をオススメします。

ぐぐれかす というのは簡単ですが、兎にも角にも日本ではまだ情報が少ないので、
作成者のサイト、Unityのフォーラムなどで検索してください。 英語なので、google翻訳なりなんなりで

Tasharen Entertainment Forum
http://www.tasharen.com/forum/index.php
Unity Community
http://forum.unity3d.com/
Unityマニュアル
http://docs.unity3d.com/ja/current/Manual/UnityManualRestructured.html
Unityユーザー助け合い所
https://www.facebook.com/groups/unityuserj/915852115141396/

NGUIの

UIGrid

Arrangement アレンジメント
Horizontal 水平
vertical 垂直
sorting 並べ方
alphabetic アルファベット順に並べる
vertical 垂直
sorting 仕分け
alphabetic アルファベット順
Custom カスタム
Max per Line 行あたりの最大
Cell Width セルの幅
Cell Height セルの高さ
Animate Smoothly スムーズにアニメーション
Hide Inactive 非アクティブを隠す
Keep Within Panel パネル内に保つ

無料版のNGUI2.7 について

ユーザーインターフェイスを作るのに便利なアセット『NGUI』
作者のHPで、ver2.7が無料版として公開されています。

正規版は95ドルとおよそ1万円で、個人ですと考えてしまう値段となっているため、
まずは試用と考えてver2.7をいれて、使ってみると良いのではと思います。

NGUI: Next-Gen UI kit
http://www.tasharen.com/?page_id=140

http://www.tasharen.com/get.php?file=NGUI



ただし、3.xと比べて、随分使いにくいです。
最新3.7(2014/10現在)で出来ることと、2.7の使い勝手が随分違い、かなり使いにくく感じます。

UIPanelを用いた、グループ単位でのプライオリティ管理が出来ない
3.7ですと、UIPanelの子オブジェクトをグルーピングして、Depthの管理が出来ます。
Spriteの子にSpriteを登録できない
子に登録してもプレビュー時に、同じ階層に移動してしまいます。

UNITYでゲーム開発を続けていかれる予定でしたら、購入をオススメします。
2.7のままですと、作業の手間が余計に発生してしまうからです。

AnimationでNGUIのオブジェクトを管理する

NGUIを使用するに当たって、UIWidgetコンポーネントとセットで使うスクリプト。
NGUIWidgetColor.csで保存して使う。
フェードインフェードアウトをアニメーターで行うときに便利。
(参考にしたサイトがあったのだけれど、リンクが分からなくなってしまった)

[php] using UnityEngine; using System.Collections; [ExecuteInEditMode()]//ExecuteInEditModeを使うと編集中も処理を実行可能 public class NGUIWidgetColor : MonoBehaviour { public Color color = Color.white; public UIWidget target = null; void LateUpdate () { if(target == null){ target = this.GetComponent<UIWidget>(); } if(target){ target.color = color; } else{ Debug.LogError("対象のUIWidgetが見つかりませんでした", this); } } } [/php]
コンポーネントイメージ

コンポーネントイメージ