2013年4月10日水曜日

【すぐ分かる!】ゲーム開発でのabstractクラスとinterface

他人が作成したプログラムを最近見ていて、なんか Unity Answersをみていたら、わりと綺麗な回答があったので紹介してみたい:

--------------------
http://answers.unity3d.com/questions/233859/whats-the-use-of-abstract-classes-and-interfaces-i.html
 Mar 30 2012 at 10:08 PM



質問

ヤッホー、最近、abstract クラスと interface について勉強していて、C#の文法は掴めた。でもゲーム開発でどう活用できるのかが自分だとよく分からないんだ。

実際に使用している場面を教えてもらえる?


回答


どもども!ゲーム開発での abstract クラスと interface が何か特別なものがあるわけじゃないよ。正しく使えば利便性の向上とシンプル化が図れるけど、必要でないのに徐々に複雑にしちゃうこともある。

abstract クラスや interface は似通っているけど、明確な違いもある。abstract クラスは実際に機能をもつことができて、その子クラスが利用することもできる。インタフェースはクラスの関数からみた規約みたいなもので機能そのものは持たないんだ。

自分が開発しているゲームでは、共通機能をもったアイテムが複数ある場合に abstract クラスを使用してるよ。まあ、共通機能がオブジェクトを作るまでに至らないような場合だけどね。例えば、 Weapon (武器)クラスにクロスボウやショットガンに共通する機能を持つけど、 Weapon クラスのインスタンスそのものは、それ自体では使う用途がない。こんな場合は abstract にする意味があるかもね。

インタフェースは共通性のないオブジェクトを共通の属性で参照したい場合に便利だよ。例えばかなり異なったクラスでも同じリストの中に放り込んで、ループさせることが出来る。具体的にはロボットやゲームアイテムの壷はゲームの中でまったく異なるオブジェクトだけど、両方とも Breakable (壊せる)インタフェースを実装していれば、壊せるという観点では同等のオブジェクトとみなすことができる。List Breakable を定義して、ゲーム中に壊すものを整理することだって出来る。
--------------------

なるほどねーー、プログラミングの入門書よりもスッキリ頭に入ってくる説明だなー。

自分の場合はチェスのゲームロジックをみてたときに、駒を abstract クラスにしていて共通で駒が動けない場所のルールを定義して、子クラスではポーンやクイーンがチェスのルール上で動けない場所を個別に定義していた。

何とはなしに、いろいろ引き出しのあるプログラミングは良いなぁーと素朴におもったり。

どんどんゲーム作っていこうぜ!

0 件のコメント:

コメントを投稿

ブックマークに追加

このエントリーをはてなブックマークに追加

自己紹介

自分の写真
Unity3D公式マニュアル翻訳やってる人がスマホ(iPhone, Android)のゲーム開発しています。気軽に面白く初心者が遊べる内容がモットー。Blogでは開発情報をひたすら、Twitterではゲーム作成の過程で参考にしている情報を中心につぶやきます

ページビューの合計

過去7日間の人気投稿