- 追加された行はこのように表示されます。
- 削除された行は
このように表示されます。
!!!ボタンプッシュから他のウィジットを操作
!!![NGUI] ボタンプッシュから他のウィジットを操作
ここでは「[[独自のSpriteでボタンを作る|unity_ngui_custom_button]]」「[[独自のSpriteでProgressBarを作る|unity_ngui_custom_progress_bar]]」で作ったウィジットを元に、
ボタンを押すことでプログレスバーの値を操作する例を説明します。
{{ref_image unity_ngui_event_01.png}}
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をドラッグ&ドロップ。
{{ref_image unity_ngui_event_02.png}}
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を指定すると非表示になります。
----
{{lastmodified}}