!!![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}}