Reactive Extensionを使用して、ボタンリストの何番目のボタンが押されたかを知るには
UniRx(Unity用Reactive Extension)を使用して、
カードリストのような画面を作成しようとしています。
個別のボタンであれば、ボタンと対になる処理を書けば良いので、
クリック通知があったらSubscribeに〜する。といった書き方ができますが
リスト構造の場合、ボタンが押されただけではどこのインデックスのボタンが
押されかがわかりません。
.netの新しいバージョンであればObeservableCollectionなどが使えそうなのですが、
Unityでは使用できませんでした。
MVPパターンで作成しているので、
データのやり取りはあくまでModel側がおこない
イベントやアクションなどはView側が受け持って
Model側とView側のやり取りは、Presenter側に書きます。
ですので、どこのインデックスのボタンが押されたかは
View側に書きたいのですが、どのように関連付ければ良いのかがわかりません。
考え方やサンプルソースなどを教えていただけないでしょうか?
追記:IndexOfを使って自分自身を検索するようにしようとしたのですが、
ラムダ式の中で自分自身を渡す方法がわからず。
IObservable<Unit>
のUnitではなく、IObservable<Unit>
を渡したい
/// <summary>
/// ボタンのリスト
/// </summary>
public List<Button> ButtonList = new List<Button>();
/// <summary>
/// ボタンイベント通知リスト
/// </summary>
List<IObservable<Unit>> abc = new List<IObservable<Unit>>();
/// <summary>
/// ボタン通知のハッシュリスト
/// </summary>
List<int> abcHash = new List<int>();
void Start ()
{
abc.Add(ButtonList[0].OnClickAsObservable());
abcHash.Add(abc[0].GetHashCode());
abc.Add(ButtonList[1].OnClickAsObservable());
abcHash.Add(abc[1].GetHashCode());
abc.Add(ButtonList[2].OnClickAsObservable());
abcHash.Add(abc[2].GetHashCode());
abc.Add(ButtonList[3].OnClickAsObservable());
abcHash.Add(abc[3].GetHashCode());
foreach(IObservable<Unit> test in abc)
{
test.Subscribe(
_ => ButtonClicked(abcHash.IndexOf(test自身のハッシュ値を取得したい)))
);
}
}
private void ButtonClicked(int index)
{
Debug.Log("index=" + index.ToString());
}