i-school - 2Dトップビューアクション 手順11
 プレイヤーと障害物用のゲームオブジェクトの接触時の処理について処理を考えて追加します。



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

手順11 ープレイヤーと障害物の接触時の制御処理ー
18.プレイヤーと障害物用のゲームオブジェクトの接触判定



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

 ・クラス間の繋がり ークラスの依存関係ー



17.プレイヤーと障害物用のゲームオブジェクトの接触判定

1.設計


 アクションゲームにおいて、障害物を取り除く方法はいくつかあります。
たとえば、弾を発射するアクションがあるゲームであれば、その弾を障害物に当てることで破壊し取り除くという行動が行えます。

 今回のゲームでは、プレイヤーと障害物とが接触することにより、障害物を破壊出来るようにします。
ただし、それだけですと、常に一度接触することでどのような障害物でも破壊出来るようになってしまうため、
まずはこの手順で基本的な破壊の処理を実装し、次の段階で障害物の HP を減少させることで破壊できるように処理を修正します。

 一度の手順で両方を実装しても構いませんが、まずは順番に考えていくことが大切です。


2.PlayerController スクリプトを修正する


 設計で検討した内容を実装していきます。
どのような処理があれば接触判定が実装できるのか、学習内容を思い出して、実装に挑戦してみてください。


PlayerController.cs

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


 スクリプトを修正したらセーブをします。


3.<クラス間の繋がり ークラスの依存関係ー>


 public で宣言しているクラスは、クラス内の public で宣言している情報を他のクラスに対して公開しています。
public 変数であれば、他のクラスより変数の参照や、変数への代入処理が行えます。
public メソッドであれば、他のクラスより実行命令を受けて、処理を実行することが出来ます。

 今回の場合、前回の手順で製作している ObstacleBase クラスにある public メソッドの DestroyObstacle メソッドに対して、
PlayerController クラスより、この DestroyObstacle メソッドへの実行命令を行っています。

 このように、クラスには、クラス同士の繋がりがあります。これをクラス間の依存関係といいます。


PlayerController.cs
 // public メソッドへの実行命令
  obstacle.DestroyObstacle();

 上記の命令を受けて、ObstacleBase クラスの DestroyObstacle メソッドが実行されます。

ObstacleBase.cs
    /// <summary>
    /// 破壊処理
    /// </summary>
    public virtual void DestroyObstacle() {        
        Destroy(gameObject);
        Debug.Log("障害物破壊");
    }



 DestroyObstacle メソッド内に Debug.Log メソッドを記述していますが、これは、処理が正常に動作しているかどうか
Console ビューを通じて可視化するために役立っています。つまり、この処理が表示されないときには、正常に動作していないことになります。

 今回はゲーム画面上から障害物が破壊されて消えますので、プログラム内部を見なくても処理の成否を判断できますが、
そういった視覚的に見えない処理が動いているケースの方が多いため、Debug.Log メソッドを利用した処理の可視化は開発においては不可欠な確認方法になります。

 理解を深めるためにも、クラスやメソッド内の処理を可視化してみてください。


クラスの関係




 各クラスには役割が分担されているため、1つのクラスだけではゲーム内の処理をすべて実行することは出来ません。
そのため、クラス同士が補間しあい、必要な情報のやり取り、メソッドの実行命令などのやり取りを行うことによって、
各クラスの役割に応じた機能を処理できるようになっています。

 そのため、どのクラスのメソッドに対して実行命令を行っているのか、また、どのクラスにはどういった情報があるのか、ということを
プログラムを構築する人が理解した上で、クラスの設計を行い、拡張性のあるクラスになるように考えて実装を行う必要があります。

 よって、プログラム内にロジックを組むためには、各クラスの機能を理解した上で始めて、ロジックを考えていく段階になります。
Unity が用意しているクラスやメソッドも多いため、多くの情報を知識として吸収することがロジックを組み立てていく1つの指針になります。


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


 どのような制御になれば正しい状態であるのかを、理解した上でゲームを実行してデバッグを行います。
そうでないと、自分の書いたスクリプトの良し悪しの判断をつけることができず、問題点が問題点であることに気づけません。


<Game ビュー 実装動画>
動画ファイルへのリンク


<Console ビュー>




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

 次は 手順12 −プレイヤーの攻撃処理− です。