Challenge - 5 Problems
Sorting Layers Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate2:00remaining
What is the output of sorting order values?
Consider two GameObjects with SpriteRenderer components. One has sortingLayerName = "Background" and sortingOrder = 2, the other has sortingLayerName = "Foreground" and sortingOrder = 1. Which one will appear on top in the game view?
Unity
SpriteRenderer bgRenderer = backgroundGameObject.GetComponent<SpriteRenderer>(); SpriteRenderer fgRenderer = foregroundGameObject.GetComponent<SpriteRenderer>(); // Background layer order Debug.Log($"Background layer order: {bgRenderer.sortingOrder}"); // Foreground layer order Debug.Log($"Foreground layer order: {fgRenderer.sortingOrder}");
Attempts:
2 left
💡 Hint
Remember that sorting layers have a priority order set in Unity, and sortingOrder only affects order within the same layer.
✗ Incorrect
Unity draws objects based on their sorting layer order first. The "Foreground" layer is above "Background" by default, so the Foreground object appears on top even if its sortingOrder is lower.
❓ Predict Output
intermediate1:30remaining
What is the sorting order after changing it at runtime?
You have a SpriteRenderer with sortingOrder = 5. You run this code:
spriteRenderer.sortingOrder = 10;
What is the sortingOrder value after this code runs?
Unity
spriteRenderer.sortingOrder = 10;
Debug.Log(spriteRenderer.sortingOrder);Attempts:
2 left
💡 Hint
Think about whether sortingOrder can be changed at runtime.
✗ Incorrect
sortingOrder is a writable property. Setting it to 10 changes the order immediately.
❓ Predict Output
advanced2:30remaining
What is the output of this sorting layer comparison code?
Given two SpriteRenderers with the same sortingOrder but different sortingLayerIDs, what does this code print?
```csharp
int result = spriteRendererA.sortingLayerID.CompareTo(spriteRendererB.sortingLayerID);
Debug.Log(result);
```
Unity
int result = spriteRendererA.sortingLayerID.CompareTo(spriteRendererB.sortingLayerID);
Debug.Log(result);Attempts:
2 left
💡 Hint
sortingLayerID is an integer representing the layer's priority.
✗ Incorrect
sortingLayerID is an integer. CompareTo returns 0 if equal, positive if the first is greater, negative if smaller.
❓ Predict Output
advanced2:30remaining
What happens if two objects share the same sorting layer and order?
Two GameObjects have SpriteRenderers with sortingLayerName = "Default" and sortingOrder = 0. What determines which one is drawn on top?
Attempts:
2 left
💡 Hint
When sorting layers and orders are equal, Unity uses the object's position in 3D space.
✗ Incorrect
If sorting layers and orders are the same, Unity uses the Z position to decide draw order. Lower Z means closer to camera and drawn on top.
🧠 Conceptual
expert3:00remaining
How to ensure UI elements always appear above sprites using sorting layers?
You want UI elements to always appear above all sprites in your scene. Which approach ensures this reliably?
Attempts:
2 left
💡 Hint
Think about sorting layers priority and how UI Canvas uses them.
✗ Incorrect
UI Canvases respect sorting layers and orders. Assigning a sorting layer above all sprite layers and a high sortingOrder ensures UI is always drawn on top.