スプライトパッカー
スプライトの 9 スライス

Sorting Group

Sorting Group は、 Sprite Renderers によるレンダリングの順序を変えるコンポーネントです。これを利用すると、同じルートを共有するレンダラーをまとめて 1 つのグループとしてソートできます。Unity のレンダラーは、レイヤー内の順序、カメラからの距離など、いくつかの基準によってソートされます。

Sorting Group の設定

Sorting Group コンポーネントを利用するには、Sorting Group コンポーネントを ゲームオブジェクト のルート (グループとしてソートしたい複数の親ゲームオブジェクト) に加えます。ゲームオブジェクトのルートを選び、それから、メインメニューで Component > Rendering > Sorting Group の順に選択します。

Sorting Group は、シーンビュー内で視覚的に表示されません。空のゲームオブジェクトに加えて使用します。多くのゲームオブジェクトがあり、それらをまとめて 1 グループとしてソートを適用する場合に便利です。

Sorting Group は他のレンダラーに依存せず、ゲームオブジェクトとその子孫のゲームオブジェクトにアタッチされているレンダラーが一緒にレンダリングされます。

Sorting Group コンポーネント
Sorting Group コンポーネント
プロパティー 説明
Sorting Layer レンダリングのときにスプライトが重なる順番を決定するのに使用するレイヤーをドロップダウンで選択します。
Order in Layer 同じレイヤー内で、スプライトの重なる優先順位を設定します。数が小さいものが先にレンダリングされ、大きい数をもつものが、重ねられてレンダリングされます。

Sorting Group をソート

Unity は、Sorting Layers のコンセプトを利用して、スプライトをグループに分け (Sorting Group)、重ねる優先順位を決定します。優先順位の低い__Sorting Layer__ を持つ Sorting Group の上に、優先順位の高い__Sorting Layer__ の Sorting Group が重なります。

同じ Sorting Layer 内の 2 つ以上のオブジェクトが重なることがあります (例えば、下の例に示すような横スクロールゲームの 2 つのプレイヤーキャラクター)。Order in Layer プロパティーを使用すると、同じレイヤー内の複数の Sorting Group に一貫した優先順位を適用することができます。Sorting Layer と同じように、最初に Order in Layer の値が小さいものがレンダリングされ、後からレンダリングされる値が大きい Sorting Group によって重ねられます。 Sorting Layers の編集に関する詳細は、タグとレイヤー のドキュメントを参照してください。

Sorting Group の子孫は最も近い他の Sorting Group または隣の Sorting Group の子孫に対してソートされます (ソートが距離によるものか、Order in Layer によるものかによって決まります)。 つまり、 Sorting Group は自身の子孫のためだけにローカルのソート空間を生成します。これにより、グループ内の各レンダラーを Sorting LayerOrder in Layer を利用してソートすることが可能ですが、ローカルでは含んでいる Sorting Group に対してソートします。

ネストの Sorting Group

ネスト式の Sorting Group は同じグループの他のレンダラーに対してソートされます。

ただし、Hierarchy ウインドウで Sorting Group に属さないゲームオブジェクトは、1 つのレイヤーとしてまとめてレンダリングされます。そして、レンダラーは、 Sorting LayerOrder in Layer に基づいてソートされます。

Sorting Group の使用例

Sorting Group は一般的に 2D ゲームにおいて、いくつかのスプライトで構成される複雑なキャラクターに利用されます。この例では Hierarchy に複数レンダラーをもつ 2D キャラクターを使用します。

1 つの Sorting Layer 内の複数のスプライトで構成されるキャラクター。複数の__Order in Layers__ を使いボディーパーツをソートしています。
1 つの Sorting Layer 内の複数のスプライトで構成されるキャラクター。複数の__Order in Layers__ を使いボディーパーツをソートしています。

このキャラクターは 1 つの Sorting Layer 内で複数の Order in Layers を使ってボディパーツをソートしています。それから、キャラクターは プレハブ として保存され、ゲーム中に何度も複製できます。

以下の表示のように、複製するときにボディパーツは同じレイヤーにあるため、互いに重なり合います。

同じレイヤーにあるため、2 つのキャラクターのボディパーツは重なり合います。
同じレイヤーにあるため、2 つのキャラクターのボディパーツは重なり合います。

期待する結果は、1 つのキャラクターのレンダラーがすべて一緒にレンダリングされてから、次のキャラクターがレンダリングされることです。現在の状態は、互いに通り抜けているように見えます。両方のキャラクターがブレンドされているというよりも、1 つが他方よりカメラに近いように見えます。

キャラクターのルートに加えた Sorting Group コンポーネントによって、ボディパーツが重なり合わず、混合しないようにします。

Sorting Group コンポーネントは各キャラクターを 1 つのグループとしてソートし、ボディパーツが重なり合う問題を回避します
Sorting Group コンポーネントは各キャラクターを 1 つのグループとしてソートし、ボディパーツが重なり合う問題を回避します
キャラクターごとに Sorting Group コンポーネントを設定した複数キャラクターのソート
キャラクターごとに Sorting Group コンポーネントを設定した複数キャラクターのソート
スプライトパッカー
スプライトの 9 スライス