質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

1回答

693閲覧

If分の条件定義の仕方が分かりません。

KS0209

総合スコア1

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2020/09/06 05:11

編集2020/09/10 17:50

前提・実現したいこと

超初心者です。
C#,Unity,PlayFabを使っています。

プレイヤーに最初に”職業を選ぶ”ボタンを押して職業を選ばせる。
職業を選んだプレイヤーの画面上からは”職業を選ぶ”ボタンを隠し、
代わりに”ダンジョンへいく”ボタンを表示したい。

発生している問題・エラーメッセージ

どのように変数を定義するのか分からない

エラーメッセージ

該当のソースコード

void GetOccupationStatistics()
{
PlayFabClientAPI.GetPlayerStatistics(
new GetPlayerStatisticsRequest(),
OnGetStatistics,
error => Debug.LogError(error.GenerateErrorReport())
);
}

void OnGetStatistics(GetPlayerStatisticsResult result)
{
Debug.Log("Received the following Statistics:");
foreach (var eachStat in result.Statistics)
Debug.Log("Statistic (" + eachStat.StatisticName + "): " + eachStat.Value);
}

C#```
ソースコード

### 試したこと 職業を選択したときは、PlayFab上のStatistic ”Occupation”の値が 0から1にUpdateされるようにして、if文でStatisticを取得して、Occupation 1の場合、 SetActive(true); SetACtive(false); 等とすることで実現したいのですが、条件設定の方法がわかりません。 OccupationのStatisticを1にするところまではできています。 if分をどのように書けばいいかが分かりません。 ### 補足情報(FW/ツールのバージョンなど) Unity C# PlayFab

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

1T2R3M4

2020/09/06 05:44

OnGetStatistics の中身はどうなっているのでしょうか。
KS0209

2020/09/07 02:26

ご返答ありがとうございます。 質問本文に追記致しました。   不備があり申し訳ありません。
AtsushiYonenaga

2020/09/09 09:24

質問本文が、少し読みにくいですね…… 「ここにより詳細な情報を記載してください。」「ここに問題に対して試したことを記載してください。」といったメッセージは、回答者ではなく質問者であるあなたへのメッセージですので、質問投稿前に削除した方が読みやすいです。 また、ソースコードは「バッククオーテーション3つ」の間に挟まるようにして、インデントが反映されるようにすると読みやすいです。
KS0209

2020/09/10 17:49

ご指導有難うございます。   回答までして頂き、本当に頭が上がりません。 改善していきます。
guest

回答1

0

ベストアンサー

PlayFabを使ったことはありませんが、詰まっているところはC#の一般的な問題だと思いますので、回答させていただきます。

考え方
OnGetStatisticsメソッド内の仮引数であるresultの中には、プレイヤーが職業を選んだかどうかを表現するOccupationと言う値が格納されているものだと思います。また、resultの中にはOccupation以外の値も格納されていると思います。

ですので
0. resultの中から目的のOccupationの値を取り出す
0. Occupationの値が1であるかどうかを調べる
と言う2段階の処理が必要でしょう。

実際のコード

OnGetStatisticsメソッド内のforeachを見ると、すでに

C#

1eachStat.StatisticName

と言うコードがあり、これでStatisticsの名前が取得できることがわかりますね。

つまり

C#

1if(eachStat.StatisticName == "Occupation")

と言う記述で、現在のeachStatがOccupationの値かどうか調べることができるのではないでしょうか。

現在のeachStatがOccupationであることがわかれば

C#

1if(eachStat.Value == 1)

などとして、Occupationの値が1かどうか調べることができるでしょう。
Valueのデータ型によっては

C#

1if(((Int)eachStat.Value) == 1)

などとする必要があるかもしれません。

上記の2つのコードを合わせると

C#

1foreach (var eachStat in result.Statistics) { 2 if (eachStat.StatisticName == "Occupation") 3 if (((Int)eachStat.Value) == 1) 4 // 職業選択済みだった場合の処理 5}

というようなコードになるのではないかと思います。(実際にコンパイルはしていないので動かないかもしれませんが、適宜デバッグを行なってください)

補足

PlayFabのStatisticsは、プレイヤーの統計情報を扱うための機能ではないでしょうか?
ゆくゆくは、プレイヤーやキャラクターの状態を管理するのに別の仕組みを使うことを検討した方がいいかもしれません。

画面遷移の制御のような細かい部分に使う変数を、統計情報の直下に横並びで全部入れるような設計だと、近いうちに管理が難しくなることが予想されます。

投稿2020/09/09 09:44

編集2020/09/09 09:48
AtsushiYonenaga

総合スコア116

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KS0209

2020/09/10 17:46

有難うございます。 まさにその点を悩んでおりました。 本当にありがとうございます。   また、別の仕組みを検討する必要性についてまでアドバイスを頂き有難うございます。   まずはPlayFabの参考書を読んで、全体でどのような仕組みを持っているかを勉強するほうが遠回りなようで近道になるということに気づけましたので、勉強を致します。   本当にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問