データ指向とコンポーネント指向

プログラムを組むとき、クラス設計をする際に参考にするものはたくさんある。デザインパターンもその一つ。しかし、それよりも手前にある指向について考えてみようと思う。

オブジェクト指向なんて言葉が廃れて久しい今日。プロジェクト毎に適切なプログラムの組み方は変わる。

共通で使える機能を、使うオブジェクトにのみアタッチして使う組み方がコンポーネント指向だと考えている。データ指向は共通で使う機能があるオブジェクトを似たものグループとした上で継承や依存関係を考慮したものを指す。

個人でUnityを使っていると必然的にコンポーネント指向になるが、大規模なプロジェクトではデータ指向のほうがリソースの管理がしやすいのかデータ指向で組まれていることが多い。

ゲームジャンルに焦点を当ててみる。アクションゲームでは個々の動きが別々であるためコンポーネント指向のほうが組みやすい。RPGではデータの受け渡しの際に別コンポーネントを捜索するのは負荷が大きく、データ指向のほうが組みやすい。

これまでの記述から私が得た結論は、キャラクターのパラメータ及びその受け渡しについてはデータ指向で組み、キャラクターの動きについてはコンポーネント指向で組むべきだというもの。

Unityでは当たり判定によって当たったオブジェクトを取得できる。しかし、これによりダメージ計算を行うとパラメータをコンポーネント指向で扱うことになる。これが多くの場合、設計を難しくする。よって、コンポーネントはあくまでも起爆関数としての利用に止めよう。

現状の結論は以上。実際に組んでみることで、Unityのコンポーネント指向から逃げる複雑さを再度認識することになりそうだがそれはまた別の話。





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