【Unity】ゲームオブジェクトの基礎(生成・削除・非表示など)から公式リファレンスまで解説決定版!


Unityでゲームを作る際に、GameObject(ゲームオブジェクト)という言葉を目にしたことがあると思います。

どういうものかは何となく分かっているものの、GameObjectの生成や削除、非表示など、細かいところで悩んでいる人も少なくないと思います。

そこで、それらのGameObjectに関する悩みを解決できるよう、「GameObjectとは」からGameObjectの詰まりやすいPoint解説(生成・削除・tagなど)、公式リファレンスの詳細説明まで徹底的にご紹介します

GameObjectに関する解説決定版なので、「公式リファレンスが分かりにくい」と思っている初学者の方は勿論、上級者の方も辞書代わりに是非ご一読いただければ幸いです。

本記事は

  • GameObjectとは?
  • GameObjectでつまづきやすい4つのPoint(動的生成・動的削除・findなど)
  • GameObjectの公式リファレンスを分かりやすく解説

以上の流れで解説していきます。

GameObject(ゲームオブジェクト)とは?

Unity内で作成するあらゆるオブジェクトのことをGameObject(ゲームオブジェクト)と呼びます。

一見GameObjectが何かしらの機能を持っているような表現をしていることが多いですが、あくまでGameObjectは箱(入れ物)であって、GameObjectのみだけでは何も効果を発揮しません

GameObjectは中に部品を詰めていくことで意味のあるオブジェクトになっていくのです。

その部品にあたるのがCompornent(コンポーネント)になります。Compornentにはそれぞれ機能があり(TransformコンポーネントやRigidbodyコンポーネントなど)機能同士を掛け合わせ調整することで想定の動きを実現していきます。

上記の組み合わせをGameObjectという箱の中で行う、というのがUnityでの作成の基本となります。

下の図はGameObjectとCompornentの関係を図式化したものです。このように様々なCompornentを組み込まれてGameObjectが出来ています。

GameObjectでつまづきやすい4つのPoint

さて、ここからはGameObject関連で引っ掛かりやすい部分を説明していきます。

ここの項目は今後も増やしていきたいので、「GameObjectの〇〇に関してまとめてほしい」という要望がありましたら、お問い合わせから遠慮なくご連絡ください。

【目次】

  • GameObjectをゲーム途中で自動生成する方法(動的生成/Instantiate)
  • GameObjectをゲーム途中で削除する方法(動的削除/Destroy)
  • スクリプトでGameObjectを検索する3つの方法(Find/FindGameObjectsWithTag/FindWithTag)
  • GameObjectのゲーム中での非表示化/enabled化(SetActive)

GameObjectをゲーム途中で自動生成する方法(動的生成/Instantiate)

キー入力で銃弾を発射させたい、時間経過で敵の機体が出現させたいなど、スタート時点では出現していなかったGameObjectをゲーム実施中に出現させたい場合はよくあると思います。

この場合は基本的にInstantiate関数(メソッド)を使います。

例えば、1秒間に1回オブジェクトを複製したい場合、以下のようなスクリプトで実現します。

このスクリプトで実際に動かしてみると以下のように1秒ごとにGameObjectが増えていきます。

このInstantiateを使って、衝突した時に新しいブロックが生成されたり(private void OnCollisionEnter(Collision collision))、ボタンを押した時に銃弾が発射されたり(if (Input.GetKey(KeyCode.Space)))など、色んな条件やタイミングで生成できるので、色々な条件を自分で作ってみてください!

GameObjectをゲーム途中で削除する方法(動的削除/Destroy)

例えばブロック崩しでボールがブロックに当たった時にブロックが消えるようにする、一定時間経過した時にアイテムが消えるようにする、などGameObjectをゲーム実施中に動的に削除したい時があると思います。

この場合はDestroy関数を使用します。

例として、3秒後に自動でGameObjectを削除したいとします。この場合以下のスクリプトで実現できます。

このスクリプトを使うと以下のように確かに3秒後に消えます。

あとは条件の組み合わせ方次第で様々なパターンを表現することができるので、色々と試して自由にDestroyを使えるようにしましょう。

スクリプトでGameObjectを検索する3つの方法(Find/FindGameObjectsWithTag/FindWithTag)

