Files
Test/Library/PackageCache/com.unity.inputsystem@2436e68c60c4/Documentation~/add-layout-using-layout-builder.md
T
2026-11-01 23:39:55 +02:00

62 lines
1.5 KiB
Markdown

---
uid: input-system-layout-builder
---
# Add a layout using Layout Builder
Finally, the Input System can also build layouts on the fly in code. This is useful for Device interfaces such as [HID](hid-specification.md) that supply descriptive information for each Device.
To build layouts dynamically in code, you can use the [`InputControlLayout.Builder`](xref:UnityEngine.InputSystem.Layouts.InputControlLayout.Builder) API.
Here's the same layout from the previous examples constructed programmatically:
```
var builder = new InputControlLayout.Builder()
.WithName("MyDevice")
.WithFormat("MDEV");
builder.AddControl("button1")
.WithLayout("Button")
.WithByteOffset(0)
.WithBitOffset(0);
builder.AddControl("button2")
.WithLayout("Button")
.WithByteOffset(0)
.WithBitOffset(1);
builder.AddControl("dpad")
.WithLayout("Dpad")
.WithByteOffset(0)
.WithBitOffset(2)
.WithSizeInBits(4);
builder.AddControl("dpad/up")
.WithByteOffset(-1)
.WithBitOffset(2);
builder.AddControl("dpad/down")
.WithByteOffset(-1)
.WithBitOffset(3);
builder.AddControl("dpad/left")
.WithByteOffset(-1)
.WithBitOffset(4);
builder.AddControl("dpad/right")
.WithByteOffset(-1)
.WithBitOffset(5);
builder.AddControl("stick")
.WithLayout("Stick")
.WithByteOffset(4)
.WithFormat("VEC2");
builder.AddControl("trigger")
.WithLayout("Axis")
.WithByteOffset(12)
.WithFormat("BYTE");
var layout = builder.Build();
```