【Unity(C#)】クイズで間違えた問題を記録して復習できる機能を実装(v1.08)【SAP】

Unity

こんにちは、ばいおです。

今回は、SAPクイズゲームの改修報告(v1.08)の記事になります。
v1.08では、クイズで間違えた問題を記録して復習できる機能を実装してみました。

記事執筆時のゲームはこんな感じです(動画)。

ゲームは以下リンク先よりプレイできます。是非やってみてください!
https://unityroom.com/games/sapquiz

実際にゲームやってみての感想や改善点などがありましたら、ゲームリンク先のUnityroomにコメントを残せるので、是非コメントしてください!泣いて喜びます!
(ランキング機能も実装しているので、是非登録してくださいまし)

また、クイズゲーム制作についての記事は↓にまとめていますので、あわせてご参照ください!

v1.08で追加した機能

間違えた問題の復習機能

今回の改修のメインになります、復習機能。

復習機能はUnityのPlayerPrefsという機能を使用することで実現しています。
PlayerPrefsについては、こちらの侍エンジニア様の記事を参照するとわかりやすいです。

【Unity入門】スコアを保存!コピペで終わるPlayerPrefsの実装方法 | 侍エンジニアブログ
この記事では「 【Unity入門】スコアを保存!コピペで終わるPlayerPrefsの実装方法 」といった内容について、誰でも理解できるように解説します。この記事を読めば、あなたの悩みが解決するだけじゃなく、新たな気付きも発見できることでしょう。お悩みの方はぜひご一読ください。

復習機能の実装について簡単にまとめると以下のようになります。

①クイズを間違えた時にPlayerPrefsを使用して間違えた問題に対応するCSVファイル(問題の読み込み元)の行数を保存
②復習機能を起動するときに、保存した行数を呼び出して表示する

int qrow = question.qrowget(); //CSVファイルの行数を取得
PlayerPrefs.SetInt("missrow"+qrow.ToString(), qrow); //行数をキーにして間違えた行数を格納
PlayerPrefs.Save(); //保存

文字にすると簡単そうですが、復習機能用のシーン作成も必要だったので結構時間かかりました。。
しかもその割には地味

復習対象の問題が一問もない場合には、クイズ画面に遷移しないようチェックロジックも作りました。
PlayerPrefsにデータが有るかどうかは、PlayerPrefs.HasKey(“キー項目”)でチェック可能です。

また、間違えた問題を上限なくどんどん記録していってしまうので、復習問題をクリアする機能も実装しました。これはとても簡単で、PlayerPrefs.DeleteAll();と書くだけです。

ポップアップ機能

復習する問題がない場合や復習する問題をクリアした時に表示するポップアップを実装しました。

UIのPanelでポップアップとして出したい図形・文字を作り、ソースコードで予め非表示にしておき、ボタンが押されたらPanelをアクティブにすればよいです。

Panelの中に閉じるボタンを用意し、閉じるボタンが押されたら再びPanelを非表示にするようにしておけば、簡単に表示・非表示にできるポップアップの完成です。

オブジェクトの表示・非表示を切り替えるにはSetActive関数を使えばよいです。

SetActive関数については、こちらの侍エンジニア様の記事がわかりやすいです。

【Unity入門】SetActiveで表示切り替え!よくある疑問も徹底解消! | 侍エンジニアブログ
この記事では「 【Unity入門】SetActiveで表示切り替え!よくある疑問も徹底解消! 」といった内容について、誰でも理解できるように解説します。この記事を読めば、あなたの悩みが解決するだけじゃなく、新たな気付きも発見できることでしょう。お悩みの方はぜひご一読ください。

おわりに

今回は、SAPクイズゲームの改修報告(v1.08)について記載しました。

Twitterにも投稿しましたが、自分のデザインセンスに限界を感じています。

自分で作っておきながらなんですが、全然ゲームが魅力的に見えない><

遂にアセットストアを解禁する時が来たかなと思っています。
使い方イマイチわかってないので際限なく課金しちゃいそうですが。。

クイズゲームの感想・改善点いただければとても嬉しいです!TwitterでもUnityroomコメント欄でもどこでも書いちゃってください!

ここまで読んでいただきありがとうございました。

タイトルとURLをコピーしました