claude-code-arcane 2.3.0 → 2.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.md +54 -6
  3. package/agents/game/ue-blueprint-specialist.md +125 -0
  4. package/agents/game/ue-gas-specialist.md +133 -0
  5. package/agents/game/ue-umg-specialist.md +131 -0
  6. package/dist/cli.js +5 -0
  7. package/docs/SKILLS-CATALOG.md +42 -3
  8. package/docs/USER-GUIDE.md +2 -2
  9. package/hooks/detect-unreal.sh +90 -0
  10. package/package.json +1 -1
  11. package/profiles/unreal-dev.yaml +97 -0
  12. package/rules/gamedev/unreal-code.md +125 -0
  13. package/skills/install-mcp/SKILL.md +135 -46
  14. package/skills/install-mcp/references/unreal-operations.md +55 -0
  15. package/skills/ue-actor-component-architecture/SKILL.md +509 -0
  16. package/skills/ue-actor-component-architecture/references/actor-lifecycle.md +301 -0
  17. package/skills/ue-actor-component-architecture/references/component-types.md +592 -0
  18. package/skills/ue-ai-navigation/SKILL.md +526 -0
  19. package/skills/ue-ai-navigation/references/behavior-tree-patterns.md +392 -0
  20. package/skills/ue-ai-navigation/references/behavior-tree-workflow.md +107 -0
  21. package/skills/ue-ai-navigation/references/custom-bttask.md +104 -0
  22. package/skills/ue-ai-navigation/references/eqs-reference.md +423 -0
  23. package/skills/ue-animation-system/SKILL.md +521 -0
  24. package/skills/ue-animation-system/references/anim-notify-reference.md +486 -0
  25. package/skills/ue-animation-system/references/locomotion-setup.md +550 -0
  26. package/skills/ue-async-threading/SKILL.md +433 -0
  27. package/skills/ue-async-threading/references/thread-safety-guide.md +213 -0
  28. package/skills/ue-async-threading/references/threading-patterns.md +345 -0
  29. package/skills/ue-audio-system/SKILL.md +527 -0
  30. package/skills/ue-audio-system/references/audio-setup-patterns.md +700 -0
  31. package/skills/ue-blueprints/SKILL.md +134 -0
  32. package/skills/ue-blueprints/references/communication.md +82 -0
  33. package/skills/ue-character-movement/SKILL.md +475 -0
  34. package/skills/ue-character-movement/references/cmc-extension-patterns.md +335 -0
  35. package/skills/ue-character-movement/references/movement-pipeline.md +189 -0
  36. package/skills/ue-cpp-foundations/SKILL.md +533 -0
  37. package/skills/ue-cpp-foundations/references/components-and-gc.md +107 -0
  38. package/skills/ue-cpp-foundations/references/container-patterns.md +544 -0
  39. package/skills/ue-cpp-foundations/references/delegate-patterns.md +497 -0
  40. package/skills/ue-cpp-foundations/references/gameplay-classes-cpp.md +136 -0
  41. package/skills/ue-cpp-foundations/references/property-specifiers.md +306 -0
  42. package/skills/ue-data-assets-tables/SKILL.md +527 -0
  43. package/skills/ue-data-assets-tables/references/asset-loading-patterns.md +306 -0
  44. package/skills/ue-data-assets-tables/references/data-driven-design.md +378 -0
  45. package/skills/ue-editor-tools/SKILL.md +523 -0
  46. package/skills/ue-editor-tools/references/detail-customization-patterns.md +395 -0
  47. package/skills/ue-editor-tools/references/editor-module-setup.md +480 -0
  48. package/skills/ue-game-features/SKILL.md +477 -0
  49. package/skills/ue-game-features/references/experience-system.md +222 -0
  50. package/skills/ue-game-features/references/game-feature-patterns.md +308 -0
  51. package/skills/ue-gameplay-abilities/SKILL.md +518 -0
  52. package/skills/ue-gameplay-abilities/references/ability-task-reference.md +391 -0
  53. package/skills/ue-gameplay-abilities/references/gameplay-effect-reference.md +397 -0
  54. package/skills/ue-gameplay-abilities/references/gas-setup-patterns.md +369 -0
  55. package/skills/ue-gameplay-framework/SKILL.md +466 -0
  56. package/skills/ue-gameplay-framework/references/framework-class-map.md +243 -0
  57. package/skills/ue-input-system/SKILL.md +394 -0
  58. package/skills/ue-input-system/references/cpp-setup.md +131 -0
  59. package/skills/ue-input-system/references/enhanced-input-workflow.md +117 -0
  60. package/skills/ue-input-system/references/input-action-reference.md +731 -0
  61. package/skills/ue-mass-entity/SKILL.md +476 -0
  62. package/skills/ue-mass-entity/references/mass-entity-patterns.md +319 -0
  63. package/skills/ue-mass-entity/references/mass-fragment-reference.md +119 -0
  64. package/skills/ue-materials-rendering/SKILL.md +526 -0
  65. package/skills/ue-materials-rendering/references/material-parameter-reference.md +216 -0
  66. package/skills/ue-materials-rendering/references/post-process-settings.md +383 -0
  67. package/skills/ue-module-build-system/SKILL.md +487 -0
  68. package/skills/ue-module-build-system/references/build-cs-reference.md +418 -0
  69. package/skills/ue-module-build-system/references/common-build-errors.md +381 -0
  70. package/skills/ue-naming-conventions/SKILL.md +142 -0
  71. package/skills/ue-naming-conventions/references/asset-name-modifiers.md +233 -0
  72. package/skills/ue-naming-conventions/references/content-structure.md +83 -0
  73. package/skills/ue-networking-replication/SKILL.md +452 -0
  74. package/skills/ue-networking-replication/references/replication-patterns.md +526 -0
  75. package/skills/ue-networking-replication/references/rpc-decision-guide.md +393 -0
  76. package/skills/ue-niagara-effects/SKILL.md +531 -0
  77. package/skills/ue-niagara-effects/references/niagara-data-interfaces.md +491 -0
  78. package/skills/ue-niagara-effects/references/niagara-parameter-types.md +153 -0
  79. package/skills/ue-niagara-effects/references/niagara-workflow.md +115 -0
  80. package/skills/ue-packaging/SKILL.md +116 -0
  81. package/skills/ue-physics-collision/SKILL.md +423 -0
  82. package/skills/ue-physics-collision/references/collision-channel-setup.md +218 -0
  83. package/skills/ue-physics-collision/references/trace-patterns.md +499 -0
  84. package/skills/ue-procedural-generation/SKILL.md +505 -0
  85. package/skills/ue-procedural-generation/references/pcg-node-reference.md +381 -0
  86. package/skills/ue-procedural-generation/references/procedural-mesh-patterns.md +940 -0
  87. package/skills/ue-project-context/SKILL.md +305 -0
  88. package/skills/ue-sequencer-cinematics/SKILL.md +506 -0
  89. package/skills/ue-sequencer-cinematics/references/sequencer-patterns.md +629 -0
  90. package/skills/ue-serialization-savegames/SKILL.md +524 -0
  91. package/skills/ue-serialization-savegames/references/save-system-architecture.md +705 -0
  92. package/skills/ue-state-trees/SKILL.md +489 -0
  93. package/skills/ue-state-trees/references/state-tree-mass-integration.md +184 -0
  94. package/skills/ue-state-trees/references/state-tree-patterns.md +321 -0
  95. package/skills/ue-testing-debugging/SKILL.md +520 -0
  96. package/skills/ue-testing-debugging/references/automation-test-patterns.md +387 -0
  97. package/skills/ue-testing-debugging/references/profiling-commands.md +357 -0
  98. package/skills/ue-ui-umg-slate/SKILL.md +431 -0
  99. package/skills/ue-ui-umg-slate/references/common-ui-setup.md +484 -0
  100. package/skills/ue-ui-umg-slate/references/widget-types.md +487 -0
  101. package/skills/ue-world-level-streaming/SKILL.md +518 -0
  102. package/skills/ue-world-level-streaming/references/streaming-patterns.md +414 -0
  103. package/templates/gamedev/unreal-project-context.md +107 -0
