Standardmäßig ist der Prompt ausgewählt, der zuerst die Quelle prüft. Sie können zu einem direkten Befehl wechseln oder eine lokale Kopie herunterladen.
Quelldateien prüfen
Lesen Sie SKILL.md und alle von SkillsMP angezeigten Begleitdateien, bevor Sie sich für eine Installation entscheiden.
Mit Codex oder Claude installieren Kopieren Sie diesen Prompt, fügen Sie ihn in Codex, Claude oder einen anderen Assistant ein und lassen Sie die Skill-Seite prüfen und installieren.
Ein direkter Befehl überspringt den Prüf-Prompt. Prüfen Sie die Quelle, bevor Sie ihn ausführen.
JEngine Editor UI component library with theming. Triggers on: custom inspector, editor window, Unity editor UI, UIElements, VisualElement, JButton, JStack, JCard, JTextField, JDropdown, JTabView, tab view, tabbed container, design tokens, dark theme, light theme, editor styling, themed button, form layout, progress bar, status bar, toggle button, button group
JEngine Editor UI Components
Modern UI component library for Unity Editor using UIElements with automatic dark/light theme support.
When to Use
Building custom inspectors
Creating Editor windows
Designing Editor tools with consistent styling
Namespaces
using JEngine.UI.Editor.Components.Button;
using JEngine.UI.Editor.Components.Layout;
using JEngine.UI.Editor.Components.Form;
using JEngine.UI.Editor.Components.Feedback;
using JEngine.UI.Editor.Components.Navigation;
using JEngine.UI.Editor.Theming;
var toggle = new JToggleButton(
onText: "Enabled",
offText: "Disabled",
initialValue: false,
onVariant: ButtonVariant.Success,
offVariant: ButtonVariant.Danger,
onValueChanged: value => Debug.Log($"Now: {value}"));
// Access value
toggle.Value = true;
toggle.SetValue(false, notify: false);
JButtonGroup - Responsive Button Row
vargroup = new JButtonGroup(
new JButton("Save", Save, ButtonVariant.Primary),
new JButton("Cancel", Cancel, ButtonVariant.Secondary))
.NoWrap()
.FixedWidth();
Layout Components
JStack - Vertical Layout
// Gap sizes: Xs (2px), Sm (4px), MD (8px), Lg (12px), Xl (16px)var stack = new JStack(GapSize.MD)
.Add(new Label("Title"))
.Add(new JButton("Action"))
.WithGap(GapSize.Lg);
JRow - Horizontal Layout
var row = new JRow()
.Add(new JButton("Left"))
.Add(new JButton("Right"))
.WithJustify(JustifyContent.SpaceBetween) // Start, Center, End, SpaceBetween
.WithAlign(AlignItems.Center) // Start, Center, End, Stretch
.NoWrap();
JCard - Bordered Container
var card = new JCard()
.Add(new Label("Card Content"))
.Compact()
.NoMargin();
JSection - Card with Header
var section = new JSection("Settings")
.Add(new JFormField("Name", new JTextField()))
.Add(new JFormField("Enabled", new JToggle()))
.WithTitle("New Title")
.NoHeader()
.NoMargin();
// Access header and content
section.Header.text = "Updated";
section.Content.Add(new Label("More content"));
Form Components
JTextField - Styled Text Input
var field = new JTextField("initial value", "placeholder");
field.RegisterValueChangedCallback(evt => Debug.Log(evt.newValue));
// Fluent API
field.SetReadOnly(true)
.SetMultiline(true);
// Access valuestring text = field.Value;
field.Value = "new value";
// Bind to SerializedProperty
field.BindProperty(serializedProperty);
JDropdown - Generic Dropdown
// String dropdownvar stringDropdown = new JDropdown(
new List<string> { "Option A", "Option B" },
defaultValue: "Option A");
// Enum dropdown (recommended)var enumDropdown = JDropdown<MyEnum>.ForEnum(MyEnum.Default);
enumDropdown.OnValueChanged(value => Debug.Log(value));
// Generic dropdown with custom formattingvar customDropdown = new JDropdown<MyClass>(
items,
defaultValue: items[0],
formatSelectedValue: x => x.DisplayName,
formatListItem: x => x.FullDescription);
// Access
enumDropdown.Value = MyEnum.Other;
enumDropdown.Choices = newList;
JToggle - Toggle Switch
var toggle = new JToggle(initialValue: false)
.OnValueChanged(value => Debug.Log(value))
.WithClass("my-toggle");
toggle.Value = true;
toggle.SetValueWithoutNotify(false); // No callback
JObjectField - Unity Object Picker
var objectField = new JObjectField<Texture2D>(allowSceneObjects: false);
objectField.RegisterValueChangedCallback(evt =>
Debug.Log($"Selected: {evt.newValue?.name}"));
// Access
Texture2D texture = objectField.Value;
objectField.BindProperty(serializedProperty);
JFormField - Label + Control Layout
var formField = new JFormField("Player Name", new JTextField())
.WithLabelWidth(150)
.NoLabel();
// Add multiple controls
formField.Add(new JButton("Browse"));
Feedback Components
JProgressBar - Progress Indicator
var progress = new JProgressBar(initialProgress: 0f)
.SetProgress(0.5f)
.WithHeight(12)
.WithColor(Color.green)
.WithVariant(ButtonVariant.Success)
.WithSuccessOnComplete();
progress.Progress = 0.75f;
JStatusBar - Status Message with Accent
// Status types: Info, Success, Warning, Errorvar status = new JStatusBar("Ready", StatusType.Info)
.SetStatus(StatusType.Success)
.WithText("Operation complete!");
status.Text = "Processing...";
status.Status = StatusType.Warning;
JLogView - Scrollable Log Output
var logView = new JLogView(maxLines: 100)
.LogInfo("Started processing")
.LogError("Something went wrong")
.Log("Custom message", isError: false)
.WithMinHeight(150)
.WithMaxHeight(400);
logView.Clear();
logView.MaxLines = 200;
Solution: Ensure the property path is correct and call Bind() on the root:
var textField = new JTextField();
textField.BindProperty(serializedObject.FindProperty("myField"));
rootVisualElement.Bind(serializedObject);
Component Not Visible
Problem: Added component doesn't appear
Check:
Parent has flexGrow = 1 if using flex layout
Component has non-zero width/height
Parent visibility is not hidden
Buttons Not Responding
Problem: Click events not firing
Solution: Ensure callback is not null and component is enabled:
var btn = new JButton("Click", () => Debug.Log("Clicked"));
btn.SetEnabled(true); // Ensure enabled
Layout Issues
Problem: Components overlap or have wrong size
Solution: Use JStack for vertical, JRow for horizontal layouts:
// Wrong: direct Add to root
rootVisualElement.Add(component1);
rootVisualElement.Add(component2); // May overlap// Correct: use layout containervar stack = new JStack();
stack.Add(component1, component2);
rootVisualElement.Add(stack);
Performance with Many Components
Problem: Editor window slow with many items
Solution: Use virtualization for large lists, limit JLogView maxLines:
var log = new JLogView(maxLines: 100); // Limit entries