S&box Wiki

Revision Difference

UI#563180

<cat>UI.Intro</cat> <title>UI Basics</title>⤶ <title>UI Tips & Tricks</title>⤶ There's 2 ways to make UI right now in S&box. You can either create Panels entirely through code, or you can use [Razor](ui-razor) to create panels with HTML and CSS that can also use C#. It is recommended to use [Razor](ui-razor). # Tips and Tricks - You can set Panel classes - See [Panel.SetClass](https://sbox.game/dev/api/Sandbox.UI.Panel/SetClass), and [Panel.BindClass](https://sbox.game/dev/api/Sandbox.UI.Panel/BindClass) - If a panel is not behaving as expected you can troubleshoot it using the 'UI Panels' inspector. Enable it in View > UI Panels⤶ - If a panel is not behaving as expected you can troubleshoot it using the 'UI Panels' inspector. If its not enabled, you can do so under View > UI Panels.⤶ <upload src="2a1e9/8dd32660fc6ff2c.png" size="25281" name="image.png" /> ⤶ ## Scaling⤶ ⤶ By default, UI is scaled based on 1080p.⤶ ⤶ To change how scaling works, override your hud's `UpdateScale()` method as such:⤶ ⤶ ```csharp⤶ using Sandbox;⤶ using Sandbox.UI;⤶ ⤶ public class Hud : RootPanel⤶ {⤶ protected override void UpdateScale( Rect screenSize )⤶ {⤶ // Completely disables scaling⤶ Scale = 1;⤶ }⤶ }⤶ ```⤶ ## Drawing Polygons Example: ```csharp public class MyGui : Panel { public override void DrawBackground( ref RenderState state ) { // Obviously, don't declare this here every frame. But you get the idea. Span<Vertex> vertices = new Vertex[] { new Vertex( new Vector3( 100, 100 ), new Vector4( 0, 0, 0, 0 ), new Color32( 255, 0, 0 ) ), new Vertex( new Vector3( 300, 100 ), new Vector4( 0, 0, 0, 0 ), new Color32( 0, 255, 0 ) ), new Vertex( new Vector3( 300, 300 ), new Vector4( 0, 0, 0, 0 ), new Color32( 0, 0, 255 ) ), }; var attribs = new RenderAttributes(); attribs.Set( "Texture", Texture.White ); Graphics.Draw( vertices, 3, Material.UI.Basic, attribs, Graphics.PrimitiveType.Triangles ); } } // Wrapper component so you can use this in the scene system. public class MyGuiComponent : PanelComponent { protected override void OnEnabled() { var gui = new MyGui(); gui.Parent = Panel; } } ``` <upload src="b0cef/8dad4b74473f6ab.png" size="152528" name="image.png" />