uGUIのUIをキーボードやゲームパッドで操作制御する方法について調べました。
Unityのバージョンは5.0.0f4です。

StandaloneInputModuleについて
 キーやパッドでのUI操作を有効にするためには、
 StandaloneInputModuleコンポーネントが必要で、
 通常はシーン内でメニューからUI要素を作った際に自動的に生成される
 EventSystemにくっついています。
ugui_input_01
InputActionsPerSecond
 ジョイスティックや左右上下キーを倒しっぱなしにした場合に、
 1秒間にリピート判定する回数を指定する。

Allow Activation on Mobile Device
 iOSやAndroid等のモバイルデバイスで
 キー操作を受け付ける場合はチェックする。 

HorizontalAxisVerticalAxisSubmitButtonCancelButton
 縦横操作、キャンセル、決定に使用するのインプットの名称を指定する。 
 
 インプット名称がどのボタン・キーに対応するかは
 InputManagerで設定した値が参照される。
 (メニューのEdit→ProjectSettings→Input)
 デフォルトである程度は設定されていて、
 例えばジョイスティックの0ボタンとキーボードのEnterキーが
 Submitとして登録済なので、これらが決定操作となる。
ugui_input_02

●Selectableについて
 選択可能にしたいUIオブジェクトには、Selectableコンポーネントを付けるか、
 Selectableを継承したButtonSlider等のコンポーネントをつけます。
ugui_input_03
Intaractable
 チェックを外すことで非活性状態にできる。
 この場合、キー操作による選択はできるが決定ができなくなる。

 選択もさせたくない場合はSelectableButtonそのものを無効化する必要がある。
 (スクリプトからenable = falseを指定)
 iOSやAndroid等のタッチインターフェースなら、
 覆いかぶさるようにUIを重ねた場合に後ろのボタンは押せなくなるが、
 パッドやキーの場合は背後に隠れていても操作できてしまうため、対応が必要。

Transition
 通常時、選択中、決定時、非活性時の状態変化を
 色変化、スプライト変更、アニメーションのどれかで指定できる。

Navigation
 キー操作時の移動先指定の種別。
 AutomaticだとUIの位置から自動で設定してくれるが、精度は怪しい。
 移動先に制限をかけたい場合や、隣接していないUIへ飛びたい場合には、
 Explicitにすることで上下左右の遷移先を手動で指定できる。

 Visualizeボタンを押すと、シーン上にUIの遷移矢印が表示されるので、わかりやすい。
ugui_input_04
 UIを選択した状態でSubmitに設定されたキーを押すと、
 Submitイベントが呼び出されます。(Buttonの場合はOnClickも)

●スクリプトからの制御について
 現在選択中の情報はEventSystemコンポーネントが持っていて、
 以下の用に取得できる。 

// 選択中のGameObjectを取得 GameObject go = EventSystem.current.currentSelectedGameObject;
 
 ※この辺のプロパティ情報は何故かAPIドキュメントに載っていないが、
 UIとEventSystemはソースコードが公開されているので困ったときに参照できる。

 スクリプトから選択状態にしたい場合は、
 選択状態にしたいSelectableからSelectメソッドを呼べば選択状態にできる。

// 自分を選択状態にする Selectable sel = GetComponent<Selectable> (); sel.Select ();
 

 逆に、選択状態を解除したい場合には
 EventSystemのSetSelectedGameObjectメソッドでnullを入れれば解除できる。 

// 選択を解除 EventSystem.current.SetSelectedGameObject (null);