【学習】Unity におけるオブジェクトの考え方(シーン・GameObject・コンポーネント)

広告

これまでの学習では、

  • Unity エディタの画面構成を学んだ
  • GameObject と Transform でシーン上にオブジェクトを配置した

という流れで、画面上の「もの」 を扱ってきました。

しかし Unity では「オブジェクト」という言葉が、シーン上の見え方プログラムの中で少しずつ意味が変わります。ここをはっきりさせておくと、これから出てくる MonoBehaviour や Inspector の参照 が理解しやすくなります。

今回は Unity らしいオブジェクト観 を、用語の地図として整理します。手順のハウツーは次回以降に進みます。


今日学ぶこと

  • シーン … ゲームの1画面分の世界。Hierarchy に並ぶのはこの中身
  • GameObject … シーンに存在する「器」。そのままでは中身が空でもよい
  • コンポーネント … GameObject に「機能」を足すパーツ(Transform、スクリプトなど)
  • C# のクラス と Unity 上のオブジェクト のつながり(ざっくり)

まず「シーン」という箱

シーン(Scene) は、ゲームの1局面を表す単位です。

  • タイトル画面、ステージ1、ゲームオーバー画面など、用途ごとにシーンを分けることが多い
  • Hierarchy に並んでいるのは、現在開いているシーンの中身
  • シーンを保存すると、その配置情報がシーンファイル(.unity)として残る

「オブジェクトを置く」とは、シーンという箱の中に GameObject を並べるイメージです。


GameObject は「器」、中身はコンポーネント

GameObject は、Unity がシーン上で扱うひとつの単位です。

  • 名前が付き、Hierarchy に行として表示される
  • 必ず Transform(位置・回転・大きさ)が付いている
  • それ以外は コンポーネントを追加して 見た目や動きを決める
イメージ説明
GameObject空の箱に名前が付いたもの
Transform箱をどこに置くか(必須)
その他のコンポーネントスプライトを描く、当たり判定を付ける、スクリプトで動かす、など

同じ「オブジェクト」という言葉でも、会話の文脈で次のどちらかを指すことがあります。

  • Hierarchy 上の1行 … だいたい GameObject のこと
  • プログラムから見た参照 … 後述の GameObject 型や Transform 型の変数

コンポーネント=「そのオブジェクトの機能のかたまり」

コンポーネントは、GameObject にアタッチされる部品です。

  • Sprite Renderer … 画像を表示する
  • Rigidbody 2D … 物理演算で動かす
  • Box Collider 2D … 当たり判定の形を決める
  • 自作の C# スクリプト … MonoBehaviour を継承したクラスが、ここに1つとして付く

1つの GameObject に、複数のコンポーネントが付きます。
「このオブジェクトは何をするか」は、付いているコンポーネントの集合で決まります。


C# の「クラス」とはどうつながるか

C# の授業では、次のようにクラスからインスタンスを作る習慣が身についていることが多いです。

Enemy e = new Enemy();

これは 純粋な C# の世界では正しい考え方です。

一方 Unity では、多くの場合は次の順序になります。

  1. エディタで GameObject を置く(またはプレハブから生成する)
  2. Inspector で スクリプト(MonoBehaviour)をアタッチする
  3. 実行時、そのスクリプトの Start や Update が呼ばれる

つまり 「コードがオブジェクトを生む」だけではなく、「すでにある GameObject にコードが乗る」 という見方が中心になります。

スクリプトで public Enemy enemy; のように書き、Inspector で別のオブジェクトをドラッグしてつなぐのは、まさにこの構造の表れです。


「Unity のオブジェクト」と「普通の C# オブジェクト」

用語がややこしいので、入門段階では次のように分けて考えるとよいです。

呼び方ざっくり意味
GameObject / Componentシーンに存在し、Inspector で見えるもの
MonoBehaviour を継承したクラスそのコンポーネントを実装している C# の型
new で作る普通のクラスデータのまとまり、計算用のヘルパーなど(シーンに自動では現れない)

Unity では シーンに出したいものは GameObject 経由裏で計算だけするものは普通のクラス、という住み分けがよく使われます。

※ UnityEngine.Object と System.Object の違いなど、さらに踏み込んだ話は別の機会で十分です。まずは 「シーン上の単位=GameObject+コンポーネント」 を押さえましょう。


このあとシリーズで何をするか

この記事では 考え方の地図 にとどめました。続く記事では次の順で、実際の操作とコードに進みます。

  1. C# スクリプトをアタッチする … MonoBehaviourStartUpdate
  2. Inspector でオブジェクト同士をつなぐ … new 中心のイメージから一歩進む
  3. 変数を Inspector から編集する … SerializeField など

「オブジェクト」という言葉が出てきたら、Hierarchy の1行なのか、コンポーネントなのか、C# の型の話なのかを意識すると、説明や検索キーワードがぶれにくくなります。


重要ポイント

  • シーン … ゲームの1局面。Hierarchy はその中身の一覧
  • GameObject … シーン上の単位。Transform が必ず付く
  • コンポーネント … 機能のパーツ。複数付く
  • Unity では 「先にシーンにあり、コードが乗る」 という発想がとても多い

発展アイデア

  • プレハブ … あらかじめ GameObject+コンポーネントの形を保存し、実行時に複製する(シリーズ後半で扱います)
  • ScriptableObject … シーンに出さないデータ資産としての「オブジェクト」(中級以降)

GameObject とコンポーネントのイメージが固まったら、次は スクリプトをアタッチ して動きを付けましょう。

訪問数 21 回, 今日の訪問数 21回

広告

Unity

Posted by hidepon