Version: 2023.2
言語: 日本語
スプライトエディターデータプロバイダー API
スプライトの 9 スライス

ソートグループ

Sorting Group (ソートグループ) を使用すると、ゲームオブジェクトを スプライトレンダラー と一緒にグループ化し、その中でスプライトをレンダリングする順序を制御できます。Unity は 1 つのゲームオブジェクトであるかのように、同じソートグループ内のスプライトレンダラーを一緒にレンダリングします。

ソートグループ の設定

ゲームオブジェクトをソートグループに配置するには、Sorting Group コンポーネントを加えます。これを行うには、ゲームオブジェクトを選択して Component > Rendering > Sorting Group の順に選択するか、ゲームオブジェクトの Inspector ウィンドウで Add Component ボタンを選択します。

Sorting Group コンポーネントをゲームオブジェクトに追加すると、Unity は、そのコンポーネントがアタッチされているゲームオブジェクトのすべての子ゲームオブジェクトに同じ ソートグループ を適用します。


空の親ゲームオブジェクトの Sorting Group に属する ‘Sprite’ 子オブジェクト

Unity は、Sorting Group の設定を使用して、シーン内の他のレンダラーとソートグループ内でレンダラーをソートする方法を決定します。詳細は 2D ソート を参照してください。

ソートグループ内のレンダラーをソートするために、Unity はソートグループ内のレンダラーの個々のソート設定を使用します。詳細は、ソートグループ内のレンダラーのソート を参照してください。

Sorting Group プロパティ

Unity は Sorting GroupSorting LayerOrder in Layer の値を使用して、シーン内の他のソートグループとゲームオブジェクトの中で、レンダリングキューの優先順位を決定します。

Sorting Group コンポーネント
Sorting Group コンポーネント
プロパティ 機能
Sorting Layer このドロップダウンメニューから ソートレイヤー を選択または追加して、レンダーキューでのソートグループの位置を決定します。Unity は Sorting Layer の設定での位置によって、ソートレイヤーの順番を決定し、リストに表示されている順にソートレイヤーをレンダリングします。ソートレイヤーの設定については、Tags and Layers を参照してください。
Order in Layers Sorting Layer 内でこの ソートグループのレンダリング順序を設定します。Unity は低い値のレンダラーを最初にキューに送るため、それらは高い値のレンダラーの前に表示されます。
Sort At Root このオプションを有効にすると、このソートグループ がネストされている場合、すべての親ソートグループを無視します。これにより、この ソートグループをルートレベルで他のレンダラーとソートグループに対して並べ替えることができます。

Sorting Layer を使ってスプライトをソートする方法の詳細は、2D ソートを参照してください。

ソートグループ 内のレンダラーのソート

Unityは、同じソートグループ内のすべてのレンダラーを、個々の Sorting LayerLayerRenderer プロパティ でソートします。Unity は、このソート処理中に各レンダラーの個々の Distance to Camera プロパティを考慮しません。代わりに、Sorting Group コンポーネントを含むルートのゲームオブジェクトの位置に基づいて、Sorting Group 全て (その子レンダラーすべてを含む) の Distance to Camera 値を設定します。

Unity がシーンの他のレンダラーとソートグループ内でソートグループをソートする場合、ソートグループ内部のソートはそのままです。

次の図は、ソート処理を示しています。

ソートグループ内部のソート処理
ソートグループ内部のソート処理

Unity は、同じソートグループに属するレンダラーをすべて 1 つのレイヤーとして扱い、グループ化されていないレンダラーを Sorting LayerOrder in Layer プロパティ設定に基づいてソートします。

パーティクルシステム

エディターは、ソートグループの子である パーティクルシステム をそのソートグループ内の別のレンダラーとして扱います。そのため、パーティクルシステムの Sorting LayerOrder in Layer プロパティ設定に基づいて、他のレンダラーといっしょに内部でソートします。

