3Dアクションゲームの作り方15 タイマー処理とアイテム取得処理の実装 | Unity入門の森 ゲームの作り方

3Dアクションゲームの作り方15 タイマー処理とアイテム取得処理の実装

Unity 3Dアクションゲームの作り方 ゼルダ・原神・モンハン風 (スマホ化対応)


Unity入門の森オリジナル本格ゲーム制作講座はこちら
11種類の本格ゲームの全ソースコード公開・画像&動画による解説付き

今回は3Dアクションゲームの作り方講座の第15回目です。前回は敵の出現処理、ボス戦等ゲームステージの一連の処理を作成しました。

前回の記事:

3Dアクションゲームの作り方14 敵の自動生成・ボスの作成・ステージコントロール
今回は3Dアクションゲームの作り方講座の第14回です。いよいよ完成まで近くなってきましたね。 前回は敵の遠距離攻撃を作成し、継承の使い方を学びました。 前回の記事: 第14回目は敵を自動出現させる機能、ボス戦を作り、ゲームステージを構築して...

第15回目は時間の計測、アイテムの取得の処理を作成しゲーム性を追加していきましょう。

アイテムを獲得しながら縦横無尽にフィールドを動き回り敵と戦闘。ボスを倒すまでのタイムスコアを競うゲームとしての形ができあがります。


【Line登録者限定のプレゼントもあるよ!】

経過時間の表示UIを作ろう

時間を計測しましょう。今回は特別に使用はしませんが、かかった時間を表示してタイムアタック的要素を足しておきます。制限時間などを設ける場合は応用してみましょう。

「GameController」に追記します。

まず、テキストを使用するために「using UntiyEngine.UI」を追記します。

変数は「SerializeField」属性で「Text」を「gameClearTimeText」と「timerText」という名前で作成します。これらは後ほどInspectorから設定します。

また「isTimer」という時間計測フラグと「currentTime」という時間計測用の変数を作成します。

次に「Update」関数を作成します。

中の処理です。「isTimer」が「true」つまり時間計測するときに、まず「currentTime」に「Time.deltaTime」を足していきます。

「Time.deltaTime」は1フレームの時間を表すもので「Update」は1フレームごとに実行される関数であるため、1フレームごとに「Time.deltaTime」を足していくことで経過時間(秒)を計測することができます。

次に暫定的な処理ですが「if( currentTime > 999f )」つまり経過時間が999秒を超えた場合現在時間を「999.9」という固定表示にします。

「Text」コンポーネントの表示文字を変更するには「(Textコンポーネント).text」を変更します。

999.9秒以下の通常時は、現在時刻を表示するために同じように「Text」に現在時間「currentTime」を表示します。

このときの「ToString()」はstring型以外(文字列以外)のものを文字列に変換する関数です。その引数に「”000.0″」とすることで表示の形を0埋めのこの形に指定することができます。

あとは、「isTimer」を「false」にします。タイミングはボスを倒したとき「EnemyDestroy」つまりゲームクリア時、またゲームオーバー時です。

ゲームクリア時はクリア画面に時間を表示するために、Updateと同じText表示処理を行います。

ではUnityに戻り、Textを作成しInspectorで実行中の時間表示テキストと、ゲームクリア時のテキストを設定しましょう。

参考用に画像を載せておきますので位置や色はお好きなように設定してみてください。

追記:Canvasのインスペクターから「gameClearTimeText」と「timerText」をアタッチするのもお忘れなく(2枚目の画像は講座完成の後に追加されたのでTimerまわり以外のインスペクター欄に違いがあるかもしれませんが気にしないでください)。

 

アイテムの取得

アイテムを拾って何らかの効果を得る機能を追加していきましょう。

今回は回復できるアイテムを取得できるようにしていきます。

回復ポッドオブジェクトの作成

まずはオブジェクトを作成していきましょう。

本来はアセットを用いていい感じにしたいですが今回は簡易的にプリミティブの「Capsule」とパーティクルを使って作成します。

まずはHierarchyでルートに「Empty」を作成し「HealPod」という名前にして、その子に「Capsule」と「ParticleSystem」を作成します。

「Capsule」の「CapsuleCollider」を削除し、「HealPod」に「CapsuleCollider」を付与、その「isTrigger」をオン。また「ColliderCallReceiver」も付与します。

「Capsule」、「ParticleSystem」のTransformを下記のように変更します。「HealPod」は見やすい位置に移動しておきましょう。

次にProjectウインドウで「Assets/AppMain」に「Create/Material」で新しいマテリアルを作成し「Green」とします。そしてマテリアルを選択しInspectorで色を緑にしましょう。

続きを読む

このコンテンツはパスワードで保護されています。 コンテンツを読みたい方はUnity入門の森ショップ(https://unityforest.shop/)で講座閲覧権を取得してね。

次回の記事:

3Dアクションゲームの作り方16 シーン遷移・タイトル画面を作成 スマホにビルドする方法も
今回は3Dアクションゲームの作り方講座の第16回目です。いよいよ3Dアクションゲームの完成です。 前回は時間の計測、アイテムの取得処理を作成し、ゲーム性をさらにレベルアップさせました。 前回の記事: 第16回目はゲームタイトル画面を作成しま...


Unity入門の森オリジナル本格ゲーム制作講座はこちら
11種類の本格ゲームの全ソースコード公開・画像&動画による解説付き

コメント

  1. 匿名 より:

    TimerTextのところで何も表示されずエラーが出てしまいます。こちらは何をアタッチすれば良いのでしょうか

    • Unity入門の森 より:

      質問ありがとうございます。
      ”変数は「SerializeField」属性で「Text」を「gameClearTimeText」と「timerText」という名前で作成します。これらは後ほどInspectorから設定します”
      この部分ですね。GameControllerスクリプトがアタッチされているCanvasのインスペクターに設定してあげることになります。
      念のため画像も一枚追加しておきました。

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