Version: 2019.4
Sprite Editor: Secondary Textures
スプライトの 9 スライス

Sorting Group

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

Sorting Group の設定

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

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

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

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

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

Sorting Group プロパティー

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

Sorting Group コンポーネント
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 ソートを参照してください。

Sorting Group 内のレンダラーのソート

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

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

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

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

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

パーティクルシステム

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

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

ネストの Sorting Group

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

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

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

ネストされた Sorting Group のソート処理
ネストされた Sorting Group のソート処理

Sorting Group の使用

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

以下の例では、スプライトレンダラーは同じ 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 Group をレンダリングし、値が高い Sorting Group は値の低い Sorting Group の上に重なります。Sorting Layers の編集と順序変更に関して詳しくは、Tags and Layers を参照してください。

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

Sprite Editor: Secondary Textures
スプライトの 9 スライス