๐
2025-11-19
Visibility๋ฅผ ์ง์ ๋ฐ๊พธ์ง ๋ง๊ณ SetActiveWidgetIndex()๋ง ์ฌ์ฉํด์ UI ์ ํ
// WidgetSwitcher_Backpack
enum EBackpackWidgetIndex {
Empty_Backpack = 0,
PlayerInventory = 1
};
// WidgetSwitcher_Content
enum EContentWidgetIndex {
Empty_Content = 0,
Container = 1,
BuildingMode = 2,
CraftingMode = 3,
Settings = 4
};
์ฌ์ฉ์ ์ ๋ ฅ(Eํค)ํค ํ๋๋ก UI Open/Close ํตํฉ ๊ด๋ฆฌ
void ToggleContainer(AContainerActor* Container) {
// ๊ฐ์ ์์๋ฉด ๋ซ๊ธฐ
if (CurrentContainer == Container) {
CloseCurrentContainer();
return;
}
// ๋ค๋ฅธ ์์๋ฉด ๊ต์ฒด
// ...
}
void HandleEscapeKey() {
// 1์์: ํ๊ฒฝ์ค์ ๋ซ๊ธฐ
if (bIsSettingsOpen) {
CloseSettings();
return;
}
// 2์์: ๊ฒ์ UI ๋ชจ๋ ๋ซ๊ธฐ
if (IsAnyUIOpen()) {
CloseAllGameUI();
return;
}
// 3์์: ํ๊ฒฝ์ค์ ์ด๊ธฐ
OpenSettings();
}
๋ธ๋ฃจํ๋ฆฐํธ๋ก ๋ง๋ ์์ ฏ์ C++์ ์ปจํ ์ด๋ ์ธ๋ฒคํ ๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ ์ ๋ฌํ ๊น?
// C++ ์ธํฐํ์ด์ค ์ ์
UINTERFACE(Blueprintable)
class UIInventoryWidget : public UInterface {
GENERATED_BODY()
};
class IIInventoryWidget {
GENERATED_BODY()
public:
UFUNCTION(BlueprintNativeEvent, BlueprintCallable)
void SetInventoryData(UTSInventoryMasterComponent* Inventory);
};
// C++์์ ํธ์ถ
if (ContainerWidget->Implements<UIInventoryWidget>()) {
IIInventoryWidget::Execute_SetInventoryData(
ContainerWidget,
ContainerInventory
);
}
SetInventoryData ์ด๋ฒคํธ ๊ตฌํ// ๋ฌธ์ ์๋๋ฆฌ์ค
1. ์์ ์ด๋ฆผ (ํ์ด๋จธ ์คํ ์ค)
2. ํ๊ฒฝ์ค์ ๋ฒํผ ํด๋ฆญ
3. ํ๊ฒฝ์ค์ ๋ซ์
4. CurrentContainer๊ฐ ๋จ์์๊ณ ํ์ด๋จธ๋ ์คํ ์ค!
void CloseSettings() {
bIsSettingsOpen = false;
// โ
ํน์ ๋จ์ ์ํ ์ ๋ฆฌ
CloseCurrentContainer(); // nullptr์ด๋ฉด ๋ฐ๋ก return
UpdateInputMode();
}
void OpenSettings() {
// โ
์ด๊ธฐ ์ ์ ๊ฒ์ UI ์ ๋ฆฌ
if (IsAnyUIOpen()) {
CloseAllGameUI();
}
// ...
}
UI ์์คํ ์ ์ค๊ณํ๋ฉด์ "์ฌ์ฉ์๊ฐ ์ด๋ค ์์๋ก ๋ฒํผ์ ๋๋ฅผ์ง ๋ชจ๋ฅธ๋ค"๋ ๊ฑธ ์ฒด๊ฐํ๋ค. ์ฒ์์ ์ ์์ ์ธ ๊ฒฝ๋ก๋ง ์๊ฐํ๋๋ฐ, ์์ ์ด๊ณ โ ์ค์ ์ด๊ณ โ ์ค์ ๋ซ์ผ๋ฉด ์์ ํ์ด๋จธ๊ฐ ๋จ์์๋ ๋ฒ๊ทธ๋ฅผ ๋ฐ๊ฒฌํ๋ค.
๋ฐฉ์ด์ ํ๋ก๊ทธ๋๋ฐ์ ์ค์์ฑ์ ๊นจ๋ฌ์๋ค. ํนํ UI์ฒ๋ผ ์ํ๊ฐ ๋ณต์กํ ์์คํ ์์๋ ๊ฐ ํจ์๊ฐ "๋ค์ด์ฌ ๋ ์ํ ํ์ธ, ๋๊ฐ ๋ ์ ๋ฆฌ"๋ฅผ ์ฒ ์ ํ ํด์ผ ํ๋ค.