diff --git a/sources/engine/Stride.UI/Engine/UIComponent.cs b/sources/engine/Stride.UI/Engine/UIComponent.cs
index 0f98dd36a6..62ba81630c 100644
--- a/sources/engine/Stride.UI/Engine/UIComponent.cs
+++ b/sources/engine/Stride.UI/Engine/UIComponent.cs
@@ -129,6 +129,15 @@ public UIPage Page
[DefaultValue(RenderGroup.Group0)]
public RenderGroup RenderGroup { get; set; }
+ ///
+ /// Gets or sets the render order of this UI component. Components with a lower value
+ /// are rendered first (behind), higher values are rendered on top.
+ ///
+ [DataMember(90)]
+ [Display("Render Order")]
+ [DefaultValue(0)]
+ public int RenderOrder { get; set; }
+
///
/// A fixed size UI component with height of 1 will be this much of the vertical resolution on screen
///
diff --git a/sources/engine/Stride.UI/Rendering/UI/RenderUIElement.cs b/sources/engine/Stride.UI/Rendering/UI/RenderUIElement.cs
index 982b07aef7..5373536e67 100644
--- a/sources/engine/Stride.UI/Rendering/UI/RenderUIElement.cs
+++ b/sources/engine/Stride.UI/Rendering/UI/RenderUIElement.cs
@@ -37,6 +37,7 @@ public RenderUIElement()
public bool IsBillboard;
public bool SnapText;
public bool IsFixedSize;
+ public int RenderOrder;
///
/// Last registered position of teh mouse
diff --git a/sources/engine/Stride.UI/Rendering/UI/UIRenderFeature.cs b/sources/engine/Stride.UI/Rendering/UI/UIRenderFeature.cs
index ca8d00a35e..dbbab047f9 100644
--- a/sources/engine/Stride.UI/Rendering/UI/UIRenderFeature.cs
+++ b/sources/engine/Stride.UI/Rendering/UI/UIRenderFeature.cs
@@ -100,6 +100,9 @@ private void DrawInternal(RenderDrawContext context, RenderView renderView, Rend
uiElementStates.Add(new UIElementState(renderElement));
}
+ // sort by RenderOrder so components with lower value are drawn first (behind)
+ uiElementStates.Sort(static (a, b) => a.RenderObject.RenderOrder.CompareTo(b.RenderObject.RenderOrder));
+
// evaluate the current draw time (game instance is null for thumbnails)
var drawTime = game != null ? game.DrawTime : new GameTime();
diff --git a/sources/engine/Stride.UI/Rendering/UI/UIRenderProcessor.cs b/sources/engine/Stride.UI/Rendering/UI/UIRenderProcessor.cs
index c97ac26cf5..35327a71b8 100644
--- a/sources/engine/Stride.UI/Rendering/UI/UIRenderProcessor.cs
+++ b/sources/engine/Stride.UI/Rendering/UI/UIRenderProcessor.cs
@@ -52,6 +52,7 @@ public override void Draw(RenderContext gameTime)
renderUIElement.IsBillboard = uiComponent.IsBillboard;
renderUIElement.SnapText = uiComponent.SnapText;
renderUIElement.IsFixedSize = uiComponent.IsFixedSize;
+ renderUIElement.RenderOrder = uiComponent.RenderOrder;
if (renderUIElement.RenderGroup != uiComponent.RenderGroup)
{