ゲームを作成している際にスクリプト内でGameObjectを検索したい場合は多々あると思います。

この時に使える関数が以下の3つです。

  • Find
  • FindGameObjectsWithTag
  • FindWithTag

これらの使い分けの判断基準は

  1. GameObject名で検索するか、Tagで検索するか
  2. Tagで検索する場合、1つのGameObjectの検索か、複数のGameObjectの検索か

以上の2つになります。

まず1のGameObject名の場合は「Find」を使用します。

例えば「Cube」という名前のGameObjectを見つけたい場合は以下のスクリプトになります。

次に2のTagで検索する場合で1つのGameObjectの場合は「FindWithTag」を使います。

例えば、「Test」というTagを持つGameObjectを検索したい場合は以下のスクリプトになります。

最後に2のTagで複数のGameObjectを検索したい場合は「FindGameObjectsWithTag」を使います。

例えば、「Test」というTagを持つ複数のGameObjectを検索したい場合は以下のスクリプトになります。

他の検索と異なり、戻り値が配列になるのが注意点です。

Findを使って特定のGameObject情報を抽出し、他のGameObjectに反映させたり、GameObjectのCompornentを変更したりすることもあり、使用頻度は非常に高いものになるので、是非使えるようになりましょう。

また、Findで検索できない時は基本的に検索したいGameObjectが非アクティブになっていることが多いのでご注意ください。

GameObjectのゲーム中での非表示化/enabled化(SetActive)

ゲーム実施中にあるオブジェクトを非表示にしたい時があると思います。

例えば、リスタートのUIがボタンを押した時に非表示にするとか、敵からの攻撃を受けた時に自機を非表示にするとかです。

この時に使うのがSetActiveDestroyになり、特によく使うのがSetActiveの方です。

SetActiveとは、GameObjectのアクティブ(enabled)/非アクティブ(unenabled)を切り替える関数で、以下のような簡単なスクリプトになります。

こちらを用いて、非表示または再表示などを実施するのです。

ちなみに前述の通り非アクティブなGameObjectはFindで検索できなくなるので、ご注意ください。

GameObjectの公式リファレンスを分かりやすく解説

最後に、GameObjectの公式リファレンスを、使い方を踏まえてより分かりやすくご紹介します。

ここからは一読してもらうというよりは、分からない時に辞書的に使っていただくことを想定して作っています

なので、GameObjectに関して分からないことが生じた際にじっくりと読んでもらえれば幸いです

始めにGameObjectに関する変数や関数を表で簡潔にまとめました。

更に各項目ごとにより詳細に記載した文章(使うタイミングや注意点など)を表の後ろに記載しています。

始めに表で確認してもらい、分からなければ下の詳細説明をご参照ください。

リファレンスの表

↓変数名や関数をクリックすると詳細まで遷移できます↓

変数 格納される値
activeInHierarchy GameObjectがシーンでアクティブかどうか(Bool値)
activeSelf GameObject自身のActive/非Active(Bool値)
isStatic GameObjectがstaticかどうか(Bool値)
layer GameObjectが存際しているレイヤー名(String)
scene GameObjectが属しているシーン名(String)
tag GameObjectのタグ名(String)
transform GameObject にアタッチされている Transform(Transform)
コンストラクタ 用途
GameObject 指定した名前のゲームオブジェクトを作成します、
Public関数 関数の内容
AddComponent GameObjectに指定したコンポーネントクラスを追加します。
BroadcastMessage 指定したGameObjectまたは子オブジェクトにあるすべての MonoBehaviour を継承したクラスにある指定したメソッドを呼び出します。
CompareTag このGameObjectが tag とタグ付けされているかどうかを判断します。(戻り値はBool値)
GetComponent 指定したGameObjectに type(主にCompornent) がアタッチされている場合は typeを指定してCompornentを返します。
ない場合は null を返します。
GetComponentInChildren 指定したGameObjectまたはその子オブジェクトたちの type(主にCompornent)から指定したCompornentを取得します。
GetComponentInParent 指定したGameObject やその親オブジェクトたちの type(主にCompornent)から指定したCompornentを取得します。
GetComponents 指定したGameObjectの type(主にCompornent)のすべてのCompornentを返します。
GetComponentsInChildren 指定したGameObjectまたはGameObjectの子たちから type(主にCompornent)のすべてのCompornentを取得します。
GetComponentsInParent 指定したGameObjectまたはその親たちから type(主にCompornent)のすべてのCompornentを返します。
SendMessage 指定したGameObjectにアタッチされているすべての MonoBehaviour にある指定したメソッドを呼び出します。
SendMessageUpwards GameObjectと親(の親、さらに親 … )にアタッチされているすべての MonoBehaviour にある指定したメソッドを呼び出します。
SetActive 指定したGameObjectをActive/非Activeにします。
Static関数 関数の説明
CreatePrimitive 基本的なGameObject(プリミティブメッシュレンダラーと適切なコライダー)を作成します。
簡単にGameObjectを生成したい時に利用します。
Find GameObject名で GameObject を検索し返します。
FindGameObjectsWithTag 指定したtagを持つアクティブなGameObjectのリストを返します。もし見つからない場合は空配列(null)を返します
FindWithTag 指定したtagを持つアクティブなGameObjectを返します。もし見つからない場合は null を返します