ソートグループ内の他のレンダラーでパーティクルシステムをソートする場合、Unity はパーティクルシステムの Sorting Fudge 値を無視します。

ネストされたソートグループ

ネストされた Sorting Group は、親ソートグループを持つ Sorting Group です。Unity は、ネストされた Sorting Group 内のレンダラーを最初に、親よりも先にソートします。ソーティンググループ内のレンダラーのソート を参照してください。

ネストされた Sorting Group の内部ソート順を決定した後、ネストされたソートグループを親 ソートグループ 内の他のレンダラーやソートグループと一緒にソートします。ネストされたソートグループは、ネストされたソートグループを子として持つことができます。Unity は最も内側の子 Group をそれぞれの親よりも先にソートします。

以下の図は、ネストされた Sorting Group のソート処理の例を示しています。 

ネストされた ソートグループ のソート処理
ネストされた ソートグループ のソート処理

ルートでソート

特定の状況では、Sorting Group がネストされ、シーンの Hierarchy に基づいて順序付けされる場合があります。しかし、このネストされたソートグループを、シーンの Hierarchy での位置を変えることなく、親ソートグループとは別にレンダリングしたい場合があります。

このオプションを有効にすると、この Sorting Group が親ソートグループを無視できるようになります。これにより、ゲームオブジェクトを別のトランスフォームに再度親にする必要なく、このソートグループを他のレンダラーとソートグループに対してグローバルにソートできるようになります。親を無視していないすべての子レンダラーやソートグループ は、このソートグループの下で並べ替えされます。

ソートグループの使用

複数の 2D スプライトキャラクターを作成する最も一般的な方法は、Hierarchy ウィンドウで複数のスプライトレンダラーを並べて親にし、キャラクターを形成することです。このような複雑な複数のスプライトキャラクターを管理するために、Sorting Groups を使用できます。

以下の例では、スプライトレンダラーは同じ Sorting Layer に属していますが、Order in Layer の値が異なります。キャラクターのさまざまな部分を表示したい順にソートします。 

階層内にパーツを持つキャラクタープレハブ
階層内にパーツを持つキャラクタープレハブ

Sorting Group と Sorting Layers を設定した後、キャラクターを プレハブ として保存し、必要なだけ複製することができます。

ただし、プレハブスプライトはすべて Sorting LayerOrder in Layer の値を持ち、他のプレハブと同じレイヤーにレンダリングされるため、プレハブキャラクターの異なる部分が交差し、正しくレイヤーにされない場合があります。

Unity はスプライトを同じレイヤーにレンダリングするため、2つのプレハブのスプライトが正しく交差しません
Unity はスプライトを同じレイヤーにレンダリングするため、2つのプレハブのスプライトが正しく交差しません

プレハブが独自のレンダリング順序を維持して正しく表示されるようにするには、各プレハブのルート GameObject に Sorting Group コンポーネントを加えます。編集したプレハブを保存します。すると、プレハブの現在および将来のすべてのインスタンスにも Sorting Group コンポーネントが含まれるようになります。

各プレハブには、同じ Sorting Layer コンポーネントと Order in Layer プロパティ設定を持つ Sorting Group コンポーネントが必要です。これは、同じ Sorting Layer にあるプレハブのレンダラーが、一貫性のない方法でレンダリングされる原因となります。なぜなら、それらは レンダーキュー で同じ優先順位を持つからです。

この問題を回避するには、各プレハブの Sorting Group コンポーネントに一意の Order in Layer の値を設定します。Unity は、最初に Order in Layer 値が低いソートグループをレンダリングし、値が高い ソートグループ は値の低いソートグループの上に重なります。Sorting Layers の編集と順序変更に関して詳しくは、Tags and Layers を参照してください。

各プレハブには、一意の Order in Layer 値を持つ Sorting Group コンポーネントがあり、Unity が各キャラクターとそのパーツを正しくレンダリングするよう制御しています。

SortingGroup

スプライトエディターデータプロバイダー API
スプライトの 9 スライス