AIプログラムとかUnityゲーム開発について

探索や学習などを活用したAI系ゲームを作りたいと思います。

商店UIのフォーカスを移動できるようにする

f:id:yasu9780:20161119224217p:plain

 アイテムのリストをCSVファイルで用意しておいて、商店の商品一覧に表示できるようにしました。1画面に6アイテムごとで、PREV/NEXTボタンでページを遷移できます。
 ゲームパッドでの操作を考えるとフォーカスが必要ですが、初めはフォーカスはありませんでした。

 フォーカスさせたいボタンのSelectableコンポーネントを取得して、Selectするとフォーカスが乗ります。

        item.GetComponent<Selectable>().Select();

 フォーカスされた状態なら、カーソルキーでフォーカスを移動できます。
 TABでは移動しないようでした。
 なお、ゲームパッドを接続している場合は、左アナログスティックでもフォーカスを移動できます。
 対象の入力デバイスは、UnityのInputで登録している情報次第です。
 
 フォーカスを遷移させたいGameObjectを自前のlistで保持しておいて、
 現在のfocusの次をselectするという処理で、TABキーfocus移動もできました。
 ただし、なにか設定すればこのコードはいらないかもしれません。自前だとListの管理なども必要ですし。

        if (Input.GetKeyUp(KeyCode.Tab))
        {
            GameObject goselected = EventSystem.current.currentSelectedGameObject;
            if(goselected==null) goselected = focusTarget[0];
            for (int i=0;i<focusTarget.Count;i++)
            {
                if(focusTarget[i]==goselected)
                {
                    if (i== focusTarget.Count-1)
                        focusTarget[0].GetComponent<Selectable>().Select();
                    else
                        focusTarget[i+1].GetComponent<Selectable>().Select();
                }
            }
        }