継承メンバー

↓変数名や関数をクリックすると詳細まで遷移できます↓

変数 持っている値
hideFlags GameObjectの見え方や保存対象を制御するためのフラグ
詳細は下の詳細解説をご参考ください。
name GameObjectの名前
Public関数 関数の内容
GetInstanceID GameObjectのインスタンス ID を返します。
ToString GameObject名を返します。
Static関数 関数の内容
Destroy GameObjectやコンポーネント、アセットなどを削除します。
DestroyImmediate GameObjectを即時削除します。公式ではこちらよりDestroyを使う方をおススメしています。
DontDestroyOnLoad デフォルトだとシーン切替の際に削除されてしまうGameObjectを指定することで、シーンを切り替えた際にそのまま残しておくことができます。
FindObjectOfType Type(主にCompornent)から最初に見つけたアクティブのGameObjectを返します。
FindObjectsOfType Type(主にCompornent)から見つけたすべてのアクティブのGameObject配列を返します。
Instantiate 指定したGameObjectをクローン(複製)します。
Operator 解説
bool オブジェクトが存在するかどうかをtrue/falseで返します。オペレーターなので下記での詳細解説は割愛します。
operator != 二つのオブジェクトが異なるオブジェクトを参照しているか比較します。オペレーターなので下記での詳細解説は割愛します。
operator == 2つのオブジェクト参照が同じオブジェクトを参照しているか比較します。オペレーターなので下記での詳細解説は割愛します。

GameObjectの変数

ここからは上の表の項目1つずつを詳細に解説していきます。

activeInHierarchy

activeInHierarchyとは、自分もしくは親オブジェクトがActiveか非Activeを判断するためのものになります

返り値はBool値(True/False)になります。

例えば、以下のような階層関係にあるGameObjectがあったとします。

この場合、Wall1がActive(True)であっても、Walls(親オブジェクト)が非Active(False)だとactiveInHierarchyではFalseと返ってきます。

このように親オブジェクトが優先度高く判断されます。

実際にゲームにおいて親オブジェクトが非アクティブの場合、子も非アクティブ(シーンで無効)になることが多いので、実際にそのオブジェクトがアクティブかどうかを判断する場合に利用できます。

activeSelf

activeSelfは、activeInHierarchyとは異なり、自分自身がActiveか非Activeを判断する変数になります

activeInHierarchyと同様、以下のような階層関係にあるGameObjectがあったとします。

この場合、Wall1がActive(True)でWalls(親オブジェクト)が非Active(False)だと、activeSelfではTrueが返ってきます。

このようにactiveSelfは親オブジェクトに関係なく、自分自身がActiveか非Activeだけを判断します。

どちらかというと、activeInHierarchyの方が使用することが多いです。

isStatic

isStaticはそのGameObjectがStatic(静的)かどうかをBool値で返します

Staticの設定はInspectorビューのオブジェクト名の隣で設定するか、Scriptで設定します。

layer

layerとは、GameObjectの優先順位を付けたグルーピングの役割を持ちます

