NGUI ボタン操作時に実行される関数をスクリプトで決定する方法
NGUIでボタンが押された時に呼び出される処理はインスペクタ内「UIButton(Script)/On Click」「UIEvent Trigger(Script)」の各イベントに対応したNotifyに関数を記述したスクリプトをアタッチしたゲームオブジェクト(な、長い……)をセットし、ドロップダウンから対応関数を選択することで決定する。
参考ページ:http://naichilab.blogspot.com/2014/03/unitynguingui.html
とはいえボタンが増えてきたり、似たような処理のボタンを複数作る場合、ひとつひとつ手作業で設定していくのはめんどいしミスしそうだし美しくない。
のでスクリプトから設定する方法。
// 生成するボタンのプレハブ. public GameObject uiButtonPrefab; // プレハブをインスタンス化したゲームオブジェクト. private GameObject btnObj; void Start () { // プレハブから実際にボタンを生成(インスタンス化)し、そのゲームオブジェクトを取得する. btnObj = (GameObject)Instantiate(uiButtonPrefab); Vector3 tVec = new Vector3(50.0f, 25.0f, 50.0f); btnObj.transform.localScale = tVec; // クリック/ダブルクリックを取得したいのでプレハブにはEventTriggerをアタッチしてある. // EventTriggerコンポーネントを取得する. UIEventTrigger uiEveTrg = btnObj.GetComponent<UIEventTrigger>(); // ボタン操作時に呼び出したい関数が記述されているスクリプトを取り出す。同じオブジェクトにアタッチされているSelectedUnitProcessというコンポーネントを取得する. SelectedUnitProcess sup = thisObj.GetComponent<SelectedUnitProcess>(); // EventDelegateからアクションに対応した関数を設定する。*.Addだと既存リストへの追加、*.Setだと置き換えになる……らしい. // 引数は「*.[対応したアクション], [呼び出したい関数名]」. // 関数だけだと同じスクリプトから、「コンポーネント.関数名」だと指定したコンポーネント(スクリプト)内の関数が呼び出される. EventDelegate.Set(uiEveTrg.onClick, sup.Test_OnClickOrTap ); }
参考ページ:http://narudesign.com/devlog/unity-ngui-eventdelegate/