- Home /
How do I render objects in an order based on their y position for 2D?
So I'm trying to make a script that changes Order in Layer dynamically when objects are in range of each other. I've tried sortingOrder and it works for the 2 objects in my test scene. But when I try with many objects I see objects with a lower Y value render behind objects with a Higher Y value.
public static Transform player;
public float sightRange;
int sort;
SpriteRenderer sr;
void Awake(){
if (player == null){
player = GameObject.FindGameObjectWithTag ("Player").transform;
}
sr = GetComponent<SpriteRenderer> ();
psr = player.GetComponent<SpriteRenderer> ();
}
void Update () {
if (Vector3.Distance (transform.position, player.position) < sightRange) {
DecideSortingOrder ();
} else {
sr.sortingOrder = 0;
}
}
void DecideSortingOrder(){
if (player.transform.position.y > transform.position.y) {
sort = 1;
} else {
sort = -1;
}
sr.sortingOrder = (int)Camera.main.WorldToScreenPoint (transform.position).y * sort;
}
}
I also tried initializing Order in Layer by taking the Y value of an object
sr.sortingOrder = (int) transform.position.y;
But then I realized it doesn't work because Order in Layer only takes integers while my Y values can take floats. Any Y I get will be round down. Objects at y = 1.1 and 1.2 will have the same Order in Layer of 1.
Your answer
Follow this Question
Related Questions
Phantom balls 0 Answers
How to only show sprite with 2D light? 0 Answers
Why is this point light incorrectly lighting 0 Answers
Is tilemap renderer sorting done by camera y position? 0 Answers
How do you avoid Light2D's from penetrating ShadowCaster2Ds? 0 Answers