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つの小さな部品の組み替え で全部作れます。

用意する部品(スクリプト)は2つだけです。1つ目は「回す」部品。
using UnityEngine;
// 毎フレーム回転させる部品
public class Rotator : MonoBehaviour
{
public float speed = 90f; // 1秒あたりの回転角度
void Update()
{
transform.Rotate(0f, speed * Time.deltaTime, 0f);
}
}
2つ目は「点滅させる」部品です。同じオブジェクトに付いたLightコンポーネントを、一定間隔でオン・オフします。
using UnityEngine;
// 同じオブジェクトのLightを一定間隔で点滅させる部品
public class Blinker : MonoBehaviour
{
public float interval = 0.5f; // 点滅の間隔(秒)
private Light targetLight;
private float timer;
void Awake()
{
// 同じオブジェクトの別の部品はGetComponentで取得する(詳しくは後の記事で)
targetLight = GetComponent<Light>();
}
void Update()
{
timer += Time.deltaTime;
if (timer >= interval)
{
timer = 0f;
targetLight.enabled = !targetLight.enabled; // 有効/無効を切り替え
}
}
}
あとは器(GameObject)の側で、部品を組み替えるだけです。
- 回るコイン:
3D Object > Cylinderを薄くつぶして、Rotatorを追加 → くるくる回るコインの完成 - 点滅する非常灯:
Create EmptyにLight(Point Light)とBlinkerを追加 → 一定間隔で明滅する警告灯の完成 - 回る電飾看板:
3D Object > Cubeを看板の形にして、Rotator・Light・Blinkerを 全部 追加 → 回りながら点滅する看板の完成
ポイントは2つです。 「部品は機能1つにつき1個作る」(「回す」と「点滅させる」を1つのスクリプトにまとめないから、自由に組み合わせられます)と、 「役割の違いは器の側の組み合わせで決める」(コインと看板でスクリプトを書き分ける必要はありません。同じRotatorが両方で働きます)。この気持ちよさが、コンポーネント指向の本質です。
おまけ:先に知っておくと良いこと
「器と部品」の考え方が掴めたら、次はこのあたりに進むとスムーズです。どれも今すぐ必要な知識ではありませんが、名前だけ覚えておくと迷子になりません。
- 組み上げたオブジェクトを量産したい: 部品を組み上げたGameObjectは Prefab(プレハブ) として保存すると、いくつでも複製・再利用できます。敵や弾など「同じ構成のモノ」はすべてPrefab化するのが基本です。Prefabの記事 で解説しています。
- 部品同士を連携させたい: スクリプトから同じオブジェクトの 別の部品(RigidbodyやColliderなど)を操作するには
GetComponentを使います。コンポーネント指向の実践で必ず使う機能です。GetComponentの記事 を参照してください。 - オブジェクトが増えてきたら分類が必要: 「敵だけをまとめて処理したい」「地面とだけ当たり判定したい」といった場面では タグとレイヤー で分類します。レイヤーとタグの記事 が参考になります。
まとめ
ゲームオブジェクトとコンポーネントは、Unityにおける開発の根幹です。この二つの関係を理解することが、Unityをマスターするための第一歩と言えるでしょう。
- ゲームオブジェクト: シーンに存在する全ての「モノ」の土台となる「器」。
- コンポーネント: ゲームオブジェクトに機能や振る舞いを与える「部品」。自作スクリプトもコンポーネントの一種。
- コンポーネント指向: 小さな機能単位のコンポーネントを組み合わせることで、複雑なオブジェクトを構築する。
まずはエディタを操作して、様々なコンポーネントをゲームオブジェクトに追加し、その変化を観察することから始めてみてください。