Unityを始めて最初に戸惑うのが、「キャラクターも、カメラも、ライトも、ぜんぶ同じ『GameObject』らしい」という独特の世界観ではないでしょうか。実はこれこそがUnityの設計思想の核心で、ここさえ掴めばエデ ィタの見え方が一変します。
Unityの世界では、シーンに存在する全ての「モノ」は ゲームオブジェクト (GameObject) と呼ばれ、そこに動きや機能、見た目を与えるのが コンポーネント (Component) です。例えるなら、ゲームオブジェクトは「空の器」や「プラモデルの本体」、コンポーネントはそこに取り付ける「エンジン」や「装飾パーツ」。部品の組み合わせしだいで、一つのモノが多彩な役割を持てるのです。
この記事でわかること
- GameObjectとコンポーネントの関係(「器」と「部品」)
- Cubeなどの標準オブジェクトの正体
- 自作スクリプトをコンポーネントとして動かす方法
- コンポーネント指向設計の考え方
基本概念
ゲームオブジェクト (GameObject)
ゲームオブジェクトは、Unityのシーンを構成する基本的な要素です。プレイヤーキャラクター、敵、木、壁、ライト、カメラなど、画面に見えるものから見えないものまで、すべてがゲームオブジェクトです。
しかし、作成されたばかりの「空の」ゲームオブジェクトは、それ自体ではほとんど何もできません。唯一持っているのは、 Transformコンポーネント だけです。これは、オブジェクトの「位置 (Position)」「回転 (Rotation)」「スケール (Scale)」を管理するための、最も基本的なコンポーネントです。
つまり、ゲームオブジェクトは、これから様々な機能を追加していくための「土台」や「入れ物」と考えるのが最も分かりやすいでしょう。
コンポーネント (Component)
コンポーネントは、ゲームオブジェクトに特定の機能を追加するための「部品」です。Unityには多種多様な組み込みコンポーネントが用意されています。
- Mesh Renderer: オブジェクトの形(メッシュ)を画面に描画する。
- Rigidbody: オブジェクトに物理的な挙動(重力、衝突など)を与える。
- Collider: オブジェクトの当たり判定の形状を定義する。
- Audio Source: オブジェクトから音を再生する。
- Light: オブジェクトを光源にする。
- Camera: オブジェクトをカメラとして、ゲーム世界を映し出す。
そして最も重要なのが、 自作のC#スクリプトもコンポーネントの一種として扱われる という点です。独自のロジックや振る舞いは、スクリプトコンポーネントを作成し、ゲームオブジェクトに追加することで実現します。
「器」であるGameObjectに、部品であるコンポーネントをはめ込んで機能を組み立てていく——この関係を図にすると以下のようになります。

実装方法
実際にUnityエディタでゲームオブジェクトとコンポーネントを扱ってみましょう。
1. ゲームオブジェクトの作成
Hierarchy(ヒエラルキー)ウィンドウで右クリックし、Create Emptyを選択すると、Transformコンポーネントだけを持つ空のゲームオブジェクトが作成されます。これが最も純粋な「器」です。
一方で、3D Object > Cubeなどを選択すると、 立方体のゲームオブジェクトが作成されます。このCubeをInspector(インスペクター)ウィンドウで確認すると、Transformに加えて以下のコンポーネントが自動的に追加されていることがわかります。
- Mesh Filter: 表示する形状(メッシュ)として「Cube」を指定。
- Mesh Renderer: Mesh Filterで指定された形状を画面に描画。
- Box Collider: 立方体形状の当たり判定。

つまり「Cube」とは特別な存在ではなく、 空のゲームオブジェクトに「描画」と「当たり判定」の部品を最初からセットしたもの にすぎません。Unityのメニューにある様々なオブジェクトは、すべてこの「よく使う部品の組み合わせ」だと考えると見通しが良くなります。
2. コンポーネントの追加
コンポーネントは、ゲームオブジェクトに機能を追加するために後から自由に追加できます。先ほど作成したCubeに物理演算を加えてみましょう。
- HierarchyでCubeを選択します。
- Inspectorウィンドウの一番下にある
Add Componentボタンをクリックします。 - 検索ボックスに「Rigidbody」と入力し、表示された
Rigidbodyを選択します。
これだけで、CubeにRigidbodyコンポーネントが追加されました。この状態でゲームを再生すると、Cubeが重力に従って落下するようになります。これが、コンポーネントによって機能が追加された瞬間です。
3. スクリプトコンポーネントの追加
次に、C#スクリプトを作成して、独自の動きを追加してみましょう。
- Projectウィンドウで右クリックし、
Create > C# Scriptを選択します。名前を「SimpleMover」などに変更します。 - 作成したスクリプトをダブルクリックして開き、以下のコードを記述します。
using UnityEngine;
// MonoBehaviourを継承することで、このクラスはコンポーネントとして振る舞う
public class SimpleMover : MonoBehaviour
{
public float speed = 5f;
// 毎フレーム呼び出されるUpdate関数
void Update()
{
// このスクリプトがアタッチされたGameObjectのTransformを操作する
// 右方向に、speedの速さで毎秒移動させる
transform.Translate(Vector3.right * speed * Time.deltaTime);
}
}
- コードを保存し、Projectウィンドウから
SimpleMoverスクリプトをHierarchyのCubeオブジェクトにドラッグ&ドロップします。
これで、CubeにSimpleMoverコンポーネントが追加されました。ゲームを再生すると、Cubeが重力で落下しながら右方向に移動していくのが確認できます。このように、自作スクリプトもコンポーネントとしてゲームオブジェクトに追加することで、そのオブジェクトの振る舞いを自由に制御できるのです。
この「部品の組み合わせで役割が決まる」という考え方は、実際の ゲーム内の様々なオブジェクトに当てはまります。プレイヤーも、ライトも、カメラも、器は同じGameObject。違うのは中の部品だけです。

注意点とベストプラクティス
- 多くのコンポーネントは一時的に無効化できる: Inspectorでコンポーネント名の左にチェックボックスがあるもの(スクリプト・Renderer・Collider・Lightなど)は、チェックを外すとそのコンポーネントだけを無効化できます。「このスクリプトが原因か確認したい」「当たり判定だけ一時的に切りたい」といったデバッグの際に便利です。ただし、TransformやRigidbodyのように チェックボックスを持たない(無効化できない)種類もあります。不要になったコンポーネントは、コンポーネント右上の「⋮」メニューから「Remove Component」で削除できます。
- コンポーネント指向設計: Unityの考え方は「コンポーネント指向」と呼ばれます。一つの巨大なクラスですべてを管理するのではなく、「移動する機能」「攻撃する機能」「HPを管理する機能」といったように、機能単位でコンポーネント(スクリプト)を小さく分割して作成し、それらを組み合わせてゲームオブジェクトを構築するのが良い設計です。
- 一つのゲームオブジェクトに多くの役割を持たせない: 例えば、「プレイヤー」というゲームオブジェクトが、移動、攻撃、インベントリ管理、UI表示など、あまりに多くの役割を一つのオブジェクトで担うと、複雑になりがちです。子オブジェクトを活用し、「武器を持つための空オブジェクト」や「エフェクトを発生させるための空オブジェクト」のように、役割を分散させると管理がしやすくなります。

実践:同じ部品を組み替えて3つのオブジェクトを作る
「部品の組み合わせで役割が決まる」を、手を動かして体験してみましょう。RPGのくるくる回るコイン、ホラーゲームの点滅する非常灯、レースゲームの回転する電飾看板——ジャンルは違っても、これらは たった2つの小さな部品の組み替え で全部作れます。
