Unity
Unity2D

GraphicSettings.TransparencySortMode.CustomAxis~Y座標が下のやつを手前に描画、上のやつを奥に描画する~

Unityの2Dスプライトの描画順序の管理は、Unity5.6でGraphicSettings.TransparencySortMode.CustomAxisが追加されたことでさらに簡単になりました。

例えば「Y座標が下のやつを手前に描画、上のやつを奥に描画する」

sort.gif

(キャラクター画像は臼井の会 香月清人様のものです)

Unity 5.6以前は、Updateメソッド内でいちいちSpriteRenderごとにOrderInLayerを正しく設定する必要がありました。

Unity 5.6からはEdit > ProjectSettings > Graphics > Camera Settingsで

  • Transparency Sort ModeをCustomAxis
  • Transparency Sort Axisを(0.0F, 1.0F, 0.0F)

とするだけで、「Y座標が下のやつを手前に描画、上のやつを奥に描画する」を実現することができるようになりました。
わざわざコードを書く必要がなくなりました。

また、ProjectのGraphics Settingをいじるのが嫌な人は、次のようにCameraコンポーネントのプロパティを設定することで実現することができます。

using UnityEngine;

public class OrderedCamera : MonoBehaviour
{
    void Awake()
    {
        var camera = GetComponent<Camera>();
        camera.transparencySortMode = TransparencySortMode.CustomAxis;
        camera.transparencySortAxis = new Vector3(0.0F, 1.0F, 0.0F);
    }
}

この設定による描画順序の制御は、OrderInLayerよりも優先順位が低いのでその点だけ注意が必要です。

参考関連