GameObjectってなんですか?

  • 2018.10.11
  • 2021.02.27
  • Unity
GameObjectってなんですか?

GameObjectは空っぽの入れ物

GameObjectは空っぽの入れ物です。UnityではGameObjectに様々な機能をくっつけ、またC#等のスクリプトからGameObject等を制御してゲームを作成します。UnityではGameObjectに色々くっつける、設定する事によって何でも作成します。

敵、自機、弾、背景、UI、BGM、・・・

本当にGameObjectで何でも作成します。GameObjectはメニューの次で作成できます[GameObject]>[Create Empty](これ以外の方法も色々あります)GameObjectを作成すると次の様なものができます。

GameObject
└ transform(コンポーネント)

GameObjectは空っぽと言いましたがいきなりウソついてました。transformというコンポーネントだけはついてきます。transformというコンポーネントには次の機能が付いてます

・GameObjectの位置・向き・大きさ(の倍率)が書いてある、変更もできる

例えば、transformの持っている位置の数字を変える事によって、GameObjectを画面内の自由な位置に移動させることができます。transformには他にも色々な機能が付いていますが私からの記述は省略し、公式ドキュメントへのリンクを貼っておきます。

(公式)Transform - Unity スクリプトリファレンス

複数のGameObject

複数のGameObjectを作成する事により、敵や自機を作成できます。

Enemy(GameObject)
 └ transform(コンポーネント)

Player(GameObject)
└ transform(コンポーネント)

上は敵と時機、二つのGameObjectを置いた例です。「Enemy」と言う名前の敵のGameObjectと、「Player」と言う名前の自機のGameObjectです。

GameObjectにコンポーネントを付ける

GameObjectに色々機能を追加する(アタッチする)事により、敵や自機等を作り上げる事が出来ます。例えば2Dの敵を作ってゆく例です。

Enemy(Gameobject)
 ├ transform(Unityが用意している位置や向きのコンポーネント)
 ├SpriteRendrer(Unityが用意している絵のコンポーネント)
 ├RigidBody2D(Unityが用意している物理挙動のコンポーネント)

 ├CircleClider2D(Unityが用意している当たり判定のコンポーネント)
 └Enemy.cs(自分で書いたC#のスクリプト)

絵のコンポーネントや、当たり判定のコンポーネント、あるいは自分で書いたC#のスクリプト等を追加しました。この、コンポーネントを追加する事をUnityではアタッチすると言います。
また、自分で記述したスクリプトもコンポーネントの一つです(結構重要です)

他のゲームオブジェクトの情報を知りたい

自分以外の、他のGameObjectを情報を知りたい・変更したい場合は非常に多いです。というか、普通の事です。
敵にアタッチしたスクリプトから弾を撃つ例を出します。

Enemy(GameObject)
 └Shot.cs(弾を撃つスクリプト) ←このスクリプトから弾を撃つ

敵から自機に向かって弾を撃ちたいです。弾を撃つ元の敵の位置の情報が必要なのは当たり前ですが、弾を撃つ先の自機の位置の情報も必要です。そして、GameObjectの位置の情報はtransformが持ってます。という事は、自機のGameObjectが持っている自機のtransformの情報が必要です。

Player(GameObject)
└transform(コンポーネント) ←これが必要。ここに自機の位置が書いてある。

自機の位置情報を持っているtransformは自機のGameObjectにアタッチされています。このような場合、まず自機のGameObjectを探し、自機のGameObject経由で自機のtransformの情報を取得します。

整理すると、敵から弾を撃つスクリプトは次の様な事をする必要があります(方法はこれだけではなく、他にもあります)

[敵から弾を撃つためにはこんな事が必要]

  1. 自機のGameObjectを取得する
  2. 自機のGameObjectから自機のtransformを取得する
  3. 自機のtransformから自機の位置情報を取得する
  4. これで自機の位置が分かった!敵から自機に向かって弾を撃てる!

 

Player(GameObject)       ←1.まずこれを探す
 └ transform(コンポーネント) ←2.次にこれを探し、ここから自機の位置情報を取得する

このようにGameObjectを一度通る必要があるので、他のGameObjectを必要とするケースは山のように出てきます。

GameObjectは入れ物

話を戻して纏めますと、ここまで説明したようにGameObjectは色々なコンポーネントがくっつく入れ物・親玉だという事になります。

Unityカテゴリの最新記事