コンポーネントの使い方
マニュアル     リファレンス     スクリプト   
Unityマニュアル > ユーザガイド > シーンの構築 > コンポーネントの使い方

このドキュメントは有志により翻訳されたもので、オフィシャルではありません。オリジナルのページはこちら
This document is unofficially translated by users.Please see the original document here.

翻訳に関する修正など、ご連絡はこちらまで。
Please send e-mail to here, when you have any question about the translation.

コンポーネントの使い方

コンポーネント(Components)はゲーム中でのオブジェクト動作の基礎となるものです。 全てのゲームオブジェクトの機能的部品です。 コンポーネントとゲームオブジェクトの関係を十分に理解できていなければ、ゲームオブジェクトのページを先に読む事を、強くお進めします。

ゲームオブジェクトは多くの異なるコンポーネントを含む、コンテナです。デフォルトで、全てのゲームオブジェクトは自動的に、移動コンポーネントを持っています。移動はゲームオブジェクトがどこに位置するか、また、回転や縮尺を指し示すものです。移動コンポーネントが無ければ、ゲームオブジェクトはワールドに位置する事が出来ません。例として、空のゲームオブジェクトを作ってみましょう。GameObject->Create Emptyをメニューからクリックします。 ゲームオブジェクトを選択し、インスペクタを見てみましょう。

空のゲームオブジェクトにも移動コンポーネントが有ります

ゲームオブジェクトに、どのコンポーネントが付加されているかを確認する場合は、インスペクタを使えば良い事を覚えておいてください。コンポーネントが追加されたり削除されたりしても、インスペクタは常に最新の状態を表示します。コンポーネント(スクリプトを含む)の属性を変えるのにもインスペクタを使います。

コンポーネントの追加

コンポーネントメニューを使って、選択したゲームオブジェクトに、コンポーネントを追加できます。 リッジドボディ(Rigidbody)を、先ほど生成した、空のゲームオブジェクトに追加してみましょう。選択しComponent->Physics->Rigidbody をメニューから選びます。追加すると、リッジドボディの属性がインスペクタに表示されます。 空のゲームオブジェクトが選択された状態でPlayボタンを押すと、ちょっと驚く現象が起きるでしょう。リッジドボディがどのような機能を空のゲームオブジェクトに追加したかを確認してみてください。

リッジドボディコンポーネントが空のゲームオブジェクトに付加された

ゲームオブジェクトに付加できるコンポーネントの種類や数に制限は有りません。 いくつかのコンポーネントは他のものと組み合わせる事で、最適に働くでしょう。例えば、リッジドボディは衝突物(Collider)と共に働きます。リッジドボディはAgeia PhysX物理エンジンを使い、移動を制御します。衝突物はリッジドボディが他の衝突物と衝突する機能を提供します。 コンポーネントの組み合わせに関する例は、パーティクルシステム(Particle System)です。パーティクルエミッタ(Particle Emitter)パーティクルアニメータ(Particle Animator)パーティクルレンダラ(Particle Renderer)を利用して、動くパーティクルを生成します。

パーティクルコンポーネントについて詳しく知りたい場合は、 コンポーネントリファレンス内のパーティクルに関するエントリを参照してください。 また、インスペクタのコンポーネントヘッダ部分にある、小さな?をクリックする事で, コンポーネントのリファレンスページにアクセスできます。

コンポーネントの編集

コンポーネントの最も大きな特徴の1つは柔軟性です。ゲームオブジェクトにコンポーネントを付加すると、ゲーム開発中にはエディタで、ゲーム実行中にはスクリプトを用いてコンポーネントの値や属性(Properties)を調整できます。 2つの重要な属性が有ります: 値(Values)参照(References)です。

下の画像を見てください。オーディオソース(Audio Source)コンポーネントを持つ、空のゲームオブジェクトが有ります。 インスペクタ上でオーディオソースの全ての値はデフォルト値です。

このコンポーネントは1つの参照属性と7つの値属性を持っています。オーディオクリップ(Audio Clip)は参照属性です。 このオーディオソースが再生されると、オーディオクリップ属性が参照するファイルのオーディオを再生しようとします。 もし、参照が無かった場合、再生するオーディオが無いため、エラーが発生します。インスペクタで必ずファイルを参照しなければなりません。オーディオファイルをプロジェクトビューから参照属性にドラッグアンドドロップすると簡単です。

