Unityで「あのコンポーネント、どこに付けた?」をすぐ探す方法 ― Hierarchy検索を使いこなそう
Unityでゲームを作っていると、こんなことがありませんか?
「AudioSourceを付けたはずだけど、どのGameObjectだったかな?」
小さなシーンならHierarchyを上から順番に見ていけば見つかります。
しかし、GameObjectが何十個、何百個と増えてくると、それでは大変です。

そんなときに便利なのが、Hierarchyの検索機能です。
今回は、特に便利な
t:AudioSource
という検索方法を中心に、UnityのHierarchy検索について見ていきます。
AudioSourceが付いているGameObjectを探してみよう
たとえば、シーンのどこかに AudioSource コンポーネントを付けたとします。
ところが、どのGameObjectに付けたのか分からなくなってしまいました。
そんなときは、Hierarchy上部の検索欄に次のように入力します。
t:AudioSource

すると、
AudioSourceコンポーネントが付いているGameObject
だけに絞り込めます。
AudioSource に限りません。
たとえば、
t:Camera
ならCameraコンポーネント、
t:Rigidbody
ならRigidbodyコンポーネント、
t:BoxCollider
ならBoxColliderコンポーネントを持つGameObjectを探せます。
Unity公式マニュアルでも、Hierarchy検索のコンポーネント型検索には t: が使われています。
入力するときの注意点です。型名は最後まで入力してください。Unity 6.3 LTS(6000.3)のHierarchyで試したところ、t:Audio のように途中までの入力では何も表示されませんでしたが、t:AudioSource と最後まで入力するとAudioSourceが付いたGameObjectが表示されました。なお、大文字・小文字は区別されず、t:camera でもMain Cameraが見つかりました。虫眼鏡アイコンから「Type」を選び、一覧からコンポーネントを選択する場合は、型名を最後まで入力する必要はありません。
t: の「t」はType
ここで出てくる
t:
は、Type(型)を指定するための検索トークンです。
つまり、
t:AudioSource
は、
「AudioSourceという型のコンポーネントを持っているGameObjectを探して」
という意味だと考えると分かりやすいでしょう。
AudioSourceだけ入力するのとは何が違う?
ここは初学者が少し迷いやすいところです。

