ジェイのブログ

Unity,UnrealEngine,ゲーム制作,プログラミング,日記も書きます!

Unityで作るローマ字入力とかな入力に両対応した多機能なタイピングゲームの制作講座 4回目

こんにちは!ジェイです。

このUnityタイピングゲーム制作講座も、今回でいよいよ最終回になります。

そして、ついに完全版のJ-TypeEngineのプロジェクト配布します!

※完成版のプロジェクトの配布は有料コンテンツで購入するとダウンロードできます。

 

使い方は配信で解説しましたので動画で見たい方は以下のリンクを参照してください。

Unity用タイピングゲームエンジンJ-TypeEngine配布&説明会! - YouTube

 

スクリプトの違いについて

Unityのバージョンは2022.3.19fでダウンロードはこちらからお願いします。

 

最初に配布したサンプルとJ-TypeEngineの一番の違いOnGUI()での処理をすべてTypingEngine.KeyPress()内に入れたことです。

説明では、MakeInputStr()やMakeSearchStr()などの関数の処理を説明したかったので外に出してましたが、それらはCJTypeEngineクラス内部で処理するようになってます。

>|C#|   
private void OnGUI()
    {
        if (!StartFlag) return;
        Event e = Event.current;
        if (e.type == EventType.KeyDown && e.type != EventType.KeyUp && e.keyCode != KeyCode.None
            && e.keyCode != KeyCode.LeftShift && e.keyCode != KeyCode.RightShift)
        {
            if(TypingEngine.KeyPress(e, LeftShift || RightShift))
            {
                ViewTextMesh.text = "終了";
                InputTextMesh.text = "";
                StartFlag = false;
                StartButton.enabled = true;
            }
        }
    }
||<


修正点(2024/5/15)

CRomaTypingEngine.csのStrChangeに文字を切り取りすぎないようにチェックする処理を1行追加しました。

>|C#|   
public bool StrChange(ref string input_texte, ref int english_len,
            string strbuf, List<TagSearchStrings> search_strs, int english_pos)
    {
        int e_len = english_len;
        if (input_texte.Substring(english_pos, strbuf.Length) != strbuf)
        {
            foreach (var search_str in search_strs)
            {
                if (string.IsNullOrEmpty(search_str.SearchStr)) continue;
              // 文字を切り取りすぎないようなチェックする(追加点)
if (search_str.SearchStr.Length < strbuf.Length) continue;
                if (search_str.SearchStr.Substring(0, strbuf.Length) == strbuf)
                {
                    int textlength = input_texte.Length;
                    input_texte =
                            // 問題文の始めからsearch_strの手前まで切り取ったもの
                            input_texte.Substring(0, english_pos) +
                            search_str.SearchStr +
                            // 問題文の始めからsearch_strの手前まで切り取ったもの
                            input_texte.Substring(
                                english_pos + e_len,
                                textlength - (english_pos + e_len)
                            );
                    english_len = search_str.SearchStr.Length;
                    return true;
                }
            }
        }
        return false;
    }
||<

ローマ字入力候補の追加

 CRomaTypeEngine.csのSetStex()に以下の内容を追加しました。これにより「sixya」「shixya」「sixyu」「shixyu」「sixyo」「shixyo」の打ち分けが新たに追加されて可能になりました。

>|C#| 
Stex[30, 0] = "しゃ"; Stex[30, 1] = "sya"; Stex[30, 2] = "sha"; Stex[30, 3] = "silya"; Stex[30, 4] = "shilya"; Stex[30, 5] = "sixya"; Stex[30, 6] = "shixya";
        Stex[31, 0] = "しゅ"; Stex[31, 1] = "syu"; Stex[31, 2] = "shu"; Stex[31, 3] = "silyu"; Stex[31, 4] = "shilyu"; Stex[31, 5] = "sixyu"; Stex[31, 6] = "shixyu";
      Stex[32, 0] = "しょ"; Stex[32, 1] = "syo"; Stex[32, 2] = "sho"; Stex[32, 3] = "silyo"; Stex[32, 4] = "shilyo"; Stex[32, 5] = "sixyo"; Stex[32, 6] = "shixyo";
||<

J-TypeEngineについて

使用時の注意点

以下の用途は報告なしで使用するのを許可します

・Unityでのタイピングゲーム制作に使う

・こちらの講座のURLを明記は任意です。ただし、自作発言は禁止します。

・J-TypeEngineを使用して発生した如何なる責任も負えません

 

またご意見や質問などもコメントやTwitterのDMなどで受け付けてます。

https://twitter.com/JY20160816

 

 

まず画面を見ながらJ-TypeEngineのタイピングゲームとしての機能を紹介していきます。

ローマ字入力とかな入力の切り替え

「ローマ字」か「かな」にチェックを入れてスタートボタンをクリックすると対応した入力モードでタイピングが始まります。

スクロール基準と最大文字について

左下に入ってる数字を見てみると「かな」と「ローマ字」と「漢字」の3種類についてスクロール基準と最大表示文字数の後に数字が入ってます。

「かなのスクロール基準」と「かな最大表示文字数」

かな入力の時のInputTextに入る文字についての設定です。

例えば、「かなのスクロール基準」に「5」を入れると5番目の文字以降までタイピングすると、その位置を基準にスクロールし始めます。(0から数えるので注意!)

「かな最大表示文字数」に「10」を入れると濁点、半濁点を含む10文字までしか表示されないようになります。

「漢字のスクロール基準」と「漢字最大表示文字数」

ローマ字入力とかな入力両方で表示される文字のスクロールの基準と最大表示文字数です。数え方については、かなの項目と同じです。

「ローマ字のスクロール基準」と「ローマ字最大表示文字数」

ローマ字入力のみで表示されるアルファベットのスクロールの基準と最大表示文字数です。文字数の数え方については、かなの項目と同じです。

ローマ字の表示設定

右下のチェックボックスは、すべてローマ字の表示文字のカスタマイズに使います。

J-TypeEngineでは、ローマ字入力の打ち分け機能が実装されてますが、この部分は表示させるローマ字を好みのものに選択できます。

例えば、SHA,SYU,SYOのチェックを入れるとInputTextに表示されるローマ字がsya,syu,syoに変更されます。

この時に別の打ち方をしたらその通りに打てます。つまりこのチェックボックスは表示のみを好みに設定する項目です

下のチェックボックスのSHA,SHU,SHOにチェックを入れるInputTextのローマ字がshashushoに変更されます。

拗音単体入力無効のチェックボックスにチェックを入れると

「きぃ」「くぃ」「くぅ」「くぇ」「くぉ」「くゃ」「くゅ」「くょ」

などの拗音語を無効にできます。

ワードの追加の仕方

Asset/Resourcesフォルダの中にWordsというファイルがあります。

それを開いてみると以下の様にワードが表示されます。

1行目が漢字ワード(ViewText)に表示される文章で2行目がタイピングする文章(InputText)です。

そして、漢字の文字数とひらがなの文字数を合わせるために以下の様にで囲います。

きちんと漢字の文字数とひらがなの文字数が合えば、漢字ワードも打った時に進むようになります。別に気にならないのであればで囲わなくても、ひらがなやローマ字のワードだけは進むので、無理にやらなくても大丈夫です。

J-TypeEngineを使った作品のご紹介

なんと完成版のプロジェクトを配布した次の日にさっそく絡繰くろあさんが、バトルタイピングゲームを制作してくれました!

たった1日でここまでできてるのは本当にすごいし嬉しいですね(^^♪

もし他にも使ってくれた方がいたら知らせてくれると嬉しいです。

まとめ

全4回にわたってUnityタイピングゲーム制作講座をやってきました。世の中にはかな入力のタイピングゲームがすごく少ないです。

原因は

・ゲーム制作者のほとんどがローマ字入力に慣れているという

・Unityで通常のやり方では日本語キーボードのすべてのキーが取得できない

という理由があります。

なので今回、かな入力である私自身が少しでもかな入力のタイピングゲームが増えたらという想いでこのJ-TypeEngineを制作しました。

タイピングというジャンルは競技性が高くライトユーザーにはとっつきにくい面がある一方で、タイパーと呼ばれる競技タイピングを好む人たちのモチベーションは非常に高いです。

世の中のゲームプレイヤーのモチベーションが下がってる今だからこそ、ゲーム制作者はこういった需要に答えてみてはいかがでしょうか?