@@ -0,0 +1,487 @@
1
+ # UMG Widget Type Reference
2
+
3
+ > Source: `Engine/Source/Runtime/UMG/Public/Components/`
4
+
5
+ ---
6
+
7
+ ## UButton
8
+
9
+ **Header:** `Components/Button.h`
10
+ **Base class:** `UContentWidget` (single child slot)
11
+ **Slate backing:** `SButton`
12
+
13
+ ### Key Delegates (BlueprintAssignable)
14
+
15
+ | Delegate | Type | Description |
16
+ |---|---|---|
17
+ | `OnClicked` | `FOnButtonClickedEvent` | Mouse release after press (default DownAndUp) |
18
+ | `OnPressed` | `FOnButtonPressedEvent` | Mouse/key press begins |
19
+ | `OnReleased` | `FOnButtonReleasedEvent` | Mouse/key released |
20
+ | `OnHovered` | `FOnButtonHoverEvent` | Cursor enters bounds |
21
+ | `OnUnhovered` | `FOnButtonHoverEvent` | Cursor leaves bounds |
22
+
23
+ ### Key Methods
24
+
25
+ ```cpp
26
+ void SetStyle(const FButtonStyle& InStyle);
27
+ const FButtonStyle& GetStyle() const;
28
+ void SetColorAndOpacity(FLinearColor InColorAndOpacity);
29
+ FLinearColor GetColorAndOpacity() const;
30
+ void SetBackgroundColor(FLinearColor InBackgroundColor);
31
+ FLinearColor GetBackgroundColor() const;
32
+ bool IsPressed() const;
33
+ void SetClickMethod(EButtonClickMethod::Type InClickMethod);
34
+ void SetTouchMethod(EButtonTouchMethod::Type InTouchMethod);
35
+ void SetPressMethod(EButtonPressMethod::Type InPressMethod);
36
+ void SetAllowDragDrop(bool bInAllowDragDrop);
37
+ ```
38
+
39
+ ### Click Methods
40
+
41
+ | `EButtonClickMethod` | Behavior |
42
+ |---|---|
43
+ | `DownAndUp` | Default. Click fires on mouse up after mouse down. |
44
+ | `MouseDown` | Fires immediately on mouse down. |
45
+ | `MouseUp` | Fires on mouse up regardless of where mouse down was. |
46
+ | `PreciseClick` | Fires on mouse up only if cursor is still over the button. |
47
+
48
+ ### UE5.2+ Deprecation Note
49
+
50
+ Direct property access (`WidgetStyle`, `ColorAndOpacity`, `BackgroundColor`, `ClickMethod`, `TouchMethod`, `PressMethod`, `IsFocusable`) is deprecated. Use the getter/setter methods above.
51
+
52
+ ### BindWidget Example
53
+
54
+ ```cpp
55
+ UPROPERTY(meta=(BindWidget))
56
+ TObjectPtr<UButton> ConfirmButton;
57
+
58
+ // In NativeConstruct:
59
+ ConfirmButton->OnClicked.AddDynamic(this, &UMyWidget::HandleConfirm);
60
+ ConfirmButton->SetColorAndOpacity(FLinearColor(0.2f, 0.8f, 0.2f, 1.f));
61
+ ```
62
+
63
+ ---
64
+
65
+ ## UTextBlock
66
+
67
+ **Header:** `Components/TextBlock.h`
68
+ **Base class:** `UTextLayoutWidget`
69
+ **Slate backing:** `STextBlock`
70
+
71
+ ### Key Properties (use setters in UE5.1+)
72
+
73
+ | Property | Type | Description |
74
+ |---|---|---|
75
+ | `Text` | `FText` | Displayed text |
76
+ | `Font` | `FSlateFontInfo` | Font, size, typeface |
77
+ | `ColorAndOpacity` | `FSlateColor` | Text color |
78
+ | `ShadowOffset` | `FVector2D` | Drop shadow offset |
79
+ | `ShadowColorAndOpacity` | `FLinearColor` | Drop shadow color |
80
+ | `MinDesiredWidth` | `float` | Minimum widget width |
81
+ | `TextTransformPolicy` | `ETextTransformPolicy` | None, ToLower, ToUpper |
82
+ | `TextOverflowPolicy` | `ETextOverflowPolicy` | Clip, Ellipsis, MultilineEllipsis |
83
+ | `bSimpleTextMode` | `bool` | Fast path for ASCII/numeric text |
84
+
85
+ ### Key Methods
86
+
87
+ ```cpp
88
+ FText GetText() const;
89
+ void SetText(FText InText); // Wipes Blueprint binding!
90
+ void SetColorAndOpacity(FSlateColor InColorAndOpacity);
91
+ void SetOpacity(float InOpacity);
92
+ void SetShadowColorAndOpacity(FLinearColor InShadowColorAndOpacity);
93
+ void SetShadowOffset(FVector2D InShadowOffset);
94
+ void SetFont(FSlateFontInfo InFontInfo);
95
+ void SetStrikeBrush(FSlateBrush InStrikeBrush);
96
+ void SetMinDesiredWidth(float InMinDesiredWidth);
97
+ void SetAutoWrapText(bool InAutoTextWrap);
98
+ void SetTextTransformPolicy(ETextTransformPolicy InTransformPolicy);
99
+ void SetTextOverflowPolicy(ETextOverflowPolicy InOverflowPolicy);
100
+ void SetFontMaterial(UMaterialInterface* InMaterial);
101
+ void SetFontOutlineMaterial(UMaterialInterface* InMaterial);
102
+ UMaterialInstanceDynamic* GetDynamicFontMaterial();
103
+ UMaterialInstanceDynamic* GetDynamicOutlineMaterial();
104
+ ```
105
+
106
+ ### Common Patterns
107
+
108
+ ```cpp
109
+ // Simple string (avoid — prefer FText for localization)
110
+ ScoreLabel->SetText(FText::FromString(TEXT("Score: 100")));
111
+
112
+ // Localized with format argument
113
+ ScoreLabel->SetText(FText::Format(
114
+ NSLOCTEXT("HUD", "ScoreFmt", "Score: {0}"),
115
+ FText::AsNumber(Score)));
116
+
117
+ // Number with grouping (e.g., "1,234,567")
118
+ ScoreLabel->SetText(FText::AsNumber(Score));
119
+
120
+ // Uppercase transform
121
+ ScoreLabel->SetTextTransformPolicy(ETextTransformPolicy::ToUpper);
122
+
123
+ // Ellipsis for overflow
124
+ ScoreLabel->SetTextOverflowPolicy(ETextOverflowPolicy::Ellipsis);
125
+
126
+ // Font from content
127
+ FSlateFontInfo FontInfo = FCoreStyle::GetDefaultFont();
128
+ FontInfo.Size = 32;
129
+ ScoreLabel->SetFont(FontInfo);
130
+ ```
131
+
132
+ ---
133
+
134
+ ## UImage
135
+
136
+ **Header:** `Components/Image.h`
137
+ **Base class:** `UWidget` (no children)
138
+ **Slate backing:** `SImage`
139
+
140
+ ### Key Properties
141
+
142
+ | Property | Type | Description |
143
+ |---|---|---|
144
+ | `Brush` | `FSlateBrush` | The image resource and drawing settings |
145
+ | `ColorAndOpacity` | `FLinearColor` | Tint applied to the image |
146
+ | `bFlipForRightToLeftFlowDirection` | `bool` | RTL localization support |
147
+
148
+ ### Key Methods
149
+
150
+ ```cpp
151
+ void SetColorAndOpacity(FLinearColor InColorAndOpacity);
152
+ void SetOpacity(float InOpacity);
153
+ void SetBrush(const FSlateBrush& InBrush);
154
+ const FSlateBrush& GetBrush() const;
155
+ void SetBrushFromAsset(USlateBrushAsset* Asset);
156
+ void SetBrushFromTexture(UTexture2D* Texture, bool bMatchSize = false);
157
+ void SetBrushFromTextureDynamic(UTexture2DDynamic* Texture, bool bMatchSize = false);
158
+ void SetBrushFromMaterial(UMaterialInterface* Material);
159
+ void SetBrushFromSoftTexture(TSoftObjectPtr<UTexture2D> SoftTexture, bool bMatchSize = false);
160
+ void SetBrushFromSoftMaterial(TSoftObjectPtr<UMaterialInterface> SoftMaterial);
161
+ void SetBrushFromAtlasInterface(TScriptInterface<ISlateTextureAtlasInterface> AtlasRegion, bool bMatchSize = false);
162
+ void SetDesiredSizeOverride(FVector2D DesiredSize);
163
+ void SetBrushTintColor(FSlateColor TintColor);
164
+ void SetBrushResourceObject(UObject* ResourceObject);
165
+ UMaterialInstanceDynamic* GetDynamicMaterial();
166
+ void SetFlipForRightToLeftFlowDirection(bool bFlip);
167
+ ```
168
+
169
+ ### Common Patterns
170
+
171
+ ```cpp
172
+ // Static texture
173
+ AvatarImage->SetBrushFromTexture(LoadObject<UTexture2D>(nullptr, TEXT("/Game/UI/T_Avatar")));
174
+
175
+ // Material instance dynamic for animation or parameters
176
+ AvatarImage->SetBrushFromMaterial(AvatarMaterial);
177
+ UMaterialInstanceDynamic* MID = AvatarImage->GetDynamicMaterial();
178
+ MID->SetScalarParameterValue(TEXT("GlowIntensity"), 1.5f);
179
+ MID->SetVectorParameterValue(TEXT("Tint"), FLinearColor::Yellow);
180
+
181
+ // Async stream from soft pointer (no blocking load)
182
+ AvatarImage->SetBrushFromSoftTexture(SoftAvatarTexture, /*bMatchSize=*/true);
183
+
184
+ // Size override
185
+ AvatarImage->SetDesiredSizeOverride(FVector2D(64.f, 64.f));
186
+
187
+ // Tint without touching the brush
188
+ AvatarImage->SetColorAndOpacity(FLinearColor(1.f, 0.5f, 0.5f, 1.f));
189
+ ```
190
+
191
+ ---
192
+
193
+ ## UProgressBar
194
+
195
+ **Header:** `Components/ProgressBar.h`
196
+ **Base class:** `UWidget` (no children)
197
+ **Slate backing:** `SProgressBar`
198
+
199
+ ### Key Properties
200
+
201
+ | Property | Type | Description |
202
+ |---|---|---|
203
+ | `Percent` | `float` | Fill value 0.0–1.0 |
204
+ | `BarFillType` | `EProgressBarFillType` | LeftToRight, RightToLeft, FillFromCenter, etc. |
205
+ | `BarFillStyle` | `EProgressBarFillStyle` | Scale or Mask |
206
+ | `bIsMarquee` | `bool` | Indeterminate animation |
207
+ | `FillColorAndOpacity` | `FLinearColor` | Fill color |
208
+
209
+ ### Key Methods
210
+
211
+ ```cpp
212
+ float GetPercent() const;
213
+ void SetPercent(float InPercent); // Primary runtime update
214
+ void SetFillColorAndOpacity(FLinearColor InColor);
215
+ FLinearColor GetFillColorAndOpacity() const;
216
+ void SetIsMarquee(bool InbIsMarquee);
217
+ bool UseMarquee() const;
218
+ void SetBarFillType(EProgressBarFillType::Type InBarFillType);
219
+ void SetBarFillStyle(EProgressBarFillStyle::Type InBarFillStyle);
220
+ void SetBorderPadding(FVector2D InBorderPadding);
221
+ ```
222
+
223
+ ### Fill Types
224
+
225
+ | `EProgressBarFillType` | Description |
226
+ |---|---|
227
+ | `LeftToRight` | Default, fills left to right |
228
+ | `RightToLeft` | Fills right to left |
229
+ | `FillFromCenter` | Fills outward from center (vertical) |
230
+ | `FillFromCenterHorizontal` | Fills outward from center (horizontal) |
231
+ | `FillFromCenterVertical` | Fills up/down from vertical center |
232
+ | `TopToBottom` | Fills top to bottom |
233
+ | `BottomToTop` | Fills bottom to top |
234
+
235
+ ### Common Patterns
236
+
237
+ ```cpp
238
+ // Health bar
239
+ HealthBar->SetPercent(Health / MaxHealth);
240
+ HealthBar->SetFillColorAndOpacity(Health > MaxHealth * 0.3f
241
+ ? FLinearColor(0.f, 0.8f, 0.f, 1.f) // Green
242
+ : FLinearColor(0.9f, 0.1f, 0.f, 1.f));// Red
243
+
244
+ // Loading spinner (marquee)
245
+ LoadingBar->SetIsMarquee(true);
246
+
247
+ // Experience bar filling right-to-left
248
+ XPBar->SetBarFillType(EProgressBarFillType::LeftToRight);
249
+ XPBar->SetPercent(XP / XPToNextLevel);
250
+ ```
251
+
252
+ ---
253
+
254
+ ## UListView
255
+
256
+ **Header:** `Components/ListView.h`
257
+ **Base class:** `UListViewBase`, `ITypedUMGListView<UObject*>`
258
+ **Slate backing:** `SListView<UObject*>`
259
+
260
+ The list is virtualized: only visible entry widgets exist. Items are data objects; entry widgets are reused as the list scrolls.
261
+
262
+ ### Key Delegates
263
+
264
+ | Delegate | Signature | Description |
265
+ |---|---|---|
266
+ | `BP_OnItemClicked` | `(UObject* Item)` | Item clicked |
267
+ | `BP_OnItemDoubleClicked` | `(UObject* Item)` | Item double-clicked |
268
+ | `BP_OnItemSelectionChanged` | `(UObject* Item, bool bIsSelected)` | Selection changed |
269
+ | `BP_OnEntryInitialized` | `(UObject* Item, UUserWidget* Widget)` | Entry widget assigned |
270
+ | `BP_OnItemScrolledIntoView` | `(UObject* Item, UUserWidget* Widget)` | Item scrolled visible |
271
+
272
+ ### Key Methods
273
+
274
+ ```cpp
275
+ // Add / remove items
276
+ void AddItem(UObject* Item);
277
+ void RemoveItem(UObject* Item);
278
+ void ClearListItems();
279
+ void SetListItems(const TArray<ItemObjectT, AllocatorType>& InListItems); // Template
280
+
281
+ // Query
282
+ const TArray<UObject*>& GetListItems() const;
283
+ UObject* GetItemAt(int32 Index) const;
284
+ int32 GetNumItems() const;
285
+ int32 GetIndexForItem(const UObject* Item) const;
286
+ bool IsRefreshPending() const;
287
+
288
+ // Selection (single-selection recommended for GetSelectedItem)
289
+ void SetSelectedItem(const UObject* Item);
290
+ void SetSelectedIndex(int32 Index);
291
+ UObject* GetSelectedItem() const; // Template: GetSelectedItem<UMyData>()
292
+ bool BP_GetSelectedItems(TArray<UObject*>& Items) const;
293
+ int32 BP_GetNumItemsSelected() const;
294
+ void BP_ClearSelection();
295
+ void SetSelectionMode(TEnumAsByte<ESelectionMode::Type> SelectionMode);
296
+
297
+ // Navigation and scrolling
298
+ void ScrollIndexIntoView(int32 Index);
299
+ void NavigateToIndex(int32 Index);
300
+ void BP_ScrollItemIntoView(UObject* Item);
301
+ void BP_NavigateToItem(UObject* Item);
302
+ bool BP_IsItemVisible(UObject* Item) const;
303
+
304
+ // Entry widget retrieval (only valid when the entry is visible)
305
+ RowWidgetT* GetEntryWidgetFromItem(const UObject* Item) const; // Template
306
+ ```
307
+
308
+ ### IUserObjectListEntry (entry widget interface)
309
+
310
+ ```cpp
311
+ // Entry widget header:
312
+ UCLASS()
313
+ class UMyEntryWidget : public UUserWidget, public IUserObjectListEntry
314
+ {
315
+ GENERATED_BODY()
316
+ protected:
317
+ // Implement this — called each time the entry is assigned a new item object
318
+ virtual void NativeOnListItemObjectSet(UObject* ListItemObject) override;
319
+
320
+ // IUserListEntry helpers (from parent interface):
321
+ // bool IsItemSelected() const;
322
+ // bool IsItemExpanded() const; // TreeView only
323
+ };
324
+
325
+ // Access the assigned item from within the entry widget:
326
+ UMyData* Data = GetListItem<UMyData>();
327
+
328
+ // Static helpers (BlueprintCallable via UUserObjectListEntryLibrary):
329
+ // UObject* GetListItemObject(...)
330
+ // int32 GetListItemIndex(...)
331
+ // bool IsFirstWidget(...)
332
+ // bool IsLastWidget(...)
333
+ ```
334
+
335
+ ### UTileView
336
+
337
+ Works identically to `UListView` but arranges entries in a 2D grid. Entry height is set on the `UTileView`. Uses the same `IUserObjectListEntry` interface.
338
+
339
+ ---
340
+
341
+ ## UScrollBox
342
+
343
+ **Header:** `Components/ScrollBox.h`
344
+ **Base class:** `UPanelWidget` (multiple children)
345
+
346
+ ```cpp
347
+ // Programmatic scroll
348
+ MyScrollBox->ScrollToStart();
349
+ MyScrollBox->ScrollToEnd();
350
+ MyScrollBox->ScrollWidgetIntoView(ChildWidget, /*bAnimateScroll=*/true);
351
+ MyScrollBox->SetScrollOffset(200.f);
352
+ float Offset = MyScrollBox->GetScrollOffset();
353
+ ```
354
+
355
+ ---
356
+
357
+ ## UWidgetSwitcher
358
+
359
+ **Header:** `Components/WidgetSwitcher.h`
360
+
361
+ ```cpp
362
+ // Only one child is visible at a time (zero-based index)
363
+ MySwitcher->SetActiveWidgetIndex(1);
364
+ MySwitcher->SetActiveWidget(MyChildWidget);
365
+ int32 Index = MySwitcher->GetActiveWidgetIndex();
366
+ UWidget* Active = MySwitcher->GetActiveWidget();
367
+ int32 Count = MySwitcher->GetNumWidgets();
368
+ ```
369
+
370
+ ---
371
+
372
+ ## UCheckBox
373
+
374
+ ```cpp
375
+ // State
376
+ bool bChecked = MyCheckBox->IsChecked();
377
+ MyCheckBox->SetIsChecked(true);
378
+ ECheckBoxState State = MyCheckBox->GetCheckedState();
379
+ // ECheckBoxState: Unchecked, Checked, Undetermined
380
+
381
+ // Delegate
382
+ MyCheckBox->OnCheckStateChanged.AddDynamic(this, &UMyWidget::HandleCheckChanged);
383
+ // Signature: void HandleCheckChanged(bool bIsChecked)
384
+ ```
385
+
386
+ ---
387
+
388
+ ## UEditableTextBox
389
+
390
+ ```cpp
391
+ FText Text = MyInput->GetText();
392
+ MyInput->SetText(FText::FromString(TEXT("Default")));
393
+ MyInput->SetHintText(NSLOCTEXT("UI", "SearchHint", "Search..."));
394
+ MyInput->SetIsReadOnly(true);
395
+ MyInput->SetIsPassword(true); // Mask characters
396
+
397
+ // Delegates
398
+ MyInput->OnTextChanged.AddDynamic(this, &UMyWidget::HandleTextChanged);
399
+ MyInput->OnTextCommitted.AddDynamic(this, &UMyWidget::HandleTextCommitted);
400
+ // Committed signature: void(const FText& Text, ETextCommit::Type CommitMethod)
401
+ // ETextCommit: OnEnter, OnUserMovedFocus, OnCleared, Default
402
+ ```
403
+
404
+ ---
405
+
406
+ ## USlider
407
+
408
+ ```cpp
409
+ float Value = MySlider->GetValue(); // 0.0 – 1.0
410
+ MySlider->SetValue(0.5f);
411
+ MySlider->SetMinValue(0.f);
412
+ MySlider->SetMaxValue(100.f);
413
+ MySlider->SetStepSize(1.f);
414
+ MySlider->SetOrientation(EOrientation::Orient_Horizontal);
415
+
416
+ MySlider->OnValueChanged.AddDynamic(this, &UMyWidget::HandleSliderChanged);
417
+ // Signature: void(float Value)
418
+ ```
419
+
420
+ ---
421
+
422
+ ## UComboBoxString
423
+
424
+ ```cpp
425
+ MyCombo->AddOption(TEXT("Option A"));
426
+ MyCombo->AddOption(TEXT("Option B"));
427
+ MyCombo->SetSelectedOption(TEXT("Option A"));
428
+ FString Selected = MyCombo->GetSelectedOption();
429
+ int32 Count = MyCombo->GetOptionCount();
430
+ MyCombo->ClearOptions();
431
+ MyCombo->RefreshOptions();
432
+
433
+ MyCombo->OnSelectionChanged.AddDynamic(this, &UMyWidget::HandleComboChanged);
434
+ // Signature: void(FString SelectedItem, ESelectInfo::Type SelectionType)
435
+ ```
436
+
437
+ ---
438
+
439
+ ## Visibility Reference
440
+
441
+ | `ESlateVisibility` | Rendered | Takes Space | Receives Input |
442
+ |---|---|---|---|
443
+ | `Visible` | Yes | Yes | Yes |
444
+ | `Collapsed` | No | No | No |
445
+ | `Hidden` | No | Yes | No |
446
+ | `HitTestInvisible` | Yes | Yes | No (passes through) |
447
+ | `SelfHitTestInvisible` | Yes | Yes | Children only |
448
+
449
+ ```cpp
450
+ Widget->SetVisibility(ESlateVisibility::Collapsed);
451
+ ESlateVisibility V = Widget->GetVisibility();
452
+ bool bVisible = V == ESlateVisibility::Visible;
453
+ ```
454
+
455
+ ---
456
+
457
+ ## UWidget Base (All Widgets)
458
+
459
+ All UMG widgets inherit from `UWidget`:
460
+
461
+ ```cpp
462
+ // Enable/disable (grays out and blocks input)
463
+ Widget->SetIsEnabled(false);
464
+ bool bEnabled = Widget->GetIsEnabled();
465
+
466
+ // Render opacity (does not affect layout or hit testing)
467
+ Widget->SetRenderOpacity(0.5f);
468
+ float Opacity = Widget->GetRenderOpacity();
469
+
470
+ // Transform (applied as render transform, not layout)
471
+ Widget->SetRenderTransformAngle(45.f);
472
+ Widget->SetRenderTranslation(FVector2D(10.f, 0.f));
473
+ Widget->SetRenderScale(FVector2D(1.2f, 1.2f));
474
+
475
+ // Tooltip
476
+ Widget->SetToolTipText(NSLOCTEXT("UI", "Tip", "Click to confirm"));
477
+
478
+ // Cursor
479
+ Widget->SetCursor(EMouseCursor::Hand);
480
+
481
+ // Focus
482
+ Widget->SetKeyboardFocus();
483
+ bool bHasFocus = Widget->HasKeyboardFocus();
484
+
485
+ // Slate widget access (for Slate-only APIs)
486
+ TSharedPtr<SWidget> SlateWidget = Widget->GetCachedWidget();
487
+ ```