見出し画像

UnityLearn Scripting Tutorials -Overriding-日本語

UnityLearnのチュートリアルを日本語に翻訳しました。
素人の翻訳なので間違いがあると思います。
間違いを見つけた人はコメントでおしえていただけると嬉しいです。

———————————————————————

<日本語訳>

オーバーライドは「childクラス内のparentクラスのメソッドを変更する」ことです。

その結果、そのメソッドを呼び出すとき、最新、または最もオーバーライドされたメソッドが呼ばれます。

継承ヒエラルキーを操作するとき、基底クラスの関数とは少し違うものを使いたい時があります。

そうするのは簡単です。

childクラスで、メソッドを作り直し、実行させたい処理を書きます。

基底クラスとしてHumanoidクラスがあり、その派生クラスにEnemyを、さらにその派生クラスにOrc(オーク)があるという状況を考えてみましょう。

HumanoidクラスはYell()という関数があります。

HumanoidのYell()が呼ばれたとき、モデルは叫び、口を両手で覆います。

このYell()メソッドはEnemyクラスにも自動的に継承されます。

ここで、このメソッドの内容を変更したい思います。

Enemyに他のEnemyを集めさせたいと考えています。

そして、さらにOrcがこの関数を呼び出せるようにしたいと思います。

また、OrcオブジェクトがYell()メソッドを呼ぶと、エリア内の全てのOrcは短時間だけ攻撃ボーナスを得るようにもします。

実際これらの実装のために必要なことは、それぞれのchildクラスのYell()メソッドのparentバージョンをオーバーライドすることです。

Unityはchildクラス内のparentクラスをオーバーライドしようとすると警告を出します。

この警告を消して、Unityにそのメソッドをオーバーライドするつもりであることを伝えるためには、「virtual」と「override」キーワードを使います。

これらのキーワードはメソッドの返り値の前に置かれます。

「virtual」として定義したparentクラスのメソッドは、全てのchildクラスで「override」として定義されます。

virtualと宣言されたメソッドはchildクラスでオーバーライドされます。

オーバーライドのもっと面白い使い方は、parentクラスでの元の機能を失うことなく、childクラスのメソッドに特定の機能を追加させられることです。

これを行うためには、baseキーワードを用いて、parentバージョンのメソッドも呼び出すことです。

先ほどの例の状況で、EnemyクラスにHumanoidの機能を維持しながら、独自のエフェクトを追加したいとしましょう。

また、OrcにもEnemyクラスの機能を維持しながら、独自のエフェクトを追加したいとします。

これらを実装するにはEnemyとOrcの両方でparentのYell()メソッドをbaseとして呼び出します。

OrcのYell()メソッドが呼び出されたとき、EnemyのYell()メソッドも呼び出され、最終的にHumanoidのYell()メソッドも呼び出されます。

オーバーライドはポリモーフィズムにおいても非常に有用です。

parentメソッドをvirtualとして宣言し、childクラスでオーバーライドすることで、parentバージョンのメソッドを効果的にオーバーライドできます。

その結果、childを参照してparentオブジェクトにアップキャストし、そのメソッドを呼んだとき、childバージョンのメソッドが呼ばれます。

<終>
———————————————————————

そのほかの日本語訳の記事はこちらから。


この記事が気に入ったらサポートをしてみませんか?