62 lines
1.5 KiB
Markdown
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();
|
|
```
|