基本的な仕組みとしては、SortingOrder等はLayerシートのほうで設定する形になっています。
2Dプレハブの場合は、当初はLayerシートのこれらの設定が反映されない形だったのですが
それだと想定した動作にならないということで、今のバージョンでは反映するのが基本の形になっています。
「Ignore Override 2D Prefab Sorting Order」をオンにすると、SortingOrderは書き変えられません。(昔のバージョンの動作と同じ)
ご指摘の通り、後方互換用のための機能なので、明示的にSortingOrderを無視する、または独自に設定したい場合は、別の処理をしたほうが確実です。
2DプレハブのSortingOrderの変更処理を独自定義するには以下のコンポーネントを参考してください。
Utage/Scripts/ADV/Graphic/Object/CustomEvent/Adv2DPrefabSortingOrder.cs
ソースコードは次のようになっています。
public class Adv2DPrefabSortingOrder : MonoBehaviour
, IAdvGraphicEventSortingOrder
{
public int offsetSortingOrder = 0;
public void SetSortingOrder(int sortingOrder)
{
var sprite = this.GetComponent<SpriteRenderer>();
if (sprite != null)
{
sprite.sortingOrder = sortingOrder + offsetSortingOrder;
}
}
}
2DプレハブにIAdvGraphicEventSortingOrderを継承したコンポーネントがある場合は、そちらの処理が優先されます。
上記を参考に、IAdvGraphicEventSortingOrderを継承したコンポーネントを作成し、それをプレハブにアタッチしてください。
public void SetSortingOrder(int sortingOrder)
このメソッド以下で、SortingOrderの変更を行います。
何もしなければプレハブで設定したsortingOrderをそのまま使いますので、ひとまずをそれを試してみてください。
int sortingOrderは、Layerシートで設定したsortingOrderの値が渡されます。
サンプルでは、「設定したオフセット値+Layerシートで設定したsortingOrder」を設定する形にしています。
独自に表示順を変えたい場合は、SetSortingOrderのメソッドを目的に合わせて実装してください。
たとえば、複数の2Dプレハブ以下に複数Spriteがあって、なおかつLayerシートのSortingOrderにも合わせて表示順を変えたい場合などでは、
この手法でカスタムコンポーネントを作ってください。