Sprites that overlap if tall enough

Hey there. Surprisingly I couldn’t find any discussion about this. Is there a way to have 2D sprites overlap according to their coordinates? If, say, he or she passes by a traffic light, it should be rendered forward when the player’s feet are at higher Y coordinates than the base. I know sprites can be assigned a layer in order to manage their priority, but this one needs to change when objects in 2d/top-down games are tall.

I managed to do this using 3D objects and slightly tilting them but it’s kind of painful. All I can think of is a script that swaps layers according to the player’s coordinates with respect to the objects. Again, I would rather do it differently if possible.

Solved it. This one goes into a script that will be attached to static object (so that their sorting won’t be performed at every frame)

#pragma strict
@script ExecuteInEditMode()
var r : Renderer;
function Start () 
{
    r = GetComponent.<Renderer>();
    r.sortingOrder = transform.position.y * -1000;
}

And this one goes into the script attached to moving objects:

#pragma strict
@script ExecuteInEditMode()
var r : Renderer;
function Start () 
{
    r = GetComponent.<Renderer>();
}
function Update () 
{
    r.sortingOrder = transform.position.y * -1000;
}

The -1000 coefficient is used here to get rid of the comma. (Since Unity doesn’t support float numbers for sorting order). The minus tells the program that objects placed below are to be rendered first.