特定のLayerに属するGameObjectに対して、カメラの描画(レンダリング)の有無、特定のゲームオブジェクトの表示・非表示などを設定できます。

また、特定のオブジェクト同士のみ衝突判定を無くすこともできます。

Layerの設定はStaticと同様、Inspectorビューから設定できます。

初めから画像のようなLayerが存在し、増やしたい場合は自分でLayerを増やすこともできます。

Layerの追加方法

Add Layer…を選択します。

すると、以下の画面が開かれるので、選びたいLayerの空欄にLayerの名前を入れます。

以上で完了です。

Layerの削除方法

削除方法はより簡単で、作成時に使用したLayer画面のLayer名を削除し、空欄にすることで削除できます。

scene

sceneは自分(GameObject)自身がどのシーンに属しているかを返します

返り値はシーン名(String)です。

例えば、複数のシーンを使ったゲームにおいて、指定したGameObjectがどのシーンに存在するのかを確認したい場合に使用したりします。

tag

tag(タグ)とはゲームオブジェクトをグルーピングするために使うものになります。まさにタグ付けになります。

特にスクリプトで特定の複数オブジェクトに対して何か動作させたい場合にTagを利用してオブジェクトを指定することが多いです。

例えば、以下のブロック崩しゲームがあったとします。

クリア条件として全てのBlockが消えた時という条件を付けたいとした場合、各Blockに対して存在しているかどうかを確認するスクリプトを作成すると非常に手間になってしまいます。

こういう時にBlock全てに同じTag(BlockというTag)を設定して、そのTagを持つオブジェクトが存在しなくなった時にゲームクリアというスクリプトにしたりします。

これらをスクリプトにすると以下のようになります。

上記のようにTagを使って特定のオブジェクトをグルーピングできるようになると、処理を単純化できます。

ちなみに、今回使用したブロック崩しゲームは1から作り方を説明している記事があるので、良かったら作成にチャレンジしてみてください!

GameObjectのTagの設定

Tagの存在理由は分かったところで、設定方法が分からないと意味ないですよね。

ではTagの設定方法を説明します。

StaticやLayerと同様、Inspectorビューから設定できます。

InspectorビューのGameObject名の下にあるTagの「Untagged」をクリックすると下の画像のようなメニューが表示されます。

メニューから選ぶとGameObjectのTagとなります。

上の画像のTagは初めから設定されているもので、これらを使うこともできますし、自分でTagを作ることもできます。

Tagの新規作成

自分でTagを作成する場合、上の画像の「Add Tag…」を選択します。

すると上のようにTagを新規作成できる画面が開かれるので、Tagsの+をクリックします。

下のようにTagの名前を設定する画面が開かれるので、新規作成したいTagの名前に変更します。

すると先ほどの「List is Empty」に作成したTagが表示されます。

そして、作成したTagを設定する場合はTagを設定しようとすると作成したTagがメニューの中に表示されます。

作成したTagの削除

自分で作成したTagに関しては削除することもできます。

削除するには「Add Tag…」のページに行き、削除したいTagを選択した上で「ー」をクリックすると削除できます。

transform

transformは、オブジェクトの位置(Position)、回転(Rotation)、スケール(Scale)を扱うクラスになります

基本的にオブジェクトを移動したい場合や回転させたい場合、大きさを変更し合い場合に使用されます。

全てのGameObjectには常にTransformコンポーネントがアタッチされており、このコンポーネントは削除することができません。

Transformに関してもっと深く説明すべき内容なので、良かったらより詳細に解説しているこちらの記事をご一読ください。

GameObjectのコンストラクタ

GameObjectのコンストラクタは1つしかありません。

GameObjectというコンストラクタで、新しい名前のGameObjectを作成することができます

主に新規のGameObjectを作りたい時に使用します。

具体的な使用例としては、新しいゲームオブジェクトを作りたい場合に以下のスクリプトで「Player」という名前の新規オブジェクトを作成できます。

GameObjectのPublic関数

AddComponent

AddComponentでは、指定したGameObjectに指定したCompornentを付与することができます

この関数は主にゲーム実行中に新しいRigidbodyやColliderを追加したい場合などに使用します

