トップ 差分 一覧 ソース 検索 ヘルプ RSS ログイン

unity_ngui_event

[NGUI] ボタンプッシュから他のウィジットを操作


ここでは「独自のSpriteでボタンを作る」「独自のSpriteでProgressBarを作る」で作ったウィジットを元に、
ボタンを押すことでプログレスバーの値を操作する例を説明します。


Button1/Button2がプッシュボタン、ProgressBarがプログレスバーとします。

 イベントを受け取るスクリプトを作成


メインメニューの「GameObject」-「Create Empty」でカラのGameObjectを作成し、Inspectorウィンドウの一番下の「Add Component」で「New Script」を選択。MonoBehaviour派生のスクリプトを作成します。
GameObject名をmainとします。また、割り当てたスクリプトをUIEvent.csとしました。

このスクリプト内で、publicなプッシュボタンのイベント受け取り関数を追加。
関数名を「MyButtonClick1」「MyButtonClick2」とします。以下のように記述。

public void MyButtonClick1() {
  Debug.Log("Button Pushed 1!");
}

public void MyButtonClick2() {
  Debug.Log("Button Pushed 2!");
}

まだ、Consoleにメッセージを出すだけの実装です。

 Button1のイベントを指定


Button1を選択し、InspectorのOn ClickのNotifyに対してmainをドラッグ&ドロップ。

Notifyの下にMethodの選択が出てくるので「UIEvent.MyButtonClick1」を選択します。

これを実行すると、Button1をプッシュすると「Button Pushed 1!」とConsoleに表示されます。

 Button2のイベントを指定


Button1と同じようにイベントを割り当てます。
Button2を選択し、InspectorのOn ClickのNotifyに対してmainをドラッグ&ドロップ。
Notifyの下にMethodの選択が出てくるので「UIEvent.MyButtonClick2」を選択します。

 ボタンイベントよりProgressBarを操作


UIEvent.csをMonoで開き、MyButtonClick1/MyButtonClick2関数でProgressBarを操作する処理を記述します。

   public void MyButtonClick1() {
       GameObject progressBar = GameObject.Find("ProgressBar") as GameObject;
       if (progressBar != null) {
           UISlider slider = progressBar.GetComponent("UISlider") as UISlider;
           if (slider != null) {
               slider.value -= 0.1f;
               slider.value = Mathf.Max(slider.value, 0.0f);
           }
       }
   }

   public void MyButtonClick2() {
       GameObject progressBar = GameObject.Find("ProgressBar") as GameObject;
       if (progressBar != null) {
           UISlider slider = progressBar.GetComponent("UISlider") as UISlider;
           if (slider != null) {
               slider.value += 0.1f;
               slider.value = Mathf.Min(slider.value, 1.0f);
           }
       }
   }

MyButtonClick1関数で、GameObject.Findで対象となるGameObjectを取得(ここでは「ProgressBar」の名前のもの)。
これのコンポーネントである「UISlider」をGetComponentで取得。何がコンポーネントとして存在するかはUnity上のInspectorウィンドウ内に列挙されているのを確認してください。
UISliderのvalueがプログレスバーの位置情報になります。0.0-1.0の間の数値を変更。

UISlider内のメソッドについては、NGUIを開発されている方の

http://tasharen.com/ngui/docs/index.html

のドキュメントを参照。
NGUI 3.0.9ではUISlider.sliderValueと記載されてますが、これはobsoleteでUISlider.valueを使ってくださいとのこと。

MyButtonClick2関数は、UISlider値を加算しているだけの違いです。

これで実行すると、Button1を押すとプログレスバーの値が下がり、Button2を押すとプログレスバーの値が上がるのを確認できます。

 ウィジットを非表示にする


各GameObjectのInspectorウィンドウの一番上のGameObject名の左のチェックボックスのOn/Offで表示を制御できます。
スクリプトでは、

GameObject progressBar = GameObject.Find("ProgressBar") as GameObject;
progressBar.SetActive(false);

として「SetActive」でfalseを指定すると非表示になります。


最終更新時間:2014年01月30日 15時09分25秒