CanvasUI(uGUI)システムでは、ユーザの操作をEventで授受する。たとえばButton要素の場合、インスペクタのButtonスクリプト・ブロックの一番下に、OnClick()
という項目がある。ここにOnClick()
イベントを受け取る関数と渡す引数を設定する。
タブの"+"をクリックし、左下の枠にイベントを渡すGameObjectを設定し、右上の枠にイベントを送る関数をドロップダウンリストから設定する。左下は関数に渡す引数で、
- なし
- float
- int
- string
- bool
- Object
のいずれか。最後の"Object"はUnityのほとんどのクラス(たとえばGameObject, Component, Monobehaviourなど)のベースクラスなので、実質的にはほとんどのクラスを引数に指定できる。たとえばTransformや、GameObjectそのものも渡すことができる。
ユーザー定義関数を呼び出すサンプル
たとえば、ボタン要素のクリック時のアクションとして、
1) UIControllerのButtonClick()メソッドに、"CustomButton"というstringを渡す場合:
2) ButtonClick2()に、カメラのTransformコンポーネントを渡す場合:
等というように設定する。
なお、UI要素から呼び出すユーザ定義関数はpublic void
のみ、渡せる引数の個数は0か1であることに注意。
ちなみに受け側の関数は次のようになる。
public void ButtonClick(string name) { Debug.Log("Button "+name+" clicked."); } public void ButtonClick2(Transform cameraTransform) { Debug.Log("Camera Position "+cameraTransform.position); }
その他のイベント
OnClick()
以外のイベントを生成・処理したい場合は、EventTriggerを使う。
イベントを生成したいUI要素を選択し、Component-Event-EventTriggerを選択。
UI要素にEventTrigger
コンポーネントが追加される。Add New Event Type
をクリックして該当するイベントタイプを選択、後はOnClick()
と同様に、イベント受信先のGameObject、イベントを受け取る関数、引数を設定する。
EventTrigger
を使えば自由にEventを生成できる。たとえば、UIImage
要素はデフォルトではイベントを持っていないが、EventTrigger
を使ってOnClick
やPointer Enter
イベントを追加することができる。
参考: