こんにちは、Unityエンジニアのオオバです。
Unityを始めるとまず登場するのは GameObject(ゲームオブジェクト)。Unityは 「GameObjectにコンポーネントを追加してゲームを開発していく」 といった説明よく目にしますよね。ただ、Unityを始めたばかりの人はそもそも「GameObject」も「コンポーネント」もどちらもよくわからないと思います。
オオバもUnityを初めて11年。最初はまったくわかりませんでした。わからないなりにUnityを触り、仕事して慣れていきました。そういうやり方も間違ってはいないと思いますが、 事前知識を得た上で取り組む ほうが確実に「時短」したと断言できます。
つまり GameObjectとコンポーネントの関係性を頭に入れた上でUnityを始める方が効率的 です。なんとなく始めても大丈夫なんですが、どうしても無駄な時間がかかってしまいます。
そこで本記事は初心者向けに GameObjectを徹底解説 しました。もちろんGameObjectは「コンポーネントありきの機能」であるため、コンポーネントの話題なしに語ることはできません。GameObject、コンポーネントどちらも登場しますが、 GameObjectにフォーカス してお届けします。
「コンポーネント」 についてはこちらの記事で詳しく解説していますのでぜひ読んでみてください。
→【保存版】Unityのコンポーネント徹底解説【Unity基礎】
確実に言えること GameObjectとコンポーネントの理解なしに、Unityでのゲーム開発は不可能 だということです。GameObjectの意味や役割を踏まえつつ、基本的な使い方、注意点など 11年のUnity開発経験をふんだんに詰め込みました。
この記事を読むだけでGameObjectについて 完璧に理解 できると思います。ぜひ最後まで読んでみてください。
GameObjectとは十徳ナイフの持ち手
結論を簡単にまとめます。
①GameObjectとは十徳ナイフの持ち手
②GameObjectの動きを定義するのがコンポーネント
③GameObjectにはコンポーネントの管理機能を持っている
例えるなら GameObjectは十徳ナイフの持ち手 です。
ちなみにナイフやハサミ、栓抜きといった他機能は コンポーネント です。 コンポーネントはGameObjectの用途を定義 します。Unity内でも同じです。ライトやカメラといった機能はGameObjectではありません。これらはあくまでコンポーネント。 GameObjectにセットすることで機能 します。
十徳ナイフの例の通り、1つのGameObjectに対していくつもコンポーネントを追加できます。つまり GameObjectにはさまざまな機能がいくつも追加できるということ です。ぜひ最初にこの概念を理解しておいてください。
ここからはGameObjectの特徴、使い方について解説していきます。
👉DOTweenの教科書を読んでUnityアニメーションをプログラミングしてみよう!
- GameObjectの特徴4選
- 特徴①GameObjectはどれも同じ
- 特徴②GameObjectにはON/OFFがある
- 特徴③GameObjectには必ずTransformコンポーネントがセット
- 特徴④GameObjectは階層を作れる
- GameObjectの基本的な使い方6選
- 使い方①GameObjectの取得
- 使い方②コンポーネントの追加と取得
- 使い方③GameObjectのPrefab化
- 使い方④SetActiveでGameObjectのON/OFF切り替え
- 使い方⑤GameObjectの生成
- 使い方⑥GameObjectの削除
- GameObjectを使いこなすテクニック
- 【注意点】GameObject.Findは使わないほうがいい
- UnityのGameObjectまとめ
GameObjectの特徴4選
まずはGameObjectの特徴を4つ紹介します。
①GameObjectはどれも同じ
②GameObjectにはON/OFFがある
③GameObjectには必ずTransformコンポーネントがセット
④GameObjectは階層を作れる
特徴①GameObjectはどれも同じ
コンポーネントとの比較になってしまいますが、 「GameObject自体はどれも同じ」 です。逆にコンポーネントは無数に存在するということ。コンポーネントとは「ゲームの機能」。自作もできるため種類は無限大なのです。
一方GameObjectは1種類しか存在しません。そして、 GameObjectに拡張性はありません。 _GameObject自体をカスタマイズして機能拡張できないということです。機能を拡張するのはコンポーネントの役割です。 _GameObjectはあくまでコンポーネントを受け入れる箱 なのです。
特徴②GameObjectにはON/OFFがある
GameObjectにはON/OFFが存在します。
Inspectorウィンドウのチェックボックスを切り替えることでON/OFFが切り替わります。
このON/OFFによって コンポーネントの挙動 に影響を与えます。コンポーネントの挙動がどのように変化するか解説していきます。
GameObjectがOFFになるとコンポーネントも止まる
コンポーネントには イベント関数 と呼ばれる特殊な関数が用意されています。それらは特定のタイミングでUnity側から自動的に実行されます。
GameObjectがOFF(非アクティブ)になると、 イベント関数はすべて停止 。
例えば毎フレーム実行するイベント関数Updateはどうでしょうか。30FPSなら1秒間に30回実行されます。GameObjectがOFFになると、 Updateも止まる ということです。このように GameObjectはコンポーネントの元栓 の役割も担うのです。
特徴③GameObjectには必ずTransformコンポーネントがセット
重要な特徴の1つは、GameObjectには必ず Transformコンポーネント がセットされることです。
Transformとは位置、回転、拡大縮小を管理する重要なコンポーネント です。つまり、GameObjectは最初から座標や角度を操作する機能を持っている ということです。間違いやすいのは、あくまで Transformコンポーネントの機能 でありGameObject自体の機能ではないということです。
通常コンポーネントは Destroy または Remove Component で削除できるのですが、 Transformコンポーネントは特別仕様、削除することはできません。
GameObjectとTransformは密接な関係です。セットで学ぶことでより効率的にUnityを使えるようになります。次の記事は Transformを徹底的に解説 しました。ぜひ本記事とあわせて読んでみてください。
特徴④GameObjectは階層を作れる
Transformコンポーネントを常に持つGameObjectは階層を作れます。
上図がGameObjectの階層化です。
特徴③GameObjectには必ずTransformコンポーネントがセットで解説した、座標調整の機能と同様、 階層化もTransformコンポーネントの機能 なのです。階層化のメリットはグループ化 。 複数のパーツを一括で動かせます。
例えば画面上UIパーツです。
複数のGameObjectを グループ化してまとめて動かしたい 場面はよく発生します。とても良く使うテクニックなのでぜひ覚えておきましょう。
ところでGameObjectをアニメーションさせてゲーム開発します。このアニメーションはどのように作ったら良いでしょうか。Unityが提供する 「AnimationClip」 を使うと初心者でも簡単にアニメーションを作ることができるのです。次の記事ではAnimationClipの始め方を初心者向けに分かりやすく解説しました。本記事とあわせてぜひ読んでみてください。
GameObjectの基本的な使い方6選
GameObjectの特徴をつかんだところで、 基本的な使い方 を解説します。
①GameObjectの取得
②コンポーネントの追加と取得
③GameObjectのPrefab化
④SetActiveでGameObjectのON/OFF切り替え
⑤GameObjectの生成
⑥GameObjectの削除
使い方①GameObjectの取得
Unityを始めて分かりづらい点は GameObjectの取得方法 です。結論から話すとGameObjectは コンポーネントを経由して「GameObjectを取得」 するのです。GameObjectを取得するための手順は3つ。
- 自作コンポーネントの作成
- 自作コンポーネントをGameObjectに追加
- 自作コンポーネント内からGameObjectにアクセス
取得手順①自作コンポーネントの作成
自作コンポーネントと聞くと難しく感じるかもしれませんが、Unity開発では日常茶飯事に登場します。ゲームを作る際、Unityプロジェクト内は自作コンポーネントだらけとなるでしょう。
自作コンポーネントとは自分がGameObjectに追加する独自の機能です。
- キャラクターを動かす
- 得点を表示する
- 画面を切り替える
あらゆるゲームの機能は自作コンポーネントです。自作コンポーネントの作成は簡単。 MonoBehaviourクラスを継承するだけ です。では一緒にとても簡単な自作コンポーネント(SimpleScript)を作ってみましょう。
メニューAssets > Create > C# Script
からC#スクリプトを作ります。 ProjectウィンドウにC#スクリプトファイルが作られるため、SimpleScript と名前をつけてVisual Studioなどのエディタで開きます。
Visual Studioのインストール方法はこちら→【2022年版】Visual StudioをインストールしてUnityで使う方法
💻ソースコード : SimpleScript.cs
using UnityEngine;
public class SimpleScript : MonoBehaviour
{
}
上記のソースコードをコピーします。
上の動画を参考に 既存コードを削除 してSimpleScript.csを書き換えます。「これだけ?」と思うかもしれませんが、以上で自作コンポーネントは完成です。
取得手順②自作コンポーネントをGameObjectに追加
次に先ほど作成した自作コンポーネント「SimpleScript」をGameObjectに追加します。
上の動画のようにSimpleScriptをGameObjectに追加します。
取得手順③自作コンポーネント内からGameObjectにアクセス
自作コンポーネント内からGameObjectを取得するためにソースコードを一部変更します。
💻ソースコード : SimpleScript.cs
using UnityEngine;
public class SimpleScript : MonoBehaviour
{
// 追加箇所
void Awake()
{
Debug.Log(gameObject);
}
}
以上のようにソースコードを変更したらUnityを再生しましょう。
すると Consoleウィンドウ にログが出力されます。
GameObject (UnityEngine.GameObject)
UnityEngine.Debug:Log (object)
このログの意味は、 自作コンポーネントからGameObjectが取得できている ということです。
👉 初心者が覚えておくべき11のUnityエディタ機能【Unityの使い方】
自作コンポーネント内で gameObject
と記述することでGameObjectを取得できます。
ここがUnityの分かりづらい点でもあるのです。
GameObjectが起点で他のオブジェクトに働きかけると思いがちですが、それは全く逆。
Unityではコンポーネントが起点となりGameObjectを動かします。
ソースコード内に登場したAwakeはイベント関数と呼ばれる特殊な関数です。
自作コンポーネントを作成するとUnityから自動で呼ばれます。
使い方②コンポーネントの追加と取得
コンポーネントの追加と取得はコンポーネント側の機能な気がしますが、 実はGameObjectが提供する機能 です。 GameObjectが提供する機能をコンポーネントが使う と説明した方がわかりやすいかもしれません。あくまで コンポーネントの追加と取得はGameObjectの機能 なのです。
コンポーネントの追加「AddComponent」
コンポーネントの追加は、 AddComponent を使います。
using UnityEngine;
public class Test : MonoBehaviour
{
// 追加箇所
void Awake()
{
// GameObjectにBoxColliderコンポーネントを追加する
gameObject.AddComponent<BoxCollider>();
}
}
上のソースコードはBoxColliderコンポーネントをGameObjectに追加するサンプルです。
AddComponent<コンポーネント名>()
文法は上の通り。
ところで「コンポーネントの追加と取得はGameObjectの機能」と解説しました。
gameObject.AddComponent<コンポーネント名>()
コンポーネントの追加はGameObjectの機能 。
だから gameObject.AddComponent
このようにGameObjectに対して実行しているわけです。
また AddComponentの戻り値は追加したコンポーネントインスタンス 。
using UnityEngine;
public class SimpleScript : MonoBehaviour
{
private void Awake()
{
// AddComponentの戻り値は追加したコンポーネントインスタンス
BoxCollider collider = gameObject.AddComponent<BoxCollider>();
// 追加コンポーネントに処理を加える
collider.center = new Vector3(1f, 1f, 0 );
}
}
上のコードは追加したBoxColliderを受け取って center
プロパティを編集するサンプルです。コンポーネントは追加して終了することは少なく、追加後コンポーネントの処理を実行したり値を書き換えたりします。ぜひ覚えておきましょう。
コンポーネントの取得「GetComponent」
GetComponent メソッドで指定のコンポーネントを取得します。
using UnityEngine;
public class Test : MonoBehaviour
{
// 追加箇所
void Awake()
{
// GameObjectに追加されているBoxColliderの取得
BoxCollider collider = gameObject.GetComponent<BoxCollider>();
}
}
上のソースコードはBoxColliderコンポーネントを取得するサンプルです。
GetComponent<コンポーネント名>()
文法は上の通りです。
コンポーネントの取得はGameObjectの機能のため、GameObjectに対して実行してもよいのですが、GameObjectを記述するのが面倒くさいですよね。
// どちらも同じ
gameObject.GetComponent<BoxCollider>();
GetComponent<BoxCollider>();
上の通り、GetComponentに関しては gameObject.
を省略して GetComponent と記述しても大丈夫です。
子オブジェクトや親オブジェクトの取得
実は「GetComponent」は 同じ階層のコンポーネント のみ取得可能 です。しかし、特徴④GameObjectは階層を作れるでGameObjectは階層を持つと解説しましたよね。
Unityでは 子階層 、 親階層 に追加されたコンポーネントも取得する機能も提供されています。
そのために2つのメソッドが用意されています。
- GetComponentChildren : 子階層を検索
- GetComponentParent : 親階層を検索
詳しくはコンポーネント徹底解説記事で解説していますので、ぜひ読んでみてください。
使い方③GameObjectのPrefab化
GameObjectを語る上でPrefabを忘れてはいけません。 Prefab とはGameObjectを再利用できる状態にしたもの。つまり PrefabとはGameObjectのこと です。GameObjectとPrefabがごっちゃになりますが、あくまで「再利用できるGameObject」と覚えておいてください。
上の動画のとおり、PrefabはGameObjectをHierarchyウィンドウからProjectウィンドウにドラッグ・アンド・ドロップすると作成できます。Prefabを生成する方法はPrefabをInstantiateで生成で解説していますので参考にどうぞ。
また PrefabはUnity開発で必須スキル。 ぜひ覚えておきたいテクニックです。こちらの記事で詳しく解説していますので、参考にしてみてください。
UnityのPrefab(プレハブ)とは?使い方まで徹底解説
Unity開発する上で基礎中の基礎「Prefab(プレハブ)」本記事を通してPrefabの正しい使い方を学ぶことができます。
使い方④SetActiveでGameObjectのON/OFF切り替え
GameObjectは SetActive メソッドでONとOFFを切り替えます。特徴②GameObjectにはON/OFFがあるで解説したとおり、GameObjectにはONとOFFがあります。実際のゲーム開発ではGameObjectの切り替えを実装することは多いです。
次のコードは 1秒経過したらGameObjectをOFF にするサンプル。
using UnityEngine;
using System.Collections;
public class Test : MonoBehaviour
{
IEnumerator Start()
{
gameObject.SetActive(true);
// 1秒待機
yield return new WaitForSeconds(1f);
// GameObjectをOFF
gameObject.SetActive(false);
}
}
このプログラムを実行するとInspectorウィンドウのチェックボックスが切り替わります。
SetActiveの挙動自体は理解できたと思います。ところでGameObjectのONとOFFはどのような影響を与えるのでしょうか。
大きく2つの影響があります。
- イベント関数の実行制御
- コルーチンの実行制御
影響1.イベント関数の実行制御
コンポーネント内のAwakeやStart、Updateといった関数は「イベント関数」と呼ばれ、Unityから自動的に実行されます。
GameObjectがOFFの状態ではこれらのイベント関数は一切呼ばれません。
つまり GameObjectがOFFということは所属するコンポーネントの動作も止まる ということです。
GaemObjectには SetActive 、コンポーネントには enabled というON/OFFを切り替える似たような機能が実装されています。 一見似ていますが内部的には全く違います。 両者の違いを正しく理解しておかないと 「止まってほしい機能が止まらない」 「無駄に負荷だけ増える」 といったトラブルが起きます。詳しく解説した記事はこちらです。ぜひ読んでみてください。
影響2.コルーチンの実行制御
GameObjectのON/OFFで コルーチンの動作が制御 されます。 ONだったら動作 しますし、 OFFは停止 。
コルーチンとは非同期処理と呼ばれる関数です。さきほど1秒待機してSetActiveを切り替えました。この「待機」処理にコルーチンは使われています。
GameObjectのON/OFFはコルーチンの動作に影響を与える ということを覚えておきましょう。
コルーチンについてはこちらの記事で詳しく解説しています。非同期処理はゲーム開発で必須知識です。ぜひ読んでみてください。
使い方⑤GameObjectの生成
新しくGameObjectを作ることはです。この章ではGameObjectの生成方法を紹介します。
- Hierarchyウィンドウから生成
- InstantiateメソッドでGameObjectを生成
以上の2つの方法があります。
生成方法①Hierarchyウィンドウから生成
Hierarchyウィンドウの +ボタン > Create Empty
をクリックします。
するとGameObjectが生成されます。
ショートカットキーは以下。
- Mac : コマンド + シフト + N
- Win : Ctrl + シフト + N
よく使う機能なので覚えておきましょう。
生成方法②「new」キーワードで生成
スクリプトから生成する方法は2種類あり、1つ目は newキーワード を使います。文法はこちら new GameObject(名前)
。
using UnityEngine;
public class Test : MonoBehaviour
{
void Awake()
{
// newキーワードで生成
GameObject go = new GameObject("shibuya24.info");
}
}
このサンプルコードを実行すると、Hierarchyウィンドウは以下のような挙動になります。
shibuya24.info の名前を持つ GameObjectが生成 されるのです。
生成方法③InstantiateメソッドでGameObjectを生成
スクリプトから生成する2つ目の方法は Instantiate 。引数に渡したGameObjectのインスタンスを複製するメソッドです。
シーン内のオブジェクトを複製して生成
シーン内に配置されたGameObjectを複製して生成するサンプルです。
using UnityEngine;
public class Test : MonoBehaviour
{
[SerializeField] GameObject _original;
void Awake()
{
// Instantiateメソッドで生成
GameObject go = Instantiate(_original);
}
}
手順は以下の動画のとおり。
パラーメータも複製されます。
PrefabをInstantiateで生成
PrefabからGameObjectを生成する方法の紹介です。
基本的にシーン内のGameObjectを複製する方法とPrefabを生成するコードは同じです。複製する元のGameObjectが シーン内か、Projectウィンドウかの違いだけ 。
ソースコードはこちら。
using UnityEngine;
public class Test : MonoBehaviour
{
// Prefabをセットする変数
[SerializeField] GameObject _prefab;
void Awake()
{
// Instantiateメソッドで生成
GameObject go = Instantiate(_prefab);
}
}
上の動画のとおり生成するオブジェクトをPrefabにします。Prefabを生成する処理はよく使うので覚えておくと良いでしょう。
こちらの記事でPrefabの生成方法を解説しました。ぜひ参考にしてみてください。
【Unity】Prefabを生成する方法徹底解説
Prefabとは再利用可能なGameObject。Prefabは生成することで価値を発揮します。本記事ではPrefabの生成方法について徹底解説します。
使い方⑥GameObjectの削除
最後は GameObjectの削除方法 の紹介です。Hierarchyウィンドウからの削除、スクリプトから削除する2つの方法があります。
削除方法①Hierarchyウィンドウから削除
削除したいGameObjectを選んで
右クリック > Delete
。 よく不要なGameObjectが残って開発効率を下げる時があります。使わなくなったら積極的にGameObjectを整理すると良いでしょう。
削除方法②スクリプトで削除「Destroy」
次にスクリプトからGameObjectを削除する方法です。
Destroy(GameObjectインスタンス);
Destroyメソッドの引数にGameObjectインスタンスを渡すことで削除します。
ここまでに何度もGameObjectとコンポーネントの関係性が登場してきました。改めて違いを表にまとめましたので、参考にしてみてください。
項目 | GameObject | コンポーネント |
---|---|---|
種類 | 1種類 | 無限大 |
拡張性 | なし | あり |
単体配置 | 可能 | 不可能 |
ON/OFF切り替え | あり | あり |
GameObjectを使いこなすテクニック
GameObjectをさらに使いこなすテクニックを紹介します。
①GameObjectに名前をつける
②Layer指定でカメラごとの描画分類
③tagでGameObjectを分類
テク①GameObjectに名前をつける
GameObjectにはそれぞれ名前をつけることができます。というか、ぜひ名前をつけましょう。 おすすめの命名は自作コンポーネントと同名 です。例えばPlayerコンポーネントを作ったら、GameObject名も「Player」とします。
Hierarchyウィンドウを一覧したとき、コンポーネントを探すのは容易ではありません。そこで自作コンポーネントと同名にすることで 一覧性をアップ させます。
繰り返しになりますがGameObjectは複数のコンポーネントをセットできる 十徳ナイフの持ち手 。複数のコンポーネントを持ったGameObjectはどっちの名前を採用すればよいかわからなくなります。 つまりGameObjectの名前をコンポーネント名にするというシンプルな解決ができないことも多いです。
そんなときは、そのGameObjectが ゲーム内でどのような役割 を担っているかを考えましょう。プレーヤーを管理しているのであれば、「PlayerController」、玉を発射するのであれば「BallEmitter」など。
将来の自分や一緒に働く仲間がGameObjectの名前を見たとき 混乱しない名前をつけることが大事 です。
テク②Layer指定でカメラごとの描画を分類
GameObjectは Layer という情報を保持しています。
Layerはカメラに映る映らないを管理する機能です。 「カリング」 とも呼ばれます。CameraコンポーネントのLayer名とGameObjectのLayer名が一致することで初めてカメラの描画対象になります。
Cameraコンポーネント側ののLayer設定は Culling Mask(カリングマスク) から指定します。
なぜLayerでカメラに映る映らないを制御するのかというと、理由の1つはカメラは 複数存在する可能性がある からです。例えば3D背景やキャラクターを表示する 「3D描画用カメラ」 とUIを表示する 「UI描画用カメラ」 を分けることがあります。UIのGameObjectには「UIレイヤー」を指定、3D描画には「3Dレイヤー」を指定するといった感じです。
その他にも描画のタイミングを遅らせるためにLayerを分けることもあります。ここでは、GameObjectにはLayer設定があるということを覚えておきましょう。
テク③tagでGameObjectを分類
GameObjectは「tag(タグ)」という情報を保持しています。tagを使うとGameObjectを簡単に分類できます。tagの設定はとても簡単。Inspepectorウィンドウからプルダウンで選択するだけです。
tagの追加はプルダウンの一番下「Add Tag」から可能です。「新しいtagの追加方法」で解説しています。
tagによるオブジェクト分類例
例えばアクションゲームを作ったとします。以下のようなオブジェクトをtagで分類できるのです。
- 味方キャラ
- 敵キャラ
- 障害物
- 障害物 : 石
- 障害物 : 草
- 障害物 : ロープ
大量のオブジェクトを扱う際に活躍する
tagの活用ケースは 大量のオブジェクトを扱う場合 です。
敵が味方にぶつかったら色が赤くなるサンプルです。味方のソースコードを抜粋して紹介します。
// 当たり判定イベント関数
void OnTriggerEnter(Collider collider)
{
if (collider.gameObject.CompareWithTag("Enemy")) {
// 敵とぶつかった
// 赤くする
}
}
当たり判定のイベント関数 OnTriggerEnter を使うとオブジェクトと衝突したときに呼ばれます。引数に衝突したオブジェクトが取得できるため、 tagを比較して処理を分岐させる のです。
タグの比較は CompareWithTag
メソッドを使いましょう。
// パフォーマンス悪い
collider.gameObject.tag == "Enemy"
↓
// パフォーマンス良い
collider.gameObject.CompareWithTag("Enemy")
「CompareWithTag」を使う理由はパフォーマンスが良くなるからです。
新しいtagの追加方法
最後に新しいtagの追加方法です。
上の動画のとおりtagのタブから Add Tag を選択してTagを追加します。
【注意点】GameObject.Findは使わないほうがいい
GameObjectを使用する上での注意点を共有します。 GameObject.Find
メソッドはできるだけ使用しない方がよいです。GameObject.FindとはGameObject名ででシーン全体から検索する機能です。
GameObject.Find
は上図のようなイメージです。 using UnityEngine;
public class SimpleScript : MonoBehaviour
{
private void Awake()
{
// シーン内のGameObject名で検索
GameObject hoge = GameObject.Find("Hoge");
}
}
上記のコードでシーン内のすべてのGameObjectから名前で検索します。一見便利そうな機能ですが、おすすめしない理由は2点あります。
1点目は「パフォーマンス」です。シーン内のファイル数が増えると 検索負荷 が高くなります。それに伴ってゲームのパフォーマンスが低下。カクつきの原因になるのです。 カクつきが気にならないようなタイミング(ロード中や初期化など)であれば検討 しても良いでしょう。基本的には使用しない方針で大丈夫です。
2点目は「検索の安全性」です。GameObjectの名前は気軽に変更できますし、変更します。つまり、変わりやすい名前を検索するのは事故の元なのです。以前は動いていた処理も、突然動かなくなる。実は GameObject名を変更 したから。といったトラブルが相次ぎます。チーム開発ならなおさらです。
以上の理由からGameObject.Findの使用は避けたほうがよいです。ちなみにUnityを11年使ってきましたが、実際の業務で採用したことはありません。使わなくてもなんとかなるものなのです。
UnityのGameObjectまとめ
UnityのGameObjectについて解説してきました。GameObjectは基本的な機能ではありますが、その概念は初心者には分かりづらいものです。
- GameObjectは単体では存在するだけで動作しない
- 追加したコンポーネントがGameObjectを動かす
- GameObjectはコンポーネントの動作を制御する(元栓の役割)
感覚的に理解しづらいですよね。そこで簡単に理解するために 「十徳ナイフ」 と例えました。
- GameObject → 十徳ナイフの持ち手
- コンポーネント → 十徳ナイフのナイフ
このベースの概念を理解した上で、「基本的な使い方」や「使いこなすテクニック」などを紹介してきました。
繰り返しになりますが、 GameObjectはUnityの基本機能 。Unityがどのような仕組みで動いているかを知ることは開発をする上で非常に重要です。ぜひこの記事を何度も読み直してGameObjectについて理解を深めてください。またセットでコンポーネントについても勉強しましょう。両者は切っても切り離せない関係です。
コンポーネントについてはこちらの記事で詳しく解説しています。本記事とあわせて読んでもらうとより一層理解が深まると思います。
→【保存版】Unityのコンポーネント徹底解説【Unity基礎】
この記事があなたのゲーム開発に少しでもお役に立てたら嬉しいです。
この記事が気に入ったらフォローしよう
「Unity初心者大学」というUnity初心者向けのYouTube始めました!!
ぜひチャンネル登録をお願いします!
最後まで読んでいただきありがとうございました!
すばらしいUnityライフをお過ごしください。
- Unity2020.3.26f1