- Home /
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.
Answer by Ybs · Jun 14, 2015 at 01:38 PM
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.
Your answer
Follow this Question
Related Questions
Sprites that moves overlapping 1 Answer
Apply a shader to multiple 2D sprites 2 Answers
Unity2D sprites overlapping 2 Answers
Sprite Grayscale Shader Filter Overlap 0 Answers
2D Sprites border overlap . 0 Answers