Hierarchyの検索欄に、
AudioSource
とだけ入力する場合と、
t:AudioSource
と入力する場合では、検索条件が違います。
名前を探したい
たとえば、GameObject名が
AudioSourceManager
なら、
AudioSource
という文字列から見つけることができます。
一方、
Player
という名前のGameObjectにAudioSourceコンポーネントが付いていたとしても、
「GameObjectの名前」だけを対象に探している状態では、AudioSource という名前からPlayerを見つけることはできません。
コンポーネントを探したい
そこで、
t:AudioSource
とします。
これならGameObjectの名前が
Player
Enemy
BGM
Main Camera
のどれであっても、
AudioSourceコンポーネントが付いているかどうか
を条件に検索できます。
「名前を探しているのか」
「付いているコンポーネントを探しているのか」
を区別すると理解しやすくなります。
虫眼鏡アイコンから指定することもできる
検索文字を覚えていなくても大丈夫です。
Hierarchyの検索欄にある虫眼鏡アイコンから、検索条件を選択することもできます。
Unityの公式マニュアルでも、検索フィールドの虫眼鏡アイコンから検索条件を選択できることが説明されています。
慣れないうちは虫眼鏡から検索し、
慣れてきたら
t:AudioSource
と直接入力する、
という使い方でもよいでしょう。
t:以外にも検索条件がある
Hierarchy検索では、t: 以外にも便利な検索トークンがあります。
代表的なものを見てみましょう。
| 検索 | 意味 | 例 |
|---|---|---|
t: | コンポーネントの型 | t:AudioSource |
id: | Instance ID | id:210 |
path: | Hierarchy上のパス | path:Player/Weapon |
tag: | Tag | tag:Player |
layer: | Layer | layer:8 |
size | GameObjectのボリュームサイズ(AABBの体積) | size>5 |
これらはUnityのHierarchy検索で用意されている検索条件です。
tag: ― Tagから探す
たとえばPlayerタグが設定されているGameObjectを探したい場合です。
tag:Player
と入力します。
すると、Playerタグを持つGameObjectを絞り込めます。
たとえば、
Player
PlayerBody
Hero
という名前であっても、TagがPlayerなら検索対象になります。
layer: ― Layerから探す
Layerでも検索できます。
たとえばLayer 8に設定されているGameObjectなら、
layer:8
です。
ここで注意したいのは、公式マニュアルのHierarchy検索ではLayer名ではなくLayer番号を指定する形式として説明されていることです。
path: ― Hierarchy上の場所から探す
Hierarchyが複雑になってくると、親子関係から探したいこともあります。
たとえば、
Player
└ Weapon
という構造なら、
path:Player/Weapon
のようにHierarchy上のパスを条件に検索できます。
より大きなシーンになってくると便利な検索方法です。
id: ― Instance IDから探す
GameObjectにはUnity内部で使われるInstance IDがあります。
たとえば、
id:210
なら、Instance IDに「210」を含むGameObjectを検索します。
さらに、
id=21064
のように = を使うと、Instance IDが完全一致するものを検索できます。
普段の初心者向け制作では使用頻度は高くありませんが、デバッグなどでは役立つことがあります。
:と=の違いにも注目
Hierarchy検索では、
:
と
=
の違いが重要になる場合があります。
たとえば公式マニュアルでは、
path:Wall5/Br
なら、その文字列を一部に含むパスを検索します。
一方、
path=/Structures/Wall5/Brick
なら、そのシーンパスに完全一致するGameObjectを検索します。
まずは、
:
は「含んでいるものを探す」
=
は「ぴったり一致するものを探す」
くらいの感覚で覚えておくとよいでしょう。
実はさらに便利な検索もある
Unity 6では、GameObjectのHierarchy上の状態から検索することもできます。

たとえば、
is:child
子GameObjectだけを検索します。
is:leaf
子を持たないGameObjectだけを検索します。
is:root
親を持たない、つまりシーン直下のRoot GameObjectだけを検索します。
大きなHierarchyを整理するときには便利な機能です。
ただし、初めてUnityを学習している段階では、ここまで全部覚える必要はありません。
初学者なら、まずこの3つで十分
最初は次の3つを覚えておけば十分でしょう。
t:AudioSource
コンポーネントから探す
tag:Player
Tagから探す
layer:8
Layerから探す
特に、
t:
は覚えておくと非常に便利です。

「どこに付けた?」は検索すればいい
Unityを学び始めると、
「AudioSourceをどこに付けた?」
「Rigidbodyはどれ?」
「Colliderが付いているGameObjectは?」
という場面がよくあります。
そんなとき、Hierarchyを一つずつ開いて確認する必要はありません。
たとえば、
t:AudioSource
t:Rigidbody
t:BoxCollider
と検索すれば、すぐに見つけられます。
Unityでは、
覚えて探し回るより、検索する
という習慣を身につけることも大切です。
まとめ
Hierarchyの検索欄は、単にGameObject名を探すだけではありません。
検索トークンを使えば、
t:
tag:
layer:
path:
id:
など、さまざまな条件からGameObjectを探せます。
特に覚えておきたいのが、
t:AudioSource
です。
これは、
AudioSourceコンポーネントを持っているGameObjectを探す
という検索です。
Unityのシーンが大きくなるほど、この検索機能は便利になります。
「どこに付けたか分からない!」
となったときは、Hierarchyを全部開いて探す前に、
まず検索欄を使えないか考えてみましょう。









ディスカッション
コメント一覧
まだ、コメントがありません