Unityに関連する記事です

 この手順ではBattleManagerクラスにゲームオーバーの状態を管理情報に追加し、ゲームオーバーの状態を判定できるようにするとともに
ゲームオーバーの際にゲーム画面にゲームオーバー表示をするように、順番に実装していきます。
表示する場所は先ほど作成した StageInfoPlace ゲームオブジェクト群を利用します。


完成動画
https://gyazo.com/ebb0d4377ea23787f69aeb6a84ed913f



 以下の内容で順番に実装を進めていきます。

手順22 −ゲームオーバー表示を実装−
47.UIManagerスクリプトを修正する
48.BattleManagerスクリプトを修正する
49.CharaBallスクリプトを修正する



 新しい学習内容は、以下の通りです。

・同じTextコンポーネントを使って文字列の内容を変更して表示する
・プロパティを利用して、private 修飾子の変数の情報を外部クラスで利用する



47.UIManagerスクリプトを修正する

設計


 ゲームオーバーの表示を行う処理をUIManagerに行わせます。
ゲームオーバー表示のためのメソッドを用意して、ゲームオーバーの状態になったときに、BattleManagerクラスからこのメソッド呼び出して、画面にゲームオーバーと表示するロジックにします。


UIManagerスクリプトを修正する


 ゲームオーバー表示を行うのは前回作成した、ステージの情報表示を行う Text コンポーネントを持つ txtStageInfo ゲームオブジェクトの情報を利用します。
そのため今回は新しくDisplayGameOverメソッドのみを追加し、このメソッド内で txtStageInfo を使ってゲーム画面にゲームオーバーを表示させます。
今回のように、表示する文字列の内容を変更すれば、1つのTextコンポーネントを使いこなすことで異なる表示処理が実装出来ます。


UIManager.cs



UIManagerゲームオブジェクトを確認する


 UIManagerスクリプトの修正が終了したら、UIManagerゲームオブジェクトを選択してインスペクターを確認します。
アサイン情報に変更はありませんので、スクリプトの修正によるアサイン漏れがないかを確認だけしてください。

 
UIManagerゲームオブジェクト インスペクター画像



48.BattleManagerスクリプトを修正する

設計


 ゲームの進行状態用の enum である GameState に新しい enum 列挙子を1つ追加します。名前は GameOver とします。
 
 ゲームの進行状態がゲームオーバーになった際に、GameState の状態も GameOver に変更します。この状態になる条件は2つあります。

 ‥┐鬚垢戮禿櫃擦困砲法▲丱肇襪了弔蟷間が 0 になったとき  => BattleManagerクラスを修正
◆ー蟲紊凌瑤 0 になったとき                                  =>  CharaBallクラスを修正

 このいずれかの状態になった際に、UIManagerクラスに用意した DisplayGameOver メソッドを呼び出して、画面にゲームオーバーと表示します。
またステージクリアと同様に、障害物ゲームオブジェクトをすべて破棄する処理も合わせて行います。

 こちらの実装も、処理の流れとゲームの流れが連動する場所になりますので、記述しながら処理を正確に追えるように読み解いてください。


BattleManagerスクリプトを修正する


 GameState に新しい列挙子を1つ追加して、ゲームの進行状態に ゲームオーバー 状態を追加し、管理出来るようにします。

 新しく GameUpメソッドを作成し、先ほどのゲームオーバーとなる条件,良分に該当するUpdateメソッドを修正して、この状態になった際にメソッドを呼び出します。
障害物ゲームオブジェクトをすべて破棄するとともに、UIManagerのDisplayGameOverメソッドを呼び出す処理を追記します。
このGameUpメソッドは外部のクラスからも呼び出せるように、public 修飾子で作成しています。


BattleManager.cs

 <= クリックすると開きます



BattleManagerゲームオブジェクトを確認する


 BattleManagerスクリプトの修正が終了したら、BattleManagerゲームオブジェクトを選択してインスペクターを確認します。
GameState 変数のプルダウンメニューを確認して、新しく追加した GameOver 列挙子が追加されているか確認しておいてください。


確認動画 GameState 変数のプルダウンメニュー
https://gyazo.com/110e2af92605e40c4e3970cb1ed6cd5a


 アサイン情報に変更はありませんので、アサイン漏れが発生していないか確認だけしておいてください。


BattleManagerゲームオブジェクト インスペクター画像



49.CharaBallスクリプトを修正する

設計


 △離押璽爛ーバー条件を満たす処理をUpdateHpメソッドに追加します。Hp 変数の値が 0 になったら(手球の数がない)、BattleManagerクラスと同じように
