最近、韓国語を簡単に暗記できるクイズゲームアプリを作りまして。
製作期間は3日程度ですが、ビジュスクの中身がかなーり詰まっているので、備忘録がてら解説させていただきます。
解説内容は端折りまくっています。かなーり上級者向けです。
初心者の方はUnityパッケージを無料配布してるので、それをそのまま使うなり、いじくりまわすなりしてください。
【配布】クイズゲームのUnitypackage
過去に作ったゲームに関しては全て、「ビジュメル」登録のプレゼント特典としてUnityPackageを無料配布しています。「使用ユニットやフローだけ」丸コピしていいです。許可します僕が。
(そのままリリースゲームに使うことや、二次配布はNGで)
ビジュアルスクリプティングを極めてゲームリリースまで導くメルマガ「ビジュメル」は下記URLからどうぞー。
メルマガ登録はこちら>>
完成系
クイズゲームに必要な大まかな機能は大体そろえています。
・CSVデータ取り込み
・ランダム出題
・答え合わせ
・次の問題の出題
・解いた問題数のセーブ機能
・クイズ問題一覧の表示
・キャラのかわいいアニメーション
・(そういえば正誤判定作ってねぇなぁ、IfとEqualをうまく使って実装してね)
CSVデータを取り込み、問題文と答えをリスト化
↑問題文CSVの読み込みとリスト化までのノード一覧
まずは問題文の用意からいきましょうか。
まずは問題文・答えが並んだデータを、エクセルやスプシで作りましょう。
ほんでCSV出力して、Unityにインポートします。
さてこのCSVデータの読み込み方なんですが、「Text Asset Tostring」っていう、ここでしか使わないマイナーユニットを使います。
これはCSVみたいなテキストデータを、String(文字列)型にしてくれるやつです。CSVデータをUnityで使いやすくする橋渡し役みたいなもんですな。
こいつを改行でSplitして、1列1列をリストのアイテムにして取得します。
Separatorには、Stringの「(改行)」が入っています。ここ結構ミソですね。これにより
「問題文, 答え(改行)問題文, 答え(改行)問題文, 答え(改行)問題文, 答え」
という文字列データが、
「問題文, 答え」
「問題文, 答え」
「問題文, 答え」
というリストデータに変わりました。便利よかねぇ。
↓続き
じゃあSplitしてできたリストデータをどうするかっちゅう話なんですが、
このリストデータをForEachにかけます。
ForEachは、リストデータ一つ一つに対してBody以下の処理を行うユニットです。
For文とかでも代用できるんだけど、それだと問題数リストの大きさが増えたり減ったりしたとき対応できないんですよね。なのでForEach使っています。
さて、そんなリストデータ一つ一つ「問題文, 答え」に対して
まーた「,」でSplitします。
これは問題文と答えを切り分けているんですね。
出てきた問題文・答えのリストは、それぞれ別のリストにAddする形で一時保存しています。
問題をランダムに選択し、テキストとして出題
↑問題をランダムに選択し、テキストとして出題の全体像
それじゃ、問題文と答えも準備できたことですし、早速出題しましょう。
大まかな流れとしては、ランダムな数字(乱数)を作って、問題文・答えリストの中の「乱数」番目を取得します。でてきた問題文・答えデータをSetTextにぶち込む感じです。これで出題できます。
最初に、乱数を生成します。
乱数の最小値は0(リストの1番目)ですね。
乱数の最大値は、問題文リストの個数分ですね。GetCountを使って、リストの合計数を出力しています。(無意味に0を足してありますが、気にせんといてください。)
『なんで乱数の最大値を「問題文リストの個数分」にしてんの?ややこしいことすんなよ舐めてんの?』
という声が彼方から聞こえてきますが、理由は簡単です。拡張性があるからです。
CSVの問題文データが増えても、いちいちここにきて最大値をを変更しなくて済みます。
乱数をつくったら、GetItemで問題文・答えの「乱数」番目の値を取得します。
それをSetTextにぶちこむことで!
問題文と答えがテキストとしてゲームに表示されるのですね!
Findでゲームオブジェクトを探して、SetTextに入れています。横着ですねー。
(このゲームオブジェクトの取得方法は楽っちゃ楽ですが、大規模な開発には向いてないので、よいこはマネしないでね。)
「解いた問題数」に1加算してセーブする
数字や文字列など、なにかセーブしたいデータがあれば、セーブ変数を使います。
allStudyWordCountという変数を用意しておき、この変数自身に1を加え、改めて変数をセットします。
IntやFloatみたいな数字データを、String(文字列)型に変換し、SetTextユニットにつないでいます。
「答えを見る」ボタンを押した後の処理
答えを見るボタンを押した後にやってる処理を解説します。
・SetColorでボタンの色変更+透明化
・「答えを見る」ボタンのテキスト部分の非表示
・左下のキャラの「チラッ」画像を表示、アイドル状態の画像を非表示
・「ボタンを押しているかどうか」を検知するBool変数をTrueにする。
特に解説することはない、シンプルな処理です。
「答えを見る」ボタンを離したときの処理
答えを見るボタンを離した後は、
前章の『「答えを見る」ボタンを押した後の処理』で行った全く逆の処理をします。
つまり、
・SetColorでボタンの色を元に戻す。
・「答えを見る」ボタンのテキスト部分の表示
・左下のキャラの「チラッ」画像を非表示、通常状態の画像を表示
・「ボタンを押しているかどうか」を検知するBool変数をFalseにする。
という処理を行っています。
まとめ
メイン処理の部分だけ解説しましたが、後から読むと怪文書ですね。
「自分で作ってみたい!」という方は、メルマガ登録の後、Unityパッケージダウンロードしてみてくださいね~。
コメント