[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秒