Sorting Groups を使用すると、ゲームオブジェクトをスプライトレンダラーと一緒にグループ化し、その中でスプライトをレンダリングする順序を制御できます。Unityは 1 つのゲームオブジェクトであるかのように、同じソートグループ内のスプライトレンダラーを一緒にレンダリングします。
ゲームオブジェクトを Sorting Group に配置するには、Sorting Group コンポーネントを加えます。これを行うには、ゲームオブジェクトを選択して Component > Rendering > Sorting Group の順に選択するか、ゲームオブジェクトの Inspector ウィンドウで Add Component ボタンを選択します。
Sorting Groupコンポーネントをゲームオブジェクトに追加すると、Unityは、そのコンポーネントがアタッチされているゲームオブジェクトのすべての子ゲームオブジェクトに同じ Sorting Group を適用します。
Unityは、Sorting Group の設定を使用して、シーン内の他のレンダラーと Sorting Group 内でレンダラーをソートする方法を決定します。詳細は 2D ソートを参照してください。
ソートグループ内のレンダラーをソートするために、Unity はソートグループ内のレンダラーの個々のソート設定を使用します。詳細は、ソートグループ内のレンダラーのソート を参照してください。
Unityは Sorting Group の Sorting Layer と Order in Layer の値を使用して、シーン内の他の Sorting Group とゲームオブジェクトの中で、レンダリングキューの優先順位を決定します。
プロパティ | 機能 |
---|---|
Sorting Layer | このドロップダウンメニューからSorting Layerを選択または追加して、 レンダーキューでのSorting Groupの位置を決定します。 UnityはSorting Layerの設定でSorting Layerの順番を決定します。 Sorting Layersをリストに表示されている順にレンダリングします。 Sorting Layersの設定については、 タグとレイヤーを参照してください。 |
Order in Layer | Sorting Layer 内のこの Sorting Group のレンダリング順序を設定します。Unity は低い値のレンダラーを最初にキューに送るため、高い値のレンダラーの前に表示されます。 |
Sorting Layer を使ってスプライトをソートする方法の詳細は、2D ソートを参照してください。
Unityは、同じ Sorting Group 内のすべてのレンダラーを、個々の Sorting Layer と Layer の Renderer プロパティ でソートします。Unity は、このソート処理中に各レンダラーの個々の Distance to Camera プロパティを考慮しません。代わりに、Sorting Group コンポーネントを含むルートのゲームオブジェクトの位置に基づいて、Sorting Group 全て(その子レンダラーすべてを含む)の Distance to Camera 値を設定します。
Unity がシーンの他のレンダラーと Sorting Group 内で Sorting Group をソートする場合、Sorting Group 内部のソートはそのままです。
次の図は、ソート処理を示しています。
Unity は、同じ Sorting Group に属するレンダラーをすべて 1 つのレイヤーとして扱い、グループ化されていないレンダラーを Sorting Layer と Order in Layer プロパティ設定に基づいてソートします。
エディターは、Sorting Group の子であるパーティクルシステムをそのソートグループ内の別のレンダラーとして扱います。そのため、パーティクルシステムの Sorting Layer と Order in Layer プロパティ設定に基づいて、他のレンダラーと一緒に内部でソートします。
Sorting Group 内の他のレンダラーでパーティクルシステムをソートする場合、Unity はパーティクルシステムの Sorting Fudge 値を無視します。
ネストされた Sorting Group は、親ソートグループを持つ Sorting Group です。Unity は、ネストされた Sorting Group 内のレンダラーを最初に、親よりも先にソートします。ソーティンググループ内のレンダラーのソート を参照してください。
ネストされた Sorting Group の内部ソート順を決定した後、ネストされたソートグループを親 ソートグループ 内の他のレンダラーやソートグループと一緒にソートします。ネストされたソートグループは、ネストされたソートグループを子として持つことができます。Unity は最も内側の子 Group をそれぞれの親よりも先にソートします。
以下の図は、ネストされた Sorting Group のソート処理の例を示しています。
複数の 2D スプライトキャラクターを作成する最も一般的な方法は、Hierarchy ウィンドウで複数のスプライトレンダラーを並べて親にし、キャラクターを形成することです。このような複雑な複数のスプライトキャラクターを管理するために、Sorting Group を使用できます。
以下の例では、スプライトレンダラーは同じ Sorting Layer に属していますが、 Order in Layer の値が異なります。キャラクターのさまざまな部分を表示したい順にソートします。
Sorting Group と Sorting Layers を設定した後、キャラクターをプレハブとして保存し、必要なだけクローンすることができます。
ただし、プレハブスプライトはすべて Sorting Layer と Order in Layer の値を持ち、他のプレハブと同じレイヤーにレンダリングされるため、プレハブキャラクターの異なる部分が交差し、正しくレイヤーにされない場合があります。
プレハブが独自のレンダリング順序を維持して正しく表示されるようにするには、各プレハブのルート GameObject に Sorting Group コンポーネントを加えます。編集したプレハブを保存します。すると、プレハブの現在および将来のすべてのインスタンスにも Sorting Group コンポーネントが含まれるようになります。
各プレハブには、同じ Sorting Layer コンポーネントと Order in Layer プロパティ設定を持つ Sorting Group コンポーネントが必要です。これは、同じ Sorting Layer にあるプレハブのレンダラーが、一貫性のない方法でレンダリングされる原因となります。なぜなら、それらは レンダーキュー で同じ優先順位を持つからです。
この問題を回避するには、各プレハブの Sorting Group コンポーネントに一意の Order in Layer の値を設定します。Unity は、最初に Order in Layer 値が低い Sorting Group をレンダリングし、値が高い Sorting Group は値の低い Sorting Group の上に重なります。Sorting Layers の編集と順序変更に関して詳しくは、Tags and Layers を参照してください。
各プレハブには、一意の Order in Layer 値を持つ Sorting Group コンポーネントがあり、Unity が各キャラクターとそのパーツを正しくレンダリングするよう制御しています。