トップ 一覧 検索 ヘルプ RSS ログイン

unity_ngui_eventの変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
!!!ボタンプッシュから他のウィジットを操作
!!![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}}