今回は3Dアクションゲームの作り方講座の第13回です。前回はNavMeshシステムを活用して敵AIの移動処理を作成しました。
前回の記事:
第13回目では敵の行動の種類を増やし、遠距離攻撃できるようにしていきます。
また、オブジェクト指向プログラミングにおける「継承」という概念について説明し、実践的な使い方を解説していきます。
継承について
まずはC#の継承という概念を簡単に説明します。
一言でいうと、継承元(スーパークラス)の機能を持った新しい独自クラス(サブクラス)を作成することです。
UntiyでC#スクリプトを新規作成した際に
1 |
public class AnyClass : MonoBehaviour |
となっていますが、これは「MonoBehaviour」を継承した「AnyClass」を作成しています。そのため「MonoBehaviour」の機能(Unityで使う一般的な機能)が使えます。
このように「クラス名 : 継承元」という記載をすることで継承が簡単にできます。
関連記事:
独自の敵の作成
敵クラスの継承
今回は敵に独自の機能を持たせるためにこの継承を使っていきます。まずは継承のために「EnemyBase」を少し書き換えます。
1 2 3 4 5 6 7 8 9 10 11 12 |
public class EnemyBase : MonoBehaviour { protected virtual void Start() { ・・・ } protected virtual void Update() { ・・・ } } |
「EnemyBase」の「Start」「Update」関数の「void(もしくはprivate void)」の部分を「protected virtual void」に書き換えます。この時点では特に処理に変化はないはずです。
「protected」というのはアクセス修飾子で下記のような意味になります。
public | 公開 |
protected | サブクラスにのみ公開 |
private( 省略可 ) | 非公開 |
このアクセス修飾子は変数にも適用しますので覚えておきましょう。「virtual」も修飾子でサブクラスで「override」(後述)するためのものです。
そして新しくC#スクリプトを作成し「Enemy_Turtle」という名前にしましょう。下記のように記載します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Enemy_Turtle : EnemyBase { protected override void Start() { base.Start(); } protected override void Update() { base.Update(); } } |
大事なのはまず「public class Enemy_Turtle : EnemyBase」の部分です。作成した段階では「MonoBehaviour」となっていた部分を「EnemyBase」に書き換え継承します。
そして、「protected override void Start()」「protected override void Update()」のように「override」修飾子をつけることで、継承元の「virtual」修飾子のついた関数をオーバーライド、つまり上書きすることができます。
それぞれの関数内で「base.Start()」「base.Update()」という記載があります。この「base」が継承元を表しており「継承元のStart関数を実行」という意味になり、元の関数を実行しつつ独自の処理を加えることができます。
では一旦この状態で、敵「TurtleShell Variant」に付与されている「EnemyBase」を「Enemy_Turtle」に変えます。
先に「Enemy_Turtle」をドラック&ドロップして、少し面倒ですが「EnemyBase」を参考に参照されているものを同じように設定してから「EnemyBase」をRemoveしましょう。
そのあと「Canvas」オブジェクトの「GameController」に参照されている「Enemys」の参照が切れているので改めて「TurtleShell Variant」をドラック&ドロップして追加しておきましょう。
このように「EnemyBase」のリストであっても、それを継承しているクラス「Enemy_Turtle」を追加することも可能です。
では一旦再生して、同じように動いているかを確認しておきましょう。
独自処理の作成
では「TurtleShell Variant」独自の処理を作成していきます。
今回は「TurtleShell Variant」が遠距離攻撃ができるようにしていきます。
次回の記事:
コメント