コンポーネント指向
単一機能である「コンポーネント」のまとまりとしてオブジェクトを表現しようとする考え方
なに?
コンポーネント指向とは、単一機能からなる「コンポーネント」という部品を寄せ集めてひとつの製品を造り上げる1 ような考え方の設計思想です。
たとえばUnityの開発工程では、「主人公」「敵」というような一つ一つのゲームオブジェクトに対して「HPを管理する」「剣を振る」「炎を吐く」といった様々な機能を付けたり外したりしながら少しずつゲームバランスを調整していく、というようなことが考えられます。
アバター改変においてはアバターや衣装制作者によって既に「Rendererなどの描画するためのコンポーネント」「揺れものなどのPhysBoneコンポーネントと、その可動範囲を制御するためのColliderコンポーネント」などがPrefabファイルとして既に設定済みであることが多く、コンポーネントを新たに足すというよりかは既にある各コンポーネントのプロパティを調整する機会のほうが多いでしょう。
なぜ?
Unityで従来のオブジェクト指向だけではなくコンポーネント指向が取り入れられた背景は様々ありそうですが、ここでは以下の2つを提示してみます(筆者は主にシステムエンジニア業界の人間なので、ゲーム開発の実際の現場と異なる可能性が高いです)。
- ①ゲーム制作では一般に現実社会に既にあるビジネスモデルのようなものが無く、1から手探りで作り上げる必要があること
- ②ゲーム開発では一般に大規模かつデザイナーのような非エンジニアも開発ツールを触る機会が多く、オブジェクト指向よりも直感的で分かりやすい概念を導入する必要があったこと
①について、「1から手探りで作り上げる」ということは、設計情報が頻繁に根本から変わることが予想されます。ゲームバランスというのは実際に試しながらやってみる しかなく、変更ありきで開発が進んでいくことでしょう。 一般にオブジェクト指向は設計変更に強いとは言い難く、一度決めた設計情報は中々変えられないものです。
一方でコンポーネント指向であれば機能の付替えだけで済む場合が多く、オブジェクト指向よりも設計変更に強いことが考えられます。
②について、ゲーム開発の現場はシステムエンジニア業界などとは大きく異なり、3DCGモデルやアニメーション、UIなどを作るデザイナー、すなわち非エンジニアの方々が現場に占める割合が大きくなります。
Unityのような開発ツールは非エンジニアの方も普段触る機会が多いです。一つ一つのオブジェクトが目に見えない「概念」として現れることの多いオブジェクト指向よりも、単一の目に見える「機能」として必ず存在するコンポーネント指向のほうが非エンジニアにとっても直感的で分かりやすいものと言えるでしょう。