例えば、ゲームを実行したタイミングで「Wall1」というGameObjectに「Audio Source」を追加したい場合、以下のスクリプトを使います。

これをWall1にアタッチして実際にゲームをスタートしてみると、確かにAudioSourceが追加されていることが分かります。(下のGIFを参照)

ゲーム途中でCompornentを付与したい場合などで使うことが多いので、しっかりと使えるようにしていきましょう。

BroadcastMessage

BrodcastMessageはGameObjectもしくは子オブジェクトにある全てのMonoBehaviorを継承したクラスのメソッドをメソッド名で呼び出します

他のGameObjectやCompornentのメソッドを呼び出したい時に使います。(オブジェクト指向の考え方がここで生かされていますね)

スクリプトの表記方法は

となります。

CompareTag

CompareTagはあるGameObjectがあるtagとタグ付けされているかどうかを判断するので、Tagの存在判定や特定のTagを削除したい場合などに使用します

例えば、「Player」というTagを持っているGameObject(Wall1)があった場合、そのGameObjectを削除したい時には以下のスクリプトを使用します。

GetComponent

GetComponentは、指定したGameObjectのCompornentの情報を取得することができる関数です

どういう時に使うかというと、ゲーム実行中にCompornentの要素を動的に変更したい場合であり、例えば「Transform Compornent」の要素を書き換えて座標移動回転を行ったり、「BoxCollider Compornent」の中身を編集し当たり判定の領域を変更したりします。

非常に使用頻度が高い関数なので、仕組みを理解して使えるようにして欲しい関数の1つです。

スクリプトでは以下のように記述します。

冒頭の架空のGameObjectで各Compornentを取得しようとすると以下のような表記になります。

ちなみに注意点として、GameObjectが非Activeの場合は検索することができないので、見つけることができません。あくまでActive状態のObjectを対象とするものになります。

先述の通りGetComponentは様々な用途があるので、自分で色々と使って覚えていきましょう。

GetComponentInChildren

この関数はGetComponentと同様、コンポーネントの情報を取得するのですが、異なる点は対象が自分自身でなく、子オブジェクトの特定のコンポーネントを配列として取得するという点です

そのため、複数当てはまるコンポーネントが存在する場合は配列として返ってきて、対象がなければnullとして返ってきます。

自分がどのObjectの情報を取得したいのか、という点から使い分けてください。

GetComponentInParent

この関数はGetComponentと同様、コンポーネントの情報を取得するのですが、異なる点は対象が自分自身でなく、親オブジェクトの特定のコンポーネントを配列として取得するという点です

要はGetComponentinChildrenの親バージョンになります。

指定したコンポーネントが複数存在する場合は配列として返ってきて、対象がなければnullとして返ってきます。

自分がどのObjectの情報を取得したいのか、という点から使い分けてください。

GetComponents

この関数は指定したGameObjectの全てのコンポーネントを取得することができます

基本的な使い方はGetComponentと同じですが、全てのコンポーネントを取得するという部分が異なります。

もちろん、返り値は配列となりますので、ご注意ください。

GetComponentsInChildren

この関数はGetComponentsを子オブジェクトを対象にした関数です

したがって、子オブジェクトの全てのコンポーネントを取得してきます。

GetComponentsInParent

この関数はGetComponentsを親オブジェクトを対象にした関数です

したがって、親オブジェクトの全てのコンポーネントを取得してきます。

SendMessage

SendMessageは、あるGameObjectにアタッチされている全てのMonoBehaviorに存在するメソッドを呼び出すことができます

そのため、他のGameObjectのあるメソッド(関数)を呼び出したい時に使用します。

スクリプトは下記の通りです。

SendMessegeの特徴は1つのGameObjectしか参照できないという点です。

似たような機能を持つBrodcastMessageは指定したGameObjectと子オブジェクトを参照できます。ただ、その分処理が重くなります。

また、後述のSendMessageUpwardsは指定したGameObjectと親オブジェクトを参照できます。ただ、その分処理が重くなります。

なので、どこまでのオブジェクトを参照したいかで使い分けると良いです。

SendMessageUpwards

この関数はあるGameObjectとその親オブジェクトにアタッチされている全てのMonoBehaviorに存在するメソッドを呼び出すことができます

