C#(Unity Script)でのClassの継承などのメモメモ
かずまです。
ふとコードを書いていて、そういえばあんまり継承とか使わないけど、使ってコード書くとよりわかりやすく書けるんだろうか、と疑問が湧いてきたので、ちょっとしたコードを書いてみました。
派生クラス(以後、サブクラス)をPlayer, Enemyとし、基底クラス(以後、スーパークラス)をMovementとします。(Movementはいい名前が浮かばなかった。)
基本的にPlayerとEnemyは同じLogicで動き、体力やIDなどが割り振られていることが多いので基底クラスに書いて継承すれば綺麗に書けるんじゃないか、と思います。
qiita.com
このサイトのStep6ぐらいのイメージ(絵を書くのがあれなのでリンクでごまかします。)
C#でのスーパークラスは virtual を使って書く
公式リファレンス
virtual (C# Reference)
注意
- UnityではMonoBehaviourがクラスに継承されていなければGameObjectのコンポーネントとしてスクリプトを持たせることができないので、スーパクラスのMovementに継承しておきます。そうすることであとはサブクラスのPlayerとEnemyはMovementを継承するだけでいい!
- C#ではClassの継承は1つしかできません。Interfaceは複数継承できます。
ではコードを書いてみます。
サブクラス
イメージとしてはこんな感じですかね?
間違ってたらご指摘ください(UML的、全般的に)
ここではDamageというinterfaceは気にしなくて大丈夫です。(継承している部分も)
base
Playerクラスにbaseというコードを書きました。
これはスーパークラスのメソッドを呼び出しているので、ここではDebug.Log("override move.");が呼び出されるということになります。
interface
さて、先ほど無視したinterfaceについて見ていきます。
Interfaceに関しては
csharp.sevendays-study.com
ここの図5.1あたりを参照参照するとわかりやすいです。
(携帯の機能のあたり)
上記コードPlayerとEnemyでは受けるダメージ(get_damage)のパラメータが違うということでinterfaceを継承し、返すダメージの大きさを変えています。