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

v1.05/1.06で追加した機能
ランキング機能
こちらのnaichiさまの記事を参考にしています。
本当に素晴らしいアセットで、Unity初心者の私でも1時間位でランキング機能を搭載することができてしまいました・・・!
私がしたことといえば、ランキングのデータを格納するデータベースを(提供しているサービスのアカウントを)作り、naichiさまが作成されたアセットをインポートして、デザインを少しいじってみたくらいです。
こんな便利なものがあったら勉強しなくなっちゃいますので困りますね!
いつか、時間かけてアセットの仕組みをちゃんと理解したいと思います。。(するのかなあ)
ちなみに私Twitterでこんなこと言ってたのですが、全くの的外れでした。
PlayerPrefsは、ローカルにデータ保存を行ってくれる仕組みでございました。
なので、オンラインのランキング機能搭載には全く使用できないですね。
ただ、ローカルにデータ保存できるということは、復習機能とかに使えるのでは?と考えているので、時間ある時にチャレンジしようかなと思っています!
時間制限機能
「時間制限つけないとググってズルできちゃうやんけ!みんな満点取ってランキングが満点で溢れたら面白くないじゃん!!」と無駄な心配をしたので、時間制限機能を追加しました。
実際には、あまりランキング登録されなかったので、こんな心配は一切不要でした。
一体何の心配をしてたんですかね(涙)
(登録してくださった方、本当にありがとうございます!!)
時間制限機能の追加にあたっては、こちらのXR-Hubさまの記事を参考にしました。

実際に私が書いたソースコードはこんな感じです。
public float countdowntime = 20.0f; //カウントダウン
public Text timeText; //時間を表示するText型の変数
timeText = GameObject.Find("Canvas/Timelimit").GetComponentInChildren<Text> (); // 時間制限のテキストを取得
private void Countdown()
{
countdowntime -= Time.deltaTime; //時間をカウントダウンする
timeText.text = countdowntime.ToString("F1") + "秒"; //時間を表示する
//countdownが0以下になったとき
if (countdowntime <= 0)
{
string answerText = answerget();
SceneManager.LoadScene("result");
resultmanager.SetJudgeData ("不正解",answerText);
}
}
仕組みとしては、20秒からカウントダウンして、0秒になったら強制的に不正解のデータを渡し、結果画面に遷移するようにしています。
日本語入力&スマホからの入力を可能にする
これには大分苦しめられました。。
Uniryでは、文字入力&取得を可能にする「InputField」というオブジェクトがあり、私も入力式クイズで使用しているのですが、これがWebGLのゲームだとなんと日本語対応していない。。
入力式クイズの答えは全てトランザクションコードかテーブル名なので、日本語入力することはないからまあいいやと思ってたんですが、ランキング機能でも日本語入力できなくなってしまうことや、スマホでのプレイができないことを鑑みると、やはり対応しなければと思いました。
一応Unity公式の方で、javascriptを呼び出すことで日本語入力を可能にするアセットを用意しているのですが、文字入力している間に時間が止まったり、ダイアログが出るなどしてしまうので、なんか思ったのと違う、、、
うーむ、どうしたものかとネットの海を彷徨っていたところ、ついに解決法が記載されているサイトを発見しました。
こちらのkou-yeungさまの記事になります。
UnityのWebGL用IME入力プラグインを公開されています。
なんと、公開されているアセットをインポートしてInputFieldにAddComponentするだけ。
これで日本語入力&スマホ入力が可能になってしまいました。すごい、すごすぎる。。
私はアセットインポートしてAddComponentしただけ、、精進します。
スマホからゲームを実行した時に警告が出ないようにする
地味に気になってたので、こちらも対応しました。
スマホからWebGLを起動した時に出る↓の警告画面ですね。

「UnityのWebGLは携帯からの実行はサポートしてないよ。とりあえず実行したければOK押してね」と書かれてます。
記載の通り、UnityのWebGLは公式にスマホ対応しているわけではないです。
ただ公式に動作を保証していないだけで、動きはします。
容量の大きいゲームだとスマホでは動かないみたいですが、私のクイズゲームはスカスカなので、スマホからでも問題なく動作します。
スマホから動かすことも前提とするならば、上記の警告画面はあまり意味はないです。
なので、この警告消せないかなと思っていたところ、解決法を提示している記事がありました。
こちらのWonderPlanetさまの記事になります。

ゲームをビルドしたら出力される「UnityLoader.js」の記載を一部変更するだけ。
具体的には
{UnityLoader.SystemInfo.hasWebGL?UnityLoader.SystemInfo.mobile?e.popup("Please note that Unity WebGL is not currently supported on mobiles. Press OK if you wish to continue anyway.",[{text:"OK",callback:t}]):["Edge","Firefox","Chrome","Safari"].indexOf(UnityLoader.SystemInfo.browser)==-1?e.popup("Please note that your browser is not currently supported for this Unity WebGL content. Press OK if you wish to continue anyway.",[{text:"OK",callback:t}]):t():e.popup("Your browser does not support WebGL",[{text:"OK",callback:r}])}
の記載を
{t();}
に変えるだけです!カンタン!
おわりに
今回は、SAPクイズゲームの改修報告(v1.05/1.06)について記載しました。
段々Unityのゲーム作成は、過去の叡智をいかにして組み合わせるか、というような様相を呈してきた感があります。。やりたいこと検索したらだいたい誰かが適切な解決法を提示されています。
それだけ沢山の素晴らしい記事・アセットが世に無料公開されていているということですね。ランキング機能なんて、こんな短期間で1から作るのは不可能でした。
クイズゲームの感想・改善点いただければとても嬉しいです!TwitterでもUnityroomコメント欄でもどこでも書いちゃってください!
ここまで読んでいただきありがとうございました。