オーディオクリップ属性に、サウンドエフェクトファイルが参照されました

コンポーネントは、ファイルやゲームオブジェクト等、他の全ての型のコンポーネントへの参照を持つ事が出来ます。 単に、適切な参照属性にドラッグアンドロロップするだけで大丈夫です。 この、参照の型はスクリプトを使う場合、特に簡便でパワフルです。 スクリプトと属性の使用法については、チュートリアルページの、スクリプトチュートリアルを参照してください。

オーディオクリップ上の残りの7つの属性は値属性です。クリックやエンターキーを押す事で、簡単に編集できます。キーボードを使って値を入力し、エンターを押せば、値が保存されます。

オーディオクリップの値属性は数値ですが、文字列の属性もあり得ます。たとえば、テキストメッシュ(Text Mesh)コンポーネントは、アルファベットと数字を受け付ける、テキスト(Text)属性を持ちます。

いくつかの値は(Text Mesh)コンポーネントのテキスト(Text)属性のように、文字列値属性を持ちます。

属性のテスト出力

ゲームがプレイモード(Play Mode)であっても、ゲームオブジェクトのインスペクタを使い、自由に属性を変更する事が出来ます。例えば、ジャンプの高さをいくつか試してみたい場合が有るでしょうう。 Jump Height属性をスクリプトで作っておけば、プレイモードで値を変え、ジャンプボタンを押す事で、高さを調節する事が出来ます。プレイモードを終了する事無く、値を変え、瞬時に結果を確認する事が出来ます。プレイモードを終了すると、属性はプレイモードに入る前の値に戻されます。このワークフローは、実験と調整において、非常にパワフルです。ツールの操作に多大な時間を使う事なく、ゲームプレイを洗練できます。きっと、感動すると思いますよ。

コンポーネントの削除

コンポーネントを削除したければ、インスペクタ上のヘッダ部分で右(Option)クリックし、Remove Componentを選択してください。または、 コンポーネントヘッダの?の隣にある、オプションアイコンを左クリックします。全ての、属性値が失われます。元に戻せません!。コンポーネントを削除するときは十分に気をつけてください。

コンポーネントとスクリプトの関係

スクリプトはコンポーネントに比べて、始めは難しく感じるかもしれませんが、スクリプトもコンポーネントの種類の1つです。基本的に、あなたが自分で作れるコンポーネントであるだけです。コンポーネントのメンバを定義しインスペクタに公開します。あなたが書いた機能を実行してくれるでしょう。 Although seem very different from Components at first, the truth is that a

スクリプトコンポーネント(Scripting Components)

多くのコンポーネントがスクリプトから直接アクセスできます。例えば、移動コンポーネントの移動(Transform)機能にアクセスする時は、transform.Translate()、または、gameObject.transform.Translate()と書けばよいでしょう。 全てのスクリプトはゲームオブジェクトに付加されるため、これで動作します。transformと書けば、暗黙にゲームオブジェクトの移動コンポーネントにアクセスできます。 明示的にアクセスするにはgameObject.transformと書きます。 どちらで記述しても、差異はありません。スクリプトを書く人の好みです。

暗黙にアクセスできるコンポーネントのリストはin the スクリプトリファレンスゲームオブジェクトページを参照してください。

GetComponent()を使う

GameObjectクラスのメンバでないコンポーネントも多く有ります。それらには暗黙にアクセスする事は出来ないので、明示的にアクセスする必要が有ります。GetComponent("component name")を呼び出し、戻り値を保持します。ゲームオブジェクトに付加された、異なるスクリプトを参照したい場合に、良く用いられます。

Script Bを書いているとして、同じゲームオブジェクトに付加されたScript Aを参照したいときは、GetComponent()を使って参照する必要が有ります。Script Bにおいて、次のようにかけます:

scriptA = GetComponent("ScriptA");

これで、 Script Bから、Script Aの変数にscriptA.variableNameと記述してアクセスする事が出来ます。GetComponent()の、さらに詳しい使い方は、GetComponent() スクリプトリファレンスページを参照してください。