🌴

C# 「継承」について学ぶ

2022/07/18に公開約1,000字

継承

継承(インヘリタンス、Inheritance)
Unityにおいて、スクリプトがデフォルトでMonoBehaviourを継承している。

public class Player : MonoBehaviour
{
}

当然、これはMonoBehaviourクラスを継承している。継承すると継承元のプロパティやメソッドを使えるようになる。つまり、Unityでスクリプトを作成するとデフォルトでは、MonoBehaviourクラスのプロパティやメソッドを使うことができるようになっている。

超基本的なことだが、Unityにおけるプロパティとはゲームオブジェクトのコンポーネントやアセットに対する設定やオプションのことで、これらは参照することができる。また、メソッド(関数)とは一連の処理をまとめたものである。プレイヤーをWASDで移動させたい場合、Moveメソッドを作る場合がある。そうした時にMoveメソッド内ではxやyと言ったVector2(Vector3)の情報を設定するだろう。

[Serializedfield]
private float speed;

public void Move(){

x = Input.GetAxisRaw("Horizon");
y = Input.GetAxisRaw("Vertical");

Vector2 direction = new Vector2(x,y).normalized;
rigidbody.velocity = direction * speed;
}

こうした処理を他のクラスに継承させることで、継承先でもMove()が使えるようになる。

少しややこしいが、継承元のクラスと継承先のクラスはいくつかの呼び方があり、先人のプログラマの方々がインターネット上に残された知見でも呼び方が異なっている場合がある(スト2のSサガット == 青パン)。

継承元の場合
・スーパークラス
・基底クラス
・親くらす

継承先の場合
・サブクラス
・派生クラス
・子クラス

ではなぜ継承するのだろうか。それはコードの重複を避け、再利用性が高まりコード量を抑えるメリットがあるからだ。結果として可視性が高まり、スパゲティを量産するイタリアンシェフにならずに済む。そうなりたい(今ここ)。

親クラスを継承したが、なんとなく上手くいかないと言った場合は継承がうまくいっていないという(参考動画)

Discussion

ログインするとコメントできます