[Unity] コンポーネントの基本

Unity上で扱うゲームオブジェクトには、座標や回転などを扱うトランスフォームやスプライト、アニメーション、スクリプトなど多種の情報を持っています。
これらは、コンポーネントと言います。

unity-components

上記スクリーンショットの赤枠で囲まれた一つ一つがコンポーネントに相当します。

コンポーネントとは直訳すると「部品」とか「構成要素」という意味になります。
Unity上で扱うコンポーネントはこれらと大体同じ意味です。

コンポーネントは一部を除き自由に追加・削除が出来ます。
たとえば、「Circle Collider 2D」というコンポーネントを追加すると、円形の当たり判定を持つようになり、他の当たり判定のあるゲームオブジェクトと衝突します。
これがなければ、誰とも当たらないゲームオブジェクトとなります。

このコンポーネントの構成によって、ゲームオブジェクトの全てが定まると言ってよいでしょう。

これら一つ一つのコンポーネントは、スクリプト上ではComponentクラスの派生クラスとして管理されています。
たとえば、「Circle Collider 2D」コンポーネントはComponentクラスから派生したCircleCollider2Dクラスとなります。

C#のスクリプト上からコンポーネントを取得するためには、以下のような記述をします。

    Animator anim = this.GetComponent<Animator>();

GetComponent()が自身のゲームオブジェクト内に存在するコンポーネントをひとつ取得するメソッドとなります。
Animatorをテンプレート引数として指定することで、AnimatorクラスまたはAnimatorを継承するコンポーネントのみ取得するようになります。

コンポーネントは複数取得することも可能で、これはGetComponents()(最後にsがついた複数形になっていることに注意)メソッドにより行います。

    Collider2D[] cols = this.GetComponent<Collider2D>();

上記は、Collider2Dクラスを継承するクラスのコンポーネントを全て取得する処理の例です。

もし種類にかかわらず全てのコンポーネントを取得したい場合は、テンプレート引数にComponentを指定します。

    Component[] cols = this.GetComponent<Component>();

クラスのプロパティなどの設定情報は、インスペクタに表示される項目に紐付いています。

まとめると、コンポーネントは以下のようになります。

 ・ゲームオブジェクトの構成要素
 ・コンポーネントによってゲームオブジェクトの全てが決まる
 ・スクリプトからはGetComponent()、GetComponents()で取得できる

■参考サイト
コンポーネントの使い方