
「Unityはコンポーネント指向」
どこで誰から聴いた言葉か忘れてしまいましたし、この言葉の使い方には議論の余地があるかもしれません。しかし長い間闇雲に調べつつUnityを使っていた私の中の濃い霧を晴らしてくれた言葉であることには間違いありません。実際の操作手順や画面構成、有用なクラスなどはさておき、今回の記事ではこの「コンポーネント指向」という言葉について噛み砕いてお伝えできればと思います。
また、その他のUnityに関する記事は【Unity】サイト内Tips記事リンクまとめにまとめてあります。
地面とキャラクターの違いは?

ゲームにはだいたい物体(オブジェクト)があります。それは地面であったりアイテムであったりキャラクターであったり。パズルゲームでもパネルなどがそれにあたります。
さて、そこで1つ質問です。地面とキャラクターの違いは何でしょうか。
「当たり前じゃないか」と思うかもしれませんが、少し考えてみてください。まず見た目が違いますね。他には?キャラクターは色々なポーズが取れますね。キー入力で操作することもできるかもしれません。
さて、そこで1つ質問です。地面とキャラクターの違いは何でしょうか。
「当たり前じゃないか」と思うかもしれませんが、少し考えてみてください。まず見た目が違いますね。他には?キャラクターは色々なポーズが取れますね。キー入力で操作することもできるかもしれません。
違いを列挙してみる

「当たり前じゃないか」と思うかもしれませんが、少し考えてみてください。まず見た目が違いますね。他には?キャラクターは色々なポーズが取れますね。キー入力で操作することもできるかもしれません。
コンポーネントで性質を与える

実はこの物体ごとの持つ1つ1つの性質がコンポーネントで作られています。
ゲームの開発者はこうしてコンポーネントを決めていくことで、様々な物体を作っていくことになります。 コンポーネントはスクリプトと呼ばれるプログラムのソースコードの塊として作ります。つまり 逆に言えばコンポーネントを自在に使えば割とどんなものでも作り出すことができます。
ゲームの開発者はこうしてコンポーネントを決めていくことで、様々な物体を作っていくことになります。 コンポーネントはスクリプトと呼ばれるプログラムのソースコードの塊として作ります。つまり 逆に言えばコンポーネントを自在に使えば割とどんなものでも作り出すことができます。
メリットは?

コンポーネントで物体を作るメリットの1つに流用しやすいという点があります。例えば、キャラクターに足場のないところで落下する性質を付け加えたとします。隣に武器が浮いていたらこれはヘンですよね。
もし物体ごとに落下のプログラムを書いていたとしたら武器にも同じプログラムを書き加える必要があります。しかし「落下のコンポーネント」を1つ作っておけばこれを武器に追加するだけで実装できます。
ちなみにUnityでは落下のようによく使うコンポーネントは最初から用意してくれています。このような便利な機能を利用させてもらいながらゲームを制作するのがUnityでの流れですが、他人の書いたコードに頼って作っていることは忘れてはいけません。
もし物体ごとに落下のプログラムを書いていたとしたら武器にも同じプログラムを書き加える必要があります。しかし「落下のコンポーネント」を1つ作っておけばこれを武器に追加するだけで実装できます。
ちなみにUnityでは落下のようによく使うコンポーネントは最初から用意してくれています。このような便利な機能を利用させてもらいながらゲームを制作するのがUnityでの流れですが、他人の書いたコードに頼って作っていることは忘れてはいけません。

さて、コンポーネントで様々な物体を作ってもただ眺めるだけではゲームとは呼べません。実際にゲームを作るとなるとスクリプトから他のコンポーネントの持つ数値を操作したいなという場面が多々でてきます。
例えばキー入力でキャラを動かしたい場合。自作のスクリプトからトランスフォームというコンポーネントのローテーション(回転)の値を使って計算し、ポジション(座標)の値を変更する必要があります。具体的な記述方法は今回省きますが、この「オブジェクト.コンポーネント.変数」という構造さえわかってしまえば、あとは変数の読み出し・書き込みと同じです。
いかがでしたか?普段は聞き慣れない言葉ですが少しでも「コンポーネント」という概念が見えていたら幸いです。小手先の操作や手順の羅列ばかりでは見えて来づらいところですが、Unityを使うとき自分が何をしているのか知っておくだけでもずっと見通しを持って制作に取り組めるかと思います。
例えばキー入力でキャラを動かしたい場合。自作のスクリプトからトランスフォームというコンポーネントのローテーション(回転)の値を使って計算し、ポジション(座標)の値を変更する必要があります。具体的な記述方法は今回省きますが、この「オブジェクト.コンポーネント.変数」という構造さえわかってしまえば、あとは変数の読み出し・書き込みと同じです。
いかがでしたか?普段は聞き慣れない言葉ですが少しでも「コンポーネント」という概念が見えていたら幸いです。小手先の操作や手順の羅列ばかりでは見えて来づらいところですが、Unityを使うとき自分が何をしているのか知っておくだけでもずっと見通しを持って制作に取り組めるかと思います。