UIManagerのDisplayGameOverメソッドを呼び出して、画面にゲームオーバー表示を行います。このとき、直接 UIManagerクラスのDisplayGameOverメソッドを呼び出すことも出来ますが、
今回は一度、BattleManagerクラスの GameUpメソッドを呼び出して、,離押璽爛ーバー条件と同じ処理の流れにしておきます。そのため、GameUpメソッドは public 修飾子で作成しています。
(,離押璽爛ーバー条件も△離押璽爛ーバー条件も、同じメソッドを通じてゲームオーバーの処理を行うようにします。)

 このように異なるクラスであっても、いずれかのクラスに同じ内容の呼び出し処理を集約しておくことにより、参照先を1つ確認すればよい設計になります。
そのため、修正する場合には1か所の修正で済ませることができ、エラーにも気づきやすくなります。

 また次の手順で作成するリザルト表示用に、プロパティを1つ作成しておきます。プロパティの詳細については後述します。


CharaBallスクリプトを修正する


 新しくプロパティを1つ作成し、private 修飾子の hp 変数を外部クラスから参照・変更可能にします。

 △離押璽爛ーバーの処理をUpdateHpメソッドの中に追加して、BattleManagerクラスのGameUpメソッドを呼び出すようにしています。


CharaBall.cs

 <= クリックすると開きます



<プロパティを利用して、private 修飾子の変数の情報を外部クラスで利用する>


 プロパティとは、クラス外部から見るとメンバー変数のように振る舞い、 クラス内部から見るとメソッドのように振舞う機能です。

そのため、実装状態(private修飾子のまま)を変更することなく、外部クラスへの参照・変更を行える機能であるため覚えておくと非常に便利です。


プロパティ
({ } を短くまとめて記載していますが、上記のスクリプトの処理と同じ内容です)
    public int Hp {
        set {  hp = value;  }
        get {  return hp;  }
    }

 今回は、private で宣言している hp 変数をプロパティを利用することによって、外部クラスから参照出来るようにしています。

 private 修飾子にて宣言フィールドで宣言した変数については、外部のクラスからは参照・変更を行うことが出来ません。
このとき、どうしても参照を行いたい場合には、変数の修飾子を public 修飾子に変更して対応するのではなく
プロパティの持つ get キーワードを利用して、戻り値を利用して private 修飾子の変数を外部クラスに参照させることが出来ます。

 この設計により、public ではない変数を外部クラスで利用できるようにします。
外部からプロパティを呼び出して戻り値を参照する処理のことをゲッター(getter)と呼びます。

 同様に、private 修飾子の値を外部クラスより変更したい場合には、同じプロパティをを仲介する手法を使って書き換える処理を実装出来ます。
こちらの処理はセッター(setter)と呼びます。


 get、set キーワードはどちらか片方だけでも記述できます。またプロパティ内部に条件式を用意して、その結果に合わせて処理を変更する記述も出来ます。

 実際の利用方法については次の手順で紹介します。


参考サイト
未確認飛行 C 様
プロパティ
https://ufcpp.net/study/csharp/oo_property.html

FEnetインフラ様 テックブログ
C#のプロパティを使いこなそう!さまざまな実装方法を紹介
https://www.fenet.jp/infla/column/technology/c%E3%...


ゲームを実行して動作を確認する


 ゲームオーバーの条件が2つありますので、ゲームを実行して、それぞれの状態になった際にゲームオーバー状態となって
画面にゲームオーバーと表示されるかどうかを確認します。またゲームオーバー状態になったときに画面をスワイプしてもキューラインが生成されないことも確認します。



検証動画 .丱肇觧間 0 でゲームオーバー状態
https://gyazo.com/ebb0d4377ea23787f69aeb6a84ed913f


検証動画◆ー蟲 0 でゲームオーバー状態
https://gyazo.com/47f6d8bc6e822a16fec6ec2760fe3eb2

 

 以上でこの手順は終了です。

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu



プログラムの基礎学習

コード練習

技術/知識(実装例)

2Dおはじきゲーム(発展編)

2D強制横スクロールアクション(発展編)

3Dダイビングアクション(発展編)

2Dタップシューティング(拡張編)

レースゲーム(抜粋)

2D放置ゲーム(発展編)

3D脱出ゲーム(抜粋)

2Dリアルタイムストラテジー

2Dトップビューアドベンチャー(宴アセット使用)

3Dタップアクション(NavMeshAgent 使用)

2Dトップビューアクション(カエルの為に〜、ボコスカウォーズ風)

3Dトップビューアクション(白猫風)

VideoPlayer イベント連動の実装例

VideoPlayer リスト内からムービー再生の実装例(発展)

AR 画像付きオブジェクト生成の実装例

AR リスト内から生成の実装例(発展)

private



このサイト内の作品はユニティちゃんライセンス条項の元に提供されています。

管理人/副管理人のみ編集できます