スクリプトは下記の通りです。

SetActive

SetActiveはGameObjectのアクティブ/非アクティブを切り替えることができる関数になります

例えばあるボタンを押した時に「Start」という名前のUIを非表示にしたい場合などに、UIを意図的に非アクティブにしたりします。

この場合、以下のようにSetActiveを使ってGameObjectを非アクティブに変更にすることがあります。

非表示にしたい場合はDestroy(詳細な説明は後述)を使ってもいいのでは?という考えもあると思います。

判断基準としては何度も表示/非表示を切り替えたい場合はSetActive、一度非表示にしたら以後変更しない場合はDestroyになります

GameObjectのStatic関数

CreatePrimitive

この関数は、Primitiveな(基本的な)GameObjectを簡単に生成することができます

生成されたGameObjectはワールド座標の原点に生成されます。

生成できるオブジェクトの種類は以下の6種類です。

GameObject クラスのコンストラクタで生成した空のゲームオブジェクトからでも構築できますが、メッシュなどの少し面倒な設定を行う必要があります。

そこで、簡単に作成したい場合はCreatePrimitiveを使用します。

Find

この関数はGameObjectを検索する関数です

検索する際はGameObjectの名前で検索します。対象となるオブジェクトはアクティブになっているオブジェクト全てです。

SetActiveでの参考スクリプトにもさりげなく使っていますが、あるオブジェクトを操作したい場合にまずFindで見つけるということはよくあります。

子オブジェクトを取得するときは、GameObject.Find(/子”);のようにスラッシュで区切って下の階層に降りてください。

ただし、名前検索は完全一致しかできず、部分一致ができないのでご注意ください。

また、非アクティブのオブジェクトは検索できません。もし非アクティブのオブジェクトを検索したい場合はTransform.Find関数をお使いください。

「Box」という名前のGameObjectを検索したい時のスクリプトは以下です。

FindGameObjectsWithTag

この関数は複数のGameObjectをTagによって検索する関数です

Findと違う点はGameObjectの名前ではなくGameObjectのTagを使って検索することです。

Tagによってグルーピングしたオブジェクト達を一斉に変更したい場合(操作を加えたい場合)に使用することが多いです。

ちなみに戻り値は配列になります。

「Test」というTagを持つGameObjectを検索したい時のスクリプトは以下です。

FindWithTag

この関数はTagを使って1つのGameObjectを検索する関数です

FindGameObjectsWithTagと似ていますが、この関数の場合1つのGameObjectだけが返ってくること、FindWithTagの方が処理が早いという点が異なります。

したがって、検索したいTagを持つGameObjectが1つの場合にはFindWithTagを使い、複数の場合はFindGameObjectsWithTagを使ってください。

「Cube」というTagを持つGameObjectを検索したい時のスクリプトは以下です。

継承メンバーの変数

hideFlags

この変数を用いることでGameObjectやコンポーネントをHierarchyビューやInspectorビュー上で非表示にすることができます

例えば「obj」というゲームオブジェクトがあった時にHierarchyビューから見えなくする方法は以下です。

hideFlagsの種類は以下です。

変数 説明
None 全てのオブジェクトを表示します。
HideInHierarchyなどで非表示にしているオブジェクトを表示する時に使います。
HideInHierarchy オブジェクトがHierarchyビューで非表示にします。
HideInInspector オブジェクトのCompornentをInspectorビューで非表示にします。
DontSaveInEditor オブジェクトが自動で破棄されてしまうことを無効にします。(基本的にはDontSaveを使います)
NotEditable オブジェクトのコンポーネントををInspectorビュー上で編集不可にします。
DontSaveInBuild ビルド時にオブジェクトをシーンに含めないようにします。(基本的にはDontSaveを使います)
DontUnloadUnusedAsset オブジェクトが自動でアンロードされてしまうのを無効にします。(基本的にはDontSaveを使います)
DontSave Unityではゲーム再生時に変更した情報がゲーム停止時にリセットされるようになっていますが、そのリセットを無視するようにします。
DontSaveInBuildとDontSaveInEditorとDontUnloadUnuserdAssetの機能を併せ持ちます。
HideAndDontSave HideInInspector以外の上記変数全ての機能を併せ持ちます。

