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の情報を取得します。
整理すると、敵から弾を撃つスクリプトは次の様な事をする必要があります(方法はこれだけではなく、他にもあります)
[敵から弾を撃つためにはこんな事が必要]
- 自機のGameObjectを取得する
- 自機のGameObjectから自機のtransformを取得する
- 自機のtransformから自機の位置情報を取得する
- これで自機の位置が分かった!敵から自機に向かって弾を撃てる!
Player(GameObject) ←1.まずこれを探す
└ transform(コンポーネント) ←2.次にこれを探し、ここから自機の位置情報を取得する
このようにGameObjectを一度通る必要があるので、他のGameObjectを必要とするケースは山のように出てきます。
GameObjectは入れ物
話を戻して纏めますと、ここまで説明したようにGameObjectは色々なコンポーネントがくっつく入れ物・親玉だという事になります。