GoQL オーバービュー
イントロダクション
GoQL は「GameObject Query Language」の略です。
シーンのヒエラルキーから GameObject のセットを構築するために使用されます。
この API は単一のクエリ文字列をパラメーターとして受け取り、そのクエリにマッチする GameObject のセットを返します。
構造
GoQLクエリは、 name filters, indexers, discriminators, descenders, そして、exclusions.を使って構成されます。 一見、複雑そうですが、構文はディレクトリパスやファイル名と同様です。
Name Filters
GameObject の名前は直接指定できます。 例えば:
Head
この場合、「Head」という名前を持つすべての GameObject が抽出されます。
Name filter は、語頭、語中、または語尾にワイルドカードを使用することもできます。例:
GoQL | 説明 |
---|---|
*Head |
名前が「Head」で終わるすべての GameObject 。 |
Head* |
名前が「Head」で始まるすべての GameObject 。 |
*Head* |
名前のどこかに「Head」の文字列があるすべての GameObject 。 |
H*d |
名前が「H」で始まり、かつ「d」で終わるすべての GameObject 。 |
Name filter は、現在該当するセット内にマッチした GameObject を抽出します。
最初、該当するセットはグローバルで、Hierarchy内のすべてのオブジェクトが含まれます。
この該当するセットは descenders で変更できます。
現在、語中のワイルドカードには次の制限があります:
- 各セットでは、中間でワイルドカードは1つしか使用できません、例:
/H*d/C*d
はサポートされますが、/H*d*Tail
はサポートされません- 中間でのワイルドカードは、開始または終了ワイルドカードと一緒に使用することはできません。 セット単位で使用します。
/*d/C*d/T*
はサポートされますが、/*d*T*
はサポートされません
Descenders
Descenders はスラッシュ記号 (/
) で定義されます。
GoQL がこの記号を読み取ると、現在該当するセットの子に抽出が絞り込まれます。
この記号が GoQL 文字列の最初の文字になっている場合、シーン内のすべてのルートオブジェクトが含まれます。
二重アスタリスク (**
) は特別な descender で、該当するセットのすべての子孫を抽出するために使われます。
例:
GoQL | 説明 |
---|---|
/Head |
Hierarchy のルートにある「Head」という名前を持つ GameObject 。 |
Head/ |
「Head」という名前を持つすべての GameObject の直接の子。 |
Indexers
Indexers は、個々のインデックスまたはインデックスの範囲で数値インデックスを指定し、現在該当するセットにフィルターをかけます。 例:
GoQL | 説明 |
---|---|
Head/[0] |
「Head」という名前を持つすべての GameObject の最初の子。 |
Head/[0,1,5] |
「Head」という名前を持つすべての GameObject から指定されたインデックスを持つ子 (存在する場合)。 |
Head/[-1] |
「Head」という名前を持つすべての GameObject の最後の子。 |
Head/[3:5] |
「Head」という名前を持つ GameObject の子から、インデックスが 3 と 5 (これを除く) の間の子。 |
Discriminators
Discriminator は、特定のコンポーネント、マテリアル、シェーダが存在するかどうか、またはそれがアクティブか非アクティブかをチェックすることによって、現在のセットをフィルタリングするために使用されます。 Discriminator は、角括弧と以下のコードのいずれかを使用して指定します。
- 't':component
- 'm':material
- 's':shader
- 'active': is the gameobject enabled?
例:
GoQL | 説明 |
---|---|
Head<t:Collider> |
「Head」という名前を持ち、かつコライダーコンポーネントを持っているすべての GameObject 。 |
Head<m:Glow> |
「Head」という名前を持ち、かつ使用しているマテリアルの名前が「Glow」のすべての GameObject 。 |
Head<s:Standard> |
「Head」という名前を持ち、かつ「Standard」shader を使っているすべての GameObject 。 |
<active:false> |
All **GameObjects that are inactive. |
Exclusions
Exclusion は感嘆符(!
)で定義され、特定の GameObject を除外して、クエリをかえします。
構文は以下のように、どの GoQL Elementに適用されるかによって若干異なります。
Element | 構文 |
---|---|
Name filters | Name filter の前に ! を付けると、Name filter にマッチする GameObject を除外することができます。例:!Foo 。 |
Indexers | インデクサーの中に ! を入れます。例:/[0:10,!5] 。 |
Discriminators | Discriminatorsの中に ! を入れます、例:<!t:MeshFilter> |
例:
GoQL | 説明 |
---|---|
!Head* |
名前が「Head」で始まらないすべての GameObject 。 |
Hea*!*d |
名前が「Hea」で始まりますが、「d」で終わらないすべての GameObject 。 |
Hea*!Heat |
名前が「Hea」で始まりますが、「Heat」ではないすべての GameObject 。 |
Hea*!Heat!Head |
名前が「Hea」で始まりますが、「Heat」または「Head」ではないすべての GameObject 。 |
!H*d |
名前が "H "で始まらず、"d "で終わらない全てのGameObject。 |
[0:3,!0,!1] |
すべての GameObject の中で、それぞれが別の GameObject の3番目の子供であるものです。 |
<t:Collider><!t:MeshFilter> |
Collider component を持ち、MeshFilter component を持たない、すべての GameObject です。 |
その他の例
GoQL | 説明 |
---|---|
/ |
すべてのルート GameObject 。 |
Quad* |
名前が「Quad」で始まるすべての GameObject 。 |
Quad*/<t:AudioSource>[1] |
Quad "で始まる名前を持つすべての GameObject のAudioSourceを持つ2番目の子オブジェクトです。 |
<t:Transform, t:AudioSource> |
Transform とAudioSource component を持つすべての GameObject 。 |
<t:Renderer>/*Audio*/[0:3] |
下記の条件を満たしているすべての GameObject の最初の3つの子: * 親 GameObject が Renderer component を持っている。 * 名前に「Audio」が含まれている |
Cube/Quad/<t:AudioSource>[-1] |
「Cube」 という名前を持つ GameObject から、「Quad」で名前が始まる子を抽出し、さらにその中から AudioSource component を持つ最後の孫を抽出する。 |
<m:Skin> |
「Skin」という名前の Material を使っているすべての GameObject 。 |
/Env/**<t:MeshRenderer> |
「Env」という名前を持つルート GameObject の子孫で、かつ MeshRenderer component を持つものです。 |
/!*Head* |
名前のどこにも「Head」の文字列がないすべてのルート GameObject 。 |
/!*ead/!C* |
名前が「ead」で終わらないルート GameObject から、「C」で名前が始まらない子を抽出します。 |
/Head/!Cube/* |
名前が「Head」のルート GameObject から、名前が「Cube」ではない子の子を抽出します。 |
/Head*!*Unit |
名前が「Head」で始まりますが、「Unit」で終わらないすべてのルート GameObject です。 |
Quick Search との統合
プロジェクトが Quick Search パッケージを使用している場合。 またはUnity 2021.2以降を使用している場合、GoQLはQuick Search windowでも使用できます。 シーン Hierarchy 内のGameObjectを探します。