このHideFlagsは、複数人数での開発の時に使うことが多いです。具体的には、他人に編集されたくないGameObjectやCompornentをHideさせて編集できないようにします。

name

この変数はGameObjectの名前にあたる変数です

例えば新しく作成したGameObjectに「Plane1」という名前を設定する際には以下のスクリプトになります。

継承メンバーのPublic関数

GetInstance

この関数は各GameObjectに付与されている固有のIDを取得するものです

返ってくる値は数値(int型)になります。

以下は固有IDを取得するスクリプトの参考例です。

この関数の使い方は「同じオブジェクトに対して操作を複数回連続で行ったことを検知したい場合」などに使います。

一度操作を行ったときにIDを取得しておき、次の操作の時にそのIDと同じ値かを比較するという方法になります。

固有で変化しない値なので、GameObjectを絶対参照したい場合には使うことが多いと思います。

ToString

GameObjectの名前をString型(文字列)として返す関数になります

スクリプトは以下のようになります。

GameObjectの名前を取得したい場合に使用します。

継承メンバーのStatic関数

Destroy

この関数はGameObject・Compornent・Assetなどを削除する時に使います

例えば、「ボールとブロックがぶつかった時にブロックが消えてほしい場合」に衝突判定を条件にDestroyを使用します。

スクリプトは以下のようになり、ブロックにアタッチします。

ちなみに、GameObjectをDestroyした場合、Hierarchyビュー上からは消えても存在は消えないため、GetComponentsで要素を検索するとカウントされてしまいます。この部分は思わぬ落とし穴なのでご注意ください。

もし表示/非表示を何度も切り替えたい場合はSetActiveを使う方がおすすめです。

Destroyは非常に使用頻度が高い関数になるので、しっかりと使えるようにしましょう。

DestroyImmediate

この関数はDestroyよりも強力な即時削除するための関数です

DestroyImmediateを使うと、Hierarchyビュー上からも存在自体も削除されます。

非常に強力な関数のため、公式ではこの関数の使用をおススメしていません。

削除や非表示を実現したい場合はDestroyやSetActiveをご使用ください。

DontDestroyOnLoad

Unityのデフォルトではシーンを切り替えた時にGameObjectの引継ぎができず全て削除されてしまいます。

しかし、複数のシーンをまたいで使用したい(引き継ぎたい)GameObjectがある場合にこの関数を使うと、各シーンで同じGameObjectを設定する手間を省くことができます

シーン切替時でもGameObject等を破棄せずに保持しておくための関数と覚えましょう。

スクリプト例は以下です。

FindObjectOfType

この関数はType(Compornentとほぼ同義です)を元にTypeを検索するものです

例えばRigidbodyを持つGameObjectを検索したい場合

のようなスクリプトになります。

この関数は複数当てはまるオブジェクトがあっても1つだけを返すので、複数をリストで返したい場合はFindObjectsOfTypeを使います。

FindObjectsOfType

この関数はFindObjectOfTypeの複数バージョンです

そのためスクリプトも複数形にするだけで使えます。

戻り値が配列になるのでご注意ください。

Instantiate

この関数はGameObjectのクローンを生成する関数です

例えば、「obj」というGameObjectをクローンする場合のスクリプトは以下のように作成します。

このInstantiateはPrefab化したオブジェクトを動的生成する場合に頻繁に使うのですが、その方法については詳細に説明した記事があるのでご参考ください。

まとめ

今回の記事ではGameObjectに関してまとめてみました。

GameObjectはUnityにおける基礎となるオブジェクト(クラス)なので、本記事を参考にして、少しずつ使えるようにしていきましょう。

また、今回は辞書的に使っていただくことを目的に作成したものですので、GameObjectでつまづいた際に参考にしていただければ幸いです

では、楽しいUnity開発を!

Unityに関して他にも様々な記事で解説しているので、ご興味ある方はご一読ください。


この記事はいかがでしたか?よければシェアをお願いします。

A-kun

株式会社x garden CGO(Chief Growth Officer) Unityエンジニアとして日々Unityと奮闘中 自他共に認めるゲーマー Splatoon最高記録:世界6位(リグマペア) ApexLegends最高記録:5連チャンピオン