ゲームオブジェクトとコンポーネント間の関係
コンポーネントとスクリプトの関係

コンポーネントの使用

Components (コンポーネント)はオブジェクトやゲームでの振る舞いに関する心臓部です。コンポーネントは全ての GameObject (ゲームオブジェクト)の関数の一部です。もしコンポ―ネントとゲームオブジェクトの関係をまだ理解していないようでしたら,他の項目に移る前に ゲームオブジェクト ページを一読下さい。

ゲームオブジェクトは様々なコンポーネントの容れものです。初期設定により,全てのゲームオブジェクトには自動で Transform (トランスフォーム)コンポーネントが付いています。これは,トランスフォームコンポーネントによってゲームオブジェクトがどこに位置しているか,どのくらい回転しているのか,どのくらいの大きさなのかが決定されるからです。トランスフォームコンポーネントが無ければ,ゲームオブジェクトは世界に居場所が無くなってしまいます。例として,空のゲームオブジェクトを作成してみましょう。メニュー項目の中から, GameObject->Create Empty をクリックして下さい。新しいゲームオブジェクトを選択して, Inspector (インスペクター)を見て下さい。

空のゲームオブジェクトでもトランスフォームコンポーネントが付いている
空のゲームオブジェクトでもトランスフォームコンポーネントが付いている

選択しているゲームオブジェクトにどのコンポーネントがアタッチされているのかをいつでも確認することができる手段として,インスペクターが使えることを覚えておきましょう。コンポーネントの増減に合わせて,インスペクターはその時何がアタッチされたのかをいつでも表示します。(スクリプトも含めた)あるコンポ―ネントのどんなプロパティを変更するのにもインスペクターを使います。

コンポーネントを加える

選択しているゲームオブジェクトに対して, Components メニューからコンポーネントを加えることができます。生成したばかりの空のゲームオブジェクトに Rigidbody (リジッドボディ)を加えることで今から試してみましょう。メニューから, Component->Physics->Rigidbody を選びます。このことを実行した際,インスペクターに Rigidbody プロパティが表示されたのに気づくでしょう。空のゲームオブジェクトを選択したままで Play ボタンを押すと軽く驚くかもしれません。このことを試して,空のゲームオブジェクトに Rigidbody がどのような機能を追加したのか注目してください。(ゲームオブジェクトに付いているコンポーネントの Y の値が減り始めます。これは Unity の物理エンジンによる重力の影響でゲームオブジェクトが落下するためです。)

Rigidbody コンポーネントがアタッチされている空のゲームオブジェクト
Rigidbody コンポーネントがアタッチされている空のゲームオブジェクト

もう一つの選択肢は Component Browser (コンポーネントブラウザ)を使うことです。これは,オブジェクトのインスペクターにある Add Component ボタンより開くことができます。

コンポーネントブラウザ
コンポーネントブラウザ

ブラウザはカテゴリーによってコンポーネントの選択を便利にし,名前を用いてコンポーネントを絞り込むことが出来る検索ボックスもあります。

一つのゲームオブジェクトに対していくつかのコンポーネントを組み合わせてアタッチすることができます。いくつかのコンポーネントは他のものと組み合わせることで最良の働きをします。例えば,リジッドボディはコライダのどれかと作用します。リジッドボディは NVIDIA PhysX 物理エンジンを通してトランスフォームを管理し,コライダはリジッドボディを他のコライダと衝突させ,相互作用を起こせるようにします。

特定のコンポーネントの使用についてより深く知りたいのであれば,関連したコンポーネントリファレンスページでいずれかのコンポーネントについて読むことができます。または, Unity のインスペクターでコンポーネントの上部にある小さな ? マークをクリックすることでもリファレンスページにアクセスすることができます。

コンポーネントの編集

コンポーネントの素晴らしい側面の一つは柔軟性にあります。コンポーネントをゲームオブジェクトにアタッチした時,コンポーネント内の異なった値や Properties (プロパティ)が表示されます。 それらはゲームをビルドする間や,スクリプトによってゲームを実行している時に調整されます。プロパティには主要な二つの種類があります。それは, Values (値型)と References (参照型)です。

以下の画像をご覧下さい。これは Audio Source コンポーネントを持った空のゲームオブジェクトです。インスペクターに表示されている Audio Source の全ての値は初期値です。

このコンポーネントは参照型プロパティを一つと,値型プロパティを七つ内包しています。 Audio Clip は参照型プロパティです。この Audio Source が再生され始めた時, Audio Clip プロパティで参照されている音声ファイルの再生が試みられます。参照が指定されていなければ,一つも再生用の音声が無い為エラーが起こります。インスペクター内でファイルを参照しなければなりません。参照はプロジェクトビューから音声ファイルを参照型プロパティにドラッグするか,オブジェクトセレクターを使用することで簡単に行えます。

Audio Clip プロパティで効果音ファイルが参照されています
Audio Clip プロパティで効果音ファイルが参照されています

コンポーネントはどんな種類のコンポーネント,ゲームオブジェクト,アセットに対しても参照を持つことができます。 参照型プロパティの編集 ページで参照の割り当てについてより学ぶことができます。

Audio Clip の残りのプロパティは全て値型プロパティです。これらはインスペクターで直接調整することができます。 Audio Clip の 値型プロパティはトグル,数字,ドロップダウンのどれかです。しかし,値型プロパティにはテキスト文字列,色,カーブ,その他の種類があります。これらのプロパティの種類や,値型プロパティの編集については 値型プロパティの編集 ページをご覧ください。

コンポーネントのコンテキストメニューコマンド

コンポ―ネントのコンテキストメニューは数々の便利なコマンドを有しています。

コンポーネントのコンテキストメニュー
コンポーネントのコンテキストメニュー

同様のコマンドがインスペクターのコンポーネントパネルの一番の右上にある「歯車」アイコンからも利用できます。

リセット(Reset)

このコマンドは,最も最近に編集していたコンポーネントのプロパティの値を元に戻します。

削除(Remove)

Remove Component はゲームオブジェクトにアタッチしているコンポ―ネントがもう必要でない場合に利用できるコマンドです。コンポ―ネント同士で依存し合っている組み合わせがあることに注意して下さい。例えば, Hinge Jointリジッドボディ もアタッチされている場合にのみ作用します。もし他のコンポーネントに依存しているコンポーネントを削除しようとすれば警告メッセージが表示されます。

上に移動(Move Up)/下に移動(Move Down)

Image Effects コンポ―ネントはそれぞれ,描画された見た目に対して特定の視覚効果を適用します。しかし,効果を適用される順番が重要です。コンテキストメニューには上に移動(Move Up)と下に移動(Move Down)があります。

コピー/ペースト

Copy Component コマンドは型と,選択中のコンポーネントのプロパティ設定を保存します。これらは Paste Component Values を用いて,型が一致している他のコンポーネントに貼り付けることができます。また, Paste Component As New を用いれば,あるオブジェクトに対してコピーした値で新しいコンポーネントを作成することもできます。

プロパティのテスト

ゲームが Play Mode (プレイモード)の間は,どのゲームオブジェクトのプロパティでもインスペクターから自由に変更することができます。例えば,異なった高さのジャンプを試してみたくなるかもしれません。もしも Jump Heightというプロパティをスクリプトで作成しているのなら,プレイモードを始めて,値を変更し,何が起こるかを見るためにジャンプボタンを押してみましょう。その後プレイモードを止めることなく,再度値を変更してほんの少しの間に結果を確かめることができます。プレイモードを止めれば,プロパティはプレイモードが始まる前の値に戻ります。だから,作業内容を失わずに済みます。このワークフローは実験や,調整,何度も繰り返すだけの時間を費やさずにゲーム内容を洗練することに対して多大な助力となります。プレイモードでいずれかのプロパティに試してみて下さい。感動すると思いますよ。

ゲームオブジェクトとコンポーネント間の関係
コンポーネントとスクリプトの関係