気ままなUnityエンジニアブログ

新米Unityエンジニアが送る解説アウトプットブログです。Twitter : @UjinUnity

MENU

【Unity】インターフェイスの簡単実装

スポンサーリンク

最近Qiitaでねこますさんが書いていたインターフェイスの記事が面白かったので便乗してみます。

 

interface (インターフェイス)は直訳すると介入するという意味になります。

今回は良く使う「ダメージを与える」というインターフェイスを作成します。

f:id:Wojtek:20190513011022p:plain

このインターフェイスを使用する時、使用者は必ず「AddlyDamage」関数を使用しなくてはなりません。

今回は「プレイヤーの攻撃がエネミーに当たったらダメージを与える」処理を参考にダメージ判定インターフェイスを活用しましょう。

 

実際の流れ

用意する物 : Enemy (ダメージ受ける側)

中身はこんな感じ

f:id:Wojtek:20190513011028p:plain

上記に作成したIDamageApplicableインターフェースを継承しています。

f:id:Wojtek:20190513011033p:plain


関数はこの様な形。
Damageを受けたらOnNextを流します。

 

衝突したら

f:id:Wojtek:20190513011210p:plain

こちらはプレイヤーの攻撃オブジェクトの関数です。

コライダーで衝突判定を行なっております。

「もし衝突したオブジェクトにIDamegeApplicableがアタッチされていたら」

今回の場合、対象がエネミーであるかも調べます。

そして、エネミーの場合は、アタッチされてあるIDamegeApplicableを活用し、ダメージ判定処理を実行します。

あとがき

今回の場合、プレイヤー、エネミーは「ダメージ処理」を専門に扱う外部処理を実行しました。

そのため、もしダメージを受けないエネミーを作る場合、エネミー内部の処理を変更するのではなく、ダメージインターフェイスを使用しない様にすれば、無駄な工数を削減でき、保守性も高まります。

この様に、普遍的で多数の箇所で実行されるロジックをインターフェイス化することは非常に重要です。

また、業務などのチーム制作の場合、チーム全体の品質、コーディング管理としても活用できます。

今回のダメージ判定以外にも、例えばアイテムの購入処理や、UIの生成処理など多数の分野で活用できます。

使いすぎは問題ですが、オブジェクト思考を考える上で必須の知識のため、ぜひ活用してください!。