タイピングゲームの開発記録3回目
前回の記事はこちら
タイピングの処理が難しかった話
上の画像である変換君は漢字とひらがなを入力したCSVファイルを解析して
ローマ字を生成してくれる作成上楽が出来るように作成したアプリケーションです
変換君という名前は気に入っていたのですが、
汎用的な名前にしすぎて、タイピング用のCSVデータ生成という感じが一切ないのが
可愛いところだと思っています
ちなみに英語名は”LatinAlphabetGenerator”こちらの方が良いんじゃないかそんな気がします
お話は変換君が生まれるちょっと前から始まります
モックで必要そうなところの当たりを付ける
モック作成で、タイピングゲームを一度作成したとはいっても動いているように見える突貫工事…
そのまま使えるプログラムはありませんでした。
ただ、本実装に向けて重そうな処理を知ることが出来たので、やはり一度モックを作成するのは大切なのだなと思いました。
まずは、アタリを付けていきます
・柔軟入力 (無難に思い浮かぶ重たい処理)
・ローマ字を手打ちで入れるのが面倒 (ローマ字くらい自動で出力したい)
・判定処理(出来る限り再利用できるように純正C#での作成)
・データ格納方法 (モックではどんどん破棄していきリトライはシーンを再読み込みしていた)
このなかで最初に手を付けたのがローマ字自動生成でした
ローマ字自動生成 ”変換君”
これは、まず判定処理を作るにあたって適切なデータ生成をしたいがためでした
モックではただの文字を先頭から処理していただけで、
蜜結合がかなり深刻な代わりに、スピードとなんちゃってでも動かしていました
ゆえに判定処理や柔軟入力対応の基盤で変換君を作成し始めます
とりあえず、日本語の入力方法を再度確認して、作っていきました
ローマ字辞典の様なものを作成して、そこから読み込んだひらがなを1文字ずつ確認してローマ字を当てはめていきました
ひらがなの1文字文ローマ字を入力した場合を判定するために結構細かく分けて保存しました
頭の中で、判定処理、柔軟入力、ローマ字化は似たような機構で作れる兆しが見えていたので、
開発にもそれほど、苦戦はしませんでした…実際は他に問題が、、、
苦戦はしなかったのはCSVの出力回り、文字の形成はそこまで時間はかかりません
問題は3つ
・っ (小文字)
・ゃゅょ (小文字)
・ん
VS っ(小文字)
まずは小さいつ
この文字は次の文字の先頭を省略して入力することが出来ます
なぜ、省略があるのか…
なのでっを感知した時は例外処理として分離させることで対応しました
最も派生形があるといっても過言ではありませんでした
なので次の文字の先頭を”っ”として登録させまずは1勝
VS ゃゅょ (小文字)
これも大変面倒でした
単体入力にする分なら大したことありませんが、
ゃゅょはひとつ前の文字と合体させて省略が存在します
文字の変換時は一文字ずつローマ字化が基本になっているので
ゃゅょを検知した時に、前回の文字を上書きする形で対処しました
これもまた例外として処理、2勝目です
VS ん
まさにラスボスで非常に難儀でした
んは”nn”でもいいし”n”でもいい、
ただし、な行のときは”nnna”と打つ(んなの場合)
な行のバグに気が付くのには時間がかかりました
まさに日頃気にしないからこその面倒な所、
他のタイピングゲームだと日頃の打ち方と違う打ち方で実装されているようでした
これも例外として分けて処理しました
隠れたバグとして気が付くのが遅れました
そして”nn”でも”n”でもいいけど、な行は”nnn”をクリアし
3連勝しました
そして、変換君は生まれた
外部から、フォルダを選択して、出力先や名前もアプリケーションで動かせるようにして、
実際に分けてみて完成しました(ほぼ全略)
画像がどれも地味で、あまり写真も載せられず申し訳ありません
ただ、開発側のデータ形成を手伝ってくれる変換君は今後の開発で役に立つ
縁の下の力持ちです
地味ながらも思い出深いので紹介しました
最後に
長くなってきたのでここで区切ります
実はこの後、データを持たせるようにScriptableObjectを使用することにしました
ScriptableObjectをCSVに変換する、変換君ForUnityを開発しまして、
人間がデータ打ちをするのはエクセル上のみにしました
便利です
UnityEditorにドラッグアンドドロップして実行すれば、正確な位置にScriptableObjectが生成されます
変換君ForUnityだとよくわからないので、CSVtoSOとシンプルな名前にしました
これもシンプル過ぎて何を生成するのかいまいち詳細が分かりませんね(笑)
次回は、判定処理と柔軟入力作成についてにしようと思います
地味な部分が続きますが、制作のリアルをお届けできればと思います
コメント