こんにちは、ばいおです。
今回は、SAPクイズゲームの改修報告(v1.07)の記事になります。
v1.07では、タイトル画面でNCMB(ニフティクラウド mobile backend)から取得したクイズの正答率を表示するようにしましたので、その実装方法について主に記載します。
記事執筆当時のゲームはこんな感じです(動画です)。
ゲームは以下リンク先よりプレイできます。是非やってみてください!
https://unityroom.com/games/sapquiz
実際にゲームやってみての感想や改善点などがありましたら、ゲームリンク先のUnityroomにコメントを残せるので、是非コメントしてください!泣いて喜びます!
(ランキング機能も実装しているので、是非登録してくださいまし!)
また、クイズゲーム制作についての記事は↓にまとめていますので、あわせてご参照ください!
私がゲーム作成にあたり、勉強に使用したUnity本はコチラ↓
実際にサンプルゲームを作成しながら楽しく学べるので、オススメです!

v1.07で追加した機能
正答率表示機能
冒頭に記載したとおり、タイトル画面に新しくクイズの平均正答率を表示するようにしました。
正答率を表示するためには、まず正解数をデータベースに保持しなくてはいけないので、10問答えた段階でNCMB(ニフティクラウド mobile backend)にデータを送信するようにしました。
こちらの「tama-lab」さまの記事を参考にしています。
クイズ結果を表示するシーンに遷移した時に、自動でNCMBに正答数を送信するようにしています。データベースはこんな感じになっています。

これで、正答数はNCMB上に保持できるようになりました。
後は、ここからデータを引っ張ってくるだけ、、だったのですがこれがなかなか上手く行かず、平均正答率が0%になってしまうという状況になってしまいました。
原因は、恐らくNCMBからデータを取得する前に、画面出力するテキストへデータ取得結果を反映させてしまっていたからだと思います。
この問題を解決するためには、何やら「非同期処理」なるものを理解しなくてはいけない模様。ここで完全にハマりました、非同期処理ムズカシイ、、、
「コルーチン」なるものを使用すればできそうなのですが結局ちゃんと理解できず、とりあえず2秒待つというパワープレイで当座は凌ぐことにしました。
ちなみに2秒待つ処理は、「yield return new WaitForSeconds (秒数);」というコードにより実装しています。
次の改修タイミングまでに非同期処理についての理解を深め、今度は「データが取得できたらそのデータをテキスト表示する」というロジックを実装したいです。
該当部分のソースコードは、ちゃんと上記ロジックが実装できたら公開しようと思います。
v1.09の更新に伴いロジック公開しました!(8/22更新)
ツイート機能&ブログリンク機能
ツイート機能については、こちらのQiita記事を参考にしました。

この記事にあるソースをそのまま使用してしまうと、UnityroomからTwitterのページに遷移してしまうので、別ウィンドウで開かれるように少し手を加えました。
これでクイズゲームの結果を簡単にツイートできるようになりました!
まあ、ツイートしてるの私以外誰もいないんですけどね(涙)
ブログリンク機能については、こちらの「ゲタバコ倶楽部」さまの記事を参照しました。
とてもわかりやすいです。

画面構成とか考え直さないといけないですが、クイズに関連するブログ記事へリンクできれば、もっと勉強になるクイズにできそうな気がします。
実際に書いたソースコードはこんな感じ。
//ブログリンク機能
public void buttonpushb()
{
Application.ExternalEval(string.Format("window.open('{0}','_blank')", "https://yobaioi.com/"));
}
//ツイート機能
public void buttonpusht()
{
int getpoint = resultmanager.getscore();
bool quizflag = inputquestion.inputflagget();
if(quizflag == true)
{
string tweet = "SAPクイズ(入力式)の結果、10問中" + getpoint.ToString() + "問正解でした!\nhttps://unityroom.com/games/sapquiz \n#SAPクイズ";
Application.ExternalEval(string.Format("window.open('{0}','_blank')", "http://twitter.com/intent/tweet?text=" + WWW.EscapeURL(tweet)));
}
else
{
string tweet = "SAPクイズ(4択式)の結果、10問中" + getpoint.ToString() + "問正解でした!\nhttps://unityroom.com/games/sapquiz \n#SAPクイズ";
Application.ExternalEval(string.Format("window.open('{0}','_blank')", "http://twitter.com/intent/tweet?text=" + WWW.EscapeURL(tweet)));
}
}
4択式クイズの結果と入力式クイズの結果とで、条件分岐するようにしています。
おわりに
今回は、SAPクイズゲームの改修報告(v1.07)について記載しました。
今回の改修により、クイズゲームが実際にどのくらい遊ばれているかがわかるようになったので、毎日楽しみにデータベースを見ています。
まだ、クイズ全体の正答率しか表示できていませんが、ゆくゆくは問題ごとの正答率を出したいと思っています。データベースをどのように持つか考えないといけないですね。
クイズゲームの感想・改善点いただければとても嬉しいです!TwitterでもUnityroomコメント欄でもどこでも書いちゃってください!
ここまで読んでいただきありがとうございました。
