2014年3月13日木曜日

【Unity,NGUI3.x】新しくなったNGUIでボタンを作成する

NGUIバージョンアップが激しすぎて久々に触ったらボタンすら作れなかった。
(たぶん昨年末のv3.0ぐらいでがらっと変わったはず)
悔しいのでちょっと調べました。
そしたら何コレちょー便利!

バージョン

NGUI v3.5.3
Unity 4.3.4f1

参考サイト

http://www.tasharen.com/forum/index.php?PHPSESSID=df10d9532aaf908e31c9b403acdff090&topic=6708

UIButtonについて

※以下適当に翻訳。
Buttonはマウスホバーやクリックイベントを取得し、対象のSpriteの色を変更するために設計されたシンプルなコンポーネントです。
どんなものでもボタンにできます。それはNGUIのwidgetである必要はありません。
Colliderを持つものであれば何にでもButtonコンポーネントを付けることができます。しかしながら一般的にはNGUIのUI階層にあるUISpriteやゲームオブジェクトに付けることが多いでしょう。

ボタンとして動作させるためには、必ずNGUIのUICameraに映す必要があります。また、Physics設定の"Raycast Hit Triggers"がオンになっている必要があります。

ボタンはマウスオーバー・押下・またクリックイベントを受け取り、Targetフィールドに設定したObjectに対して色の変化を提供します。これらは一般的にwidget(Sprite,Label,またはTexture)を対象としますが、ライトやレンダラを持つその他のObjectにも適用できます。

もしクリックにより別のオブジェクトの関数を呼び出したい場合は”Notify”フィールドに対象となるGameObjectをドラッグ&ドロップします。するとドロップダウンリストに
呼び出し可能な関数が表示されるのでそれを選択します。ここに表示される関数はPublicかつ戻り値がvoidの物だけです。

例)
public void MyClickFunction()
{
    Debug.Log("I was clicked!");
}

Tip1(よくわからん)

It's generally a good idea to put the Button component on the same game object as the button's background sprite. Hit ALT+SHIFT+C to quickly create a collider, and check the "Box Collider" option on the sprite so that the box collider auto-updates as you resize the sprite.

Tip2

UIButtonはOnClick通知だけを提供します。もしOnPress, OnHover, OnSelect, OnDoubleClick など、より高度な通知を行いたければUIEventTriggerコンポーネントを使用してください。

実際にやってみた

・NGUIのアセットをImport
・適当なScene作成
・MainCamera削除
・NGUI->Create->Sprite

・適当に入ってるAtlasとSpriteを選択。
 ここではサンプルのFantasyAtlasとBrightスプライトを選択。
 会わせてSlicedSpriteに設定。

・HierarchyウィンドウでSpriteを選択したまま、NGUI->Attach->Collider
・HierarchyウィンドウでSpriteを選択したまま、NGUI->Attach->Button Script

これだけでボタンになった。

あとはイベントの捕捉。
・下記みたいな適当なスクリプト作成(なんでもいい)
using UnityEngine;

public class TestScript : MonoBehaviour
{
  public void Test_OnHoverOver () { Debug.Log ("Test_OnHoverOver"); }
  public void Test_OnHoverOut () { Debug.Log ("Test_OnHoverOut"); }
  public void Test_OnPress () { Debug.Log ("Test_OnPress"); }
  public void Test_OnRelease () { Debug.Log ("Test_OnRelease"); }
  public void Test_OnSelect () { Debug.Log ("Test_OnSelect"); }
  public void Test_OnDeselect () { Debug.Log ("Test_OnDeselect"); }
  public void Test_OnClickOrTap () { Debug.Log ("Test_OnClickOrTap"); }
  public void Test_OnDoubleClickOrTap () { Debug.Log ("Test_OnDoubleClickOrTap"); }
}
・適当なGameObjectを作って上記スクリプトを追加
・ボタンとなったSpriteのUIButton->Notifyに上記GameObjectをドラッグ
・ドロップダウンにメソッド一覧が現われるので好きなの選択

これだけでイベント拾えるようになりました。

クリック以外を拾いたい場合は
・UIButtonを付けたGameObjectに
 AddComponent->Event Trigger
あとは同じ。


これは使いやすいわ…

Unity系記事まとめ

スポンサーリンク

Related Posts Plugin for WordPress, Blogger...