Unityで簡単なタイピングソフトを作成する

記事内に広告が含まれています。

今回はUnityで簡単なタイピングソフトを作成したいと思います。

ローマ字入力のタイピングソフトですね。

簡単なタイピングソフトとは『機能的にシンプルなタイピングソフト』であり『タイピングソフトが簡単に作れる』、『簡単にタイピングソフトを作る』という事ではないのでご了承ください(^_^;)

以前の記事

Unityでキーボードからの入力を判定する
Unityでのキーボードからの入力についてみていきます。Input.GetKeyやInput.GetKeyDown、Input.GetKeyUp等の違いや使い方。Input.anyKeyやInput.anyKeyDownについても。

でキーボードからの入力を判定する事をやったのでその実践的な使い方のサンプルとしてタイピングソフトを作ってみます。

スポンサーリンク

タイピングソフトの概要

今回作成するのはローマ字入力のタイピングソフトになります。

問題をいくつか用意しておきタイピングに成功したら次の問題をランダムに出題するようにします。

1文字毎にタイピングに成功したか失敗したかを計測し、正解率等をUIで表示するようにします。

難しい機能は搭載しないので作成した問題をひたすら入力して終わる(実際は終わりがない・・・・)だけになりますね・・・・(^_^;)

タイピングソフトのUIを作成する

まずは問題を出力する部分、正解数、失敗数、正解率を表示するUIを作成していきます。

ヒエラルキー上で右クリック→UI→Canvasを選択し、名前をTypingSoftに変更します。

TypingSoftの子要素に右クリック→UI→Panelを2つ作成し、名前をInputPanelとDataPanelとし、それぞれサイズを調整します。

それぞれのパネルの子要素に右クリック→UI→Textを選択し名前をQuestionJ、QuestionR、Input、Correct Answer、Mistake、Correct Answer Rateとします。

タイピングソフトのUI階層

↑のような階層を作成します。

タイピングソフトUI

↑が作成したタイピングソフトのUIの配置になります。

キャンバスであるTypingSoftのCanvas Scalerを変更します。

Canvas Scalerを変更する

UI Scale ModeをScale With Screen Sizeに変更します。

Screen Match ModeはMatch Width or Heightにします。

MatchがWidthになっているので横幅に応じてUIのサイズが変更されます。

これでタイピングソフトのUIが完成しました。

タイピングソフトの機能を作成する

タイピングソフト用のUIが完成したのでタイピングソフトの機能を作成していきましょう。

まずはタイピングソフトの機能全般を行うTypingSoftスクリプトを作成しTypingSoftゲームオブジェクトに設定してください。

問題を作成し出力する

TypingSoftスクリプトに問題文を作成し、問題の中からランダムに1つを選んでテキストに出力する処理を作成していきましょう。

まずは問題の日本語の配列とローマ字の配列を同じ並びで作成します。

問題の番号と配列の番号が一緒になるように作成していきます。

ローマ字の問題をもっと簡単に間違えず作成するにはひらがなと対応するローマ字の対応表を作成しておきそれを使ってローマ字を作成します。

例えば、最初の『問題』に対応するローマ字を作るなら『もんだい』というひらがな文を配列で作成しておき、

『も』→『mo』、『ん』→『nn』、『だ』→『da』、『い』→『i』

とひらがなからローマ字を作成し、それを連結してローマ字を表示するテキストUIに表示するようにします。

今回は割愛ということで・・・・。

UIJとUIRは問題を表示するテキストUIを設定するフィールドでtransform.Findを使って子要素から対応するテキストUIを探して設定しています。

その後Random.Rangeを使って問題数分の中から1つの値を取得し、その番号に対応する問題をテキストUIに表示しています。

問題を出力するメソッドを作る

問題はタイピングソフトスタート時だけに出力するわけではなく、1つの問題が打ち終わった時も同じように出力します。

その為、問題をランダムに選び出力するという処理をひとまとめにして問題を出力するメソッドにまとめてしまいましょう。

問題出力メソッドをOutputQにまとめ、次の問題を表示する時はこのOutputQを呼び出せば新しい問題が表示されるようにします。

問題をタイピングする機能

次は表示された問題のローマ字をキーボードから入力出来るようにし、正解の時は正解数のカウントとInputテキストに文字を表示し、失敗の時は失敗数のカウントと間違えた文字を別の色で表示します。

まずはキーボードからの入力と問題のローマ字が合っているかどうかの処理を追加していきましょう。

ローマ字の問題文の何文字目か?を表す変数indexOfStringを用意し正解時には数値を足していく事で次の文字を指すようにします。

Input.GetKeyDownを使って現在見ているローマ字と打ったキーが同じかどうかを判定しています。

同じだった場合はCorrectメソッド、違った場合はMistakeメソッドを呼んでいます。

それぞれのメソッドでは正解と失敗という文字を表示しているだけで中身はこれから作成していきます。

正解時の処理Correctメソッドを呼んだ後に現在見ている文字列の番号が文字列の長さを超えた時は全ての文字を打ち終わったのでOutputQメソッドを呼んで次の問題を出力します。

Correctメソッドの実装

正解時の処理を行うCorrectメソッドの中身を実装していきましょう。

正解時には今入力した文字をInputテキストUIに出力し、ローマ字の問題の次の文字を指すようにし、正解率を計算します。

正解数を使いますのでフィールドの宣言等も追加しておきます。

OutPutQメソッドでは問題を出力する前にテキストUI等を初期化する処理を入れておきます。

Correctメソッド内では正解数を増やしその後に正解率を計算してます。

タイピングが成功した場合は現在打っているローマ字をテキストに足しています。

文字を足した後に次の問題を見るようにindexOfStringを足しています。

ここまでの機能を確認してみましょう。

タイピング正解時のサンプル

↑のようにタイピングに成功すると文字が表示され正解数が増えているのが確認出来ます。

Mistakeメソッドの実装

次は失敗した時の処理を行うMistakeメソッドを実装していきましょう。

タイピングを失敗した時はそのフレームで入力した文字列Input.inputStringの文字数分を失敗数に換算出来るようにしています。

同時押し分を換算しないのであれば

という処理だけでも大丈夫です。

その後正解率の計算をし、今まで正解してきた文字列に今打った文字を赤色にしたものを足してInputに表示するようにしています。

Input.inputStringが空でない時だけUIにテキストを表示するようにします。

テキストの色を変更するにはタグを使用します。

colorに指定するのは#赤緑青透を16進数で表したものを指定します。

HTMLタグと同じですね、例えば赤色の文字にする場合は

<color=#ff0000ff>色を変える文字</color>

青色の文字にする場合は

<color=#0000ffff>色を変える文字</color>

となります。

タグと文字を同時に扱っているのでダブルクォーテーションと文字列とを連結しています。

タイピング失敗時の処理サンプル

↑のようにタイピング失敗時に間違えて打った文字が赤く表示されるようになりました。

CorrectAnswerRateの実装

最後に正解率を計算するCorrectAnswerRateメソッドを実装していきましょう。

例によって追加分だけの記述になります。

CorrectAnswerRateメソッド内では正解数と失敗数を使ってfloat型の正解率を計算しています。

100 × 正解数 / (正解数と失敗数)

で正解率を計算しています。

正解率を表示する時には小数点以下の桁を2桁にする為ToStringの引数に”0.00″を書き小数点以下は2桁の表示にしています。

これで正解率を計算し表示する関数CorrectAnswerRateの実装が終了しました。

Input入力のTip

キーボードを押しっぱなしにしUpdateメソッドでInput.anyKeyで連続でそのキーを取得する事が出来ますが、1フレームだけ判定し、一旦入力をリセットしたいこともあります。

そんな時は、Input.ResetInputAxesメソッドを使用すると、そのフレームでの入力がリセットされるので、Input.GetKeyを使ってもすぐに次の判定をされる事がありません。

例えば以下のようにするとキーボードを押しっぱなしにするとずっとaがコンソールに出力されますが、

以下のようにInput.ResetInputAxes()を追加するとキーボードを押しっぱなしでも最初の文字が入力されてから一定時間次の文字が入力されません。

最後に作成したタイピングソフトを確認してみます。

タイピングソフトの改善点

今回作成したタイピングソフトは機能的に全然足りてません。

ローマ字の問題をひらがなから作成したり、『ちゃ』を入力する時に『cha』、『cya』と両方の入力に対応したりといった機能も取りつけると良さそうですね。

しかし1つの記事内でこれだけの物が出来た事を考えれば、タイピングオブザデッドみたいなタイピングゲームを作るのも十分可能ですね(^_^)v

本当は結構大変だけど・・・・(T_T)/~~~

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