困っている事、相談したい事
あらかじめ作られている、引数無しActionのコールバックに対して、
引数を渡したいが、渡し方が分からず困っています。
コールバックの作りが、添え字以外中身が同じため、
コールバックを一つにまとめてすっきりできないか相談するため投稿しました。
あらすじ
Unityでランキングを扱いたく、PlayFabというBaasを使いました。
ランキングを取得するために下記メソッドを使っています。
PlayFabClientAPI.GetLeaderboardAroundPlayer( request, OnGetCountRanking, OnGetLeaderboardAroundPlayerFailure );
このメソッドの引数を調べたところ、下記のようになっていました。
void PlayFabClientAPI.GetLeaderboardAroundPlayer( GetLeaderboardAroundPlayerRequest request, System.Action<GetLeaderboardAroundPlayerResult> resultCallback, System.Action<PlayFabError> errorCallback, [object customData = null], [Dictionary<string, string> extraHeaders = null] )
実装で定義したコールバックはこのような形にしてあります。
(エラーのコールバックはログを出すだけなので割愛します)
private void OnGetCountRanking(GetLeaderboardAroundPlayerResult result) { foreach (var entry in result.Leaderboard) { RankingsText[0].text = $"Rank:{entry.Position + 1}"; ParamsText[0].text = $"{entry.StatValue}"; } }
動きとしては、ウェブ上のランキングに対してリクエストを渡し、
順位を取得した後、指定のUnityのUI.Textに文字を表示する、といったものになります。
今回の実装では、複数のランキングが存在しており、
ランキング毎に別名のコールバックを定義し、作りは次のようになっています。
private void OnGetStrRanking(GetLeaderboardAroundPlayerResult result) { foreach (var entry in result.Leaderboard) { RankingsText[1].text = $"Rank:{entry.Position + 1}"; ParamsText[1].text = $"{entry.StatValue}"; } }
御覧の通り、OnGetCountRanking
とOnGetStrRanking
の
実装の中身は添え字の数字が違うだけなのです。
(写してない他のランキングも同様の作りです)
最初はコールバックの関数に、新たに引数を追加して
添え字を渡すという風にしたかったのですが、
私自身の理解が及ばず、苦肉の策で新しく別名のコールバックを作ることでごまかしてました。
ただ、これだとコードの可読性も保守のしやすさも悪くなってしまいますし、
どうにかまとめたいと考えています。
そのような解決方法があるのでしょうか?
利用環境
- Unity2020.3.3f1
- PlayFab
回答2件
あなたの回答
tips
プレビュー