タイピングゲーム制作記6

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

タイピングゲームの制作記の第6回目です。

前回から1年以上経っていました。(^_^;)

前回はタイピング関連のテキスト群の位置を敵の基点からカメラを向いたまま移動させるようにしました。

スポンサーリンク

タイピングの入力欄をなくした

前回の記事までは

日本語
ローマ字
入力した文字

という文字列群を敵毎に持たせていました。

ただこの3つの文字列を表示すると、それだけでだいぶゲーム画面を占有し、敵のグラフィック自体も見えづらくなる為、入力した文字を表示するテキストを排除し、入力済みや間違えた文字の表示はローマ字を表示していたテキストの色を変更することで対応するようにしました。

入力のテキストを削除した

同じ問題を出さないようにした

問題文は配列に入れて、ランダムに問題を選び、敵が登場する時にテキストを出力しますが、一度出した問題文はなるべく出さないようにします。

方法としては問題数分の数からランダム値を計算し、その出た数値を別途リスト等で保持して置いて、その番号が再び出てきた場合はもう一度ランダムな値を計算します。

問題自体が少ない場合は当然同じ番号が出てくるので、ある程度回数を重ねても同じ番号が出た場合は仕方なくその問題を出力するようにしました。

同じ問題を出さないようにしたサンプル

これに関しては問題を出す時にランダムな数値を計算し、同じ問題かどうかを確認するよりも、問題作成時にすべての問題からランダムな番号を抽出しておき、ゲームで使用するであろう問題数をあらかじめ設定しておいて問題リストを作り、それを順番に表示した方が処理が早くなりそうです。

ただ、この方法を使うと今打つべき文字と今出す問題の最初の文字が同じものを排除することが出来なくなりますね、(-ω-;)ウーン

今打つべき文字と今出す問題文の最初の文字が同じものをなるべく出さないようにした

新しい敵を登場させる時に問題文もセットしますが、既に存在している敵達の今打つべき文字と、今出そうとしている敵の問題の最初の文字がなるべくかぶらないようにしました。

例えば

toukyouのtまで打っていて次はoを打たなければいけない敵
saitamaはまだ打っていないので次はsを打たなければいけない敵

と敵が二人存在しているとしたら、oとsから始まる問題文を新しく登場させる敵では出さないようにします。

ただ同じ問題文を出さないようにした時と同じように、大量の敵が登場した時は今打つべきアルファベットの数の種類も限られるので、何回か同じ文字が出た場合はそのまま出力するようにしています。

今打つべき文字と入力がかぶらないようにする

あくまで、現在の入力方法で同じ文字を出さないようにするというだけです。

UITextからTextMeshProに変更した

今までは通常のUGUIを使ってテキスト群を作っていましたが、今回TextMeshProに変更し、接写しても綺麗にテキストが表示されるようにしました。

TextMeshProは従来のTextMeshとUGUIの両方の要素を持っていて、ヒエラルキーでは右クリックから3D Object→Text – TextMeshProで作った場合はTextMesh系、UI→Text – TextMeshProの場合はUGUI系となります。

TextMesh系の場合は3D空間上にテキストを表示する場合、UGUI系はUIとしてテキストを表示する場合に使います。

ですが、今回はUGUI系を3D空間上に配置して使用しました。

これはテキスト群を3D空間ではなく2D上で表示する方法への変更が楽に出来そうだからです。

テキストにアニメーションをさせる場合はTextMesh系に変更するかもしれません。

タイピングゲームのテキスト群をTextからTextMeshProに変更した

敵が障害物で隠れたら打てないようにする

今回取り付けた機能のひとつに、敵が壁などの障害物に隠れてカメラから見えなくなったらタイピングを出来なくしました。

今タイピングをしている敵が壁に隠れた場合は、ターゲットの解除を自動で行い、他の見えている敵のみ打てるようにしました。

壁で見えたり見えなかったりが激しい場合は、ゲーム自体が難しくなる可能性(打っていたのにターゲット解除され、ミスタイプになる)もありますね。

ただ、そんなに大量の敵が一度に登場し、壁に隠れたり出てきたりを繰り返すような場面もほとんどないと思っているのでいいですかね?

とりあえず作ってみた機能という感じです。

壁に隠れたらタイピングを出来なくする

上のようにカメラから敵の間に障害物があるとテキスト群が見えなくなり、タイピングを出来なくしています。

タイピング対象の仕様

現時点でのタイピング対象の仕様としては、

  • (見えている)敵が1体の時にタイプするとその敵を必ずターゲットに設定。
  • 敵が壁に隠れたら、その敵はタイピングできないようにし、ターゲットであるなら自動でターゲットを解除。
  • 敵が壁から出てきたらその敵をタイピング可能。
  • キャンセルキーを押して今の敵をキャンセルして他の敵を打てるように出来るが、ターゲットがいない場合にキャンセルキーを押すとミスタイプになる。
  • という感じにしました。

    障害物が動いたり、大量の敵が一気に登場すると結構面倒な感じで、タイピングをしようと思った敵と違う敵がターゲットになる可能性もあります。

    途中まで入力して他の敵をタイピングし、というのを複数に渡って行っていると次にそれらの敵をタイピングする時は途中からなので少しタイピングが遅くなるかもしれませんね。

    今回の成果物

    今回作成した機能を試すと以下のような感じです。

    ちょっと出来上がってきたような感じはしますね。(^_^)v

    終わりに

    以前にゲームステージをTerrainを使って作成しましたが、これが非常に重くてまともにゲームが出来ませんでした。(^_^;)

    単純にわたくしのパソコンのスペックが低いというのもありますが、WebGL形式で出来るものと想定した場合に低いスペックでも出来るようにしたいところです。

    なのでTerrainの形状を複雑に変化させるのはやめて、もっとシンプルな形状を使ったステージに変えようと思います。

    しかし、もう少しいいパソコン買わないと開発にすら支障が出てしまうという・・・・(´Д`)

    現在、敵の保持しているテキスト群は3D上に配置していますが、敵が主人公に接近して攻撃する時に見えなくなってしまいます。

    今はそこら辺に対応する処理を作っていて、敵が接近したら2D上のテキストに変換し、ゲーム画面外から外れないような